sklearn决策树回归

决策树除了可以用来分类(标签为离散属性)可以用于回归(标签为连续属性)

使用回归树模型拟合余弦曲线

1 导入模块

from sklearn.tree import DecisionTreeRegressor # 回归树
import numpy as np
import matplotlib.pyplot as plt

2 手动创建训练集、测试集

使用numpy创建训练集、测试集

# 1、生成训练集
rng=np.random.RandomState(1)
X=np.sort(5*rng.rand(80,1),axis=0) # 随机生成80个[0,5)的数,注意X必须是二维数组,因为sklearn的模型只能接收二维数组做参数
y=np.cos(X).ravel() # 根据x生成对应的y,注意:这里使用了ravel()对数据进行了降维
y[::5]+=3*(0.5-rng.rand(16)) # 给数据增加噪声
# 画图观察训练集数据
plt.figure()
plt.scatter(X,y,s=20,edgecolors="black",c="darkorange",label="data")

图中那些偏离曲线的点就是增加噪声导致的

sklearn决策树回归_第1张图片

# 生成测试集
X_test=np.arange(0.0,5.0,0.01)[:,np.newaxis] # np.newaxis的作用是升维(因为sklearn只接收二维数据)

3 创建模型

这里创建了最大深度不同的两个模型,目的是为了观察最大深度对模型拟合效果的影响

# sklearn三步法:创建模型、fit、predict

# 创建模型
regr_1=DecisionTreeRegressor(max_depth=2) # 回归树模型,最大深度为2
regr_2=DecisionTreeRegressor(max_depth=5) # 回归树模型,最大深度为5

# 将训练集填充到模型中
regr_1.fit(X,y)
regr_2.fit(X,y)

# 使用测试集进行预测
y_1=regr_1.predict(X_test)
y_2=regr_2.predict(X_test)

4 画图观察效果

画出三条曲线,分别是训练集曲线、模型1的预测曲线、模型2的预测曲线

plt.figure()
plt.scatter(X,y,s=20,edgecolors="black",c="darkorange",label="data") # 训练集曲线
plt.plot(X_test,y_1,color="green",label="max_depth=2",linewidth=2) # 模型1预测曲线
plt.plot(X_test,y_2,color="blue",label="max_depth=5",linewidth=2) # 模型2预测曲线
plt.xlabel("data")
plt.ylabel("target")
plt.title("Decision Tree Regression")
plt.legend()
plt.show()

从图中可以看出绿色的线(最大深度=2)拟合效果较好。蓝色的线(最大深度=5)过拟合了,受到了噪声的影响。

sklearn决策树回归_第2张图片

你可能感兴趣的:(sklearn,决策树,回归)