文章目录
前言
观察决策树是怎样拟合一条曲线的。我们用回归树来拟合正弦曲线,并添加一些噪声来观察回归树的表现
步骤
1. 导入需要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeRegressor
2. 创建含有噪声的正弦曲线
在本代码内涉及到降维操作,对降维的方法的学习在下面的连接
numpy数组的升维和降维操作
#设置随机数种子
rng = np.random.RandomState(2)
#数据要二维才可作为训练集的data,设要80个数据为训练集
rng.rand(80,1)
#生成的二维数组的顺序是乱序的,如果要画曲线是从小到大开始画,所以需要进行排序好一些,在这里要0-5之间
x = np.sort(5*rng.rand(80,1),axis=0)
#设置训练集的标签,在这里正弦曲线对应的y值就是标签,但是生成的y是二维的,标签需要是一维,所以进行降维
y = np.sin(x).ravel()
#为训练集添加噪音,在刚刚设置的完美训练集中每隔五个取一个进行噪音的添加
#使用0.5乘是因为在0-1,0.5是中间值,使用0.5乘就会出现正数或者负数,随机性增加
y[::5] += 0.5*rng.rand(16)
3. 对模型的实例化以及训练模型
'''
创建两个模型的实例化,一个设置最大深度为2,一个设置为3,来观察设置不同参数对模型的拟合程度
'''
regr_1 = DecisionTreeRegressor(max_depth=2)
regr_2 = DecisionTreeRegressor(max_depth=5)
regr_1.fit(x, y)
regr_2.fit(x, y)
4. 将测试集导入,进行预测
在本代码内涉及到升维操作,对升维的方法的学习在下面的连接
numpy数组的升维和降维操作
#随机构造测试集,测试集需要的也是二维的,所以进行升维操作
x_test = np.arange(0.0, 5.0, 0.01)[:,np.newaxis]
#将测试集在深度为2的模型一进行预测
y_1 = regr_1.predict(x_test)
#将测试集在深度为5的模型二进行预测
y_2 = regr_2.predict(x_test)
5. 对结果进行绘制图像
plt.figure()
#使用散点图对训练集的图像画出来
plt.scatter(x, y, s=20, edgecolor="black",c="darkorange", label="data")
#对使用模型一预测之后的图像进行绘制
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()
总结
回归树学习了近似正弦曲线的局部线性回归。我们可以看到,如果树的最大深度(由max_depth参数控制)设置得太高,则决策树学习得太精细,它从训练数据中学了很多细节,包括噪声得呈现,从而使模型偏离真实的正弦曲线,形成过拟合。