Sklearn回归树拟合正弦曲线
程序员文章站
2022-07-14 13:41:14
...
观察决策树是如何拟合一条曲线的,噪声对曲线拟合的影响
1.导入需要的库
#导入所需要的库
import numpy as np
from sklearn.tree import DecisionTreeRegressor
import matplotlib.pyplot as plt
%pylab inline
2.生成一个含有噪声的正弦曲线
步骤生成随机数0-5的x,将X值放到Sin(X)上生成正弦曲线,对正弦曲线添加噪声
rng = np.random.RandomState(1)#生成随机数种子
#rand(80,1)生成0到1的随机数80个
#5 * rng.rand(80,1)生成0到1的随机数80个乘以5(0-5)
#sort 进行排序
x = np.sort(5 * rng.rand(80,1),axis = 0) #生成0-5的随机数X的取值
y = np.sin(x).ravel()#生成正弦曲线
#所有的行和列每5个取一个 5代表步长 y[::5] 行 列 步长
#rng.rand(16) 生成16个随机数 生成0到1之间得数据
y[::5] +=3 *(0.5-rng.rand(16))#在正弦曲线上加噪声
看看现在的图片
plt.figure()
plt.scatter(x,y,s=20,edgecolor="black",c= "darkorange",label = "date")
#建立两个模型 看不同的模型深度对训练集的拟合程度 最大深度设的小会限制模型队训练集的拟合
regr_1 = DecisionTreeRegressor(max_depth=2)#最大深度为2
regr_2 = DecisionTreeRegressor(max_depth=5)#最大深度为5
regr_1.fit(x,y)
regr_2.fit(x,y)
#导入测试集
X_test = np.arange(0.0,5.0,0.01)[:,np.newaxis]
#predict 导入测试集之后得到每个测试样本点的回归或分类的结果
y_1 = regr_1.predict(X_test)
y_2 = regr_2.predict(X_test)
plt.figure()
#画散点图 scatter 边框的颜色 edgecolors 点的颜色 c 标签label
plt.scatter(x,y, s=20,edgecolors="black",c="darkorange",label="data")
#折线图 plot 颜色 color
plt.plot(X_test,y_1,color="cornflowerblue",label="max_depth=2",linewidth =2)
plt.plot(X_test,y_2,color="yellowgreen",label="max_depth=5",linewidth =2)
plt.xlabel=("data")#横坐标
plt.ylabel=("target")#纵坐标
plt.title("Decision Tree Regression")#标题
plt.legend()#显示图例
plt.show()
限制树的深度可以有效防止数据过拟合,此例中当树的最大深度为5时,决策树学习较好,包括噪声,使模型偏离实际的正弦曲线,出现过拟合
微信公众号Excel螺丝钉
下一篇: Sklearn 线性回归实战