【菜菜的sklearn机器学习】(2)回归树
课程学习:1 7. 回归树:参数,属性和接口_哔哩哔哩_bilibili
课程2-回归树DecisionTreeRegressor
回归树的参数、属性及接口和决策树几乎都一样,但是回归树没有标签分布是否均衡的问题(因为是连续回归),所以没有class_weight这样的参数。(一个是连续型变量,一个是分类型变量)
1、重要参数、属性、接口
Criterion:
mse(mean squared error 均方误差):常用
friedman_mse(费尔德曼均方误差)
mae(mean absolute error绝对平均误差):0.20以上版本才有
属性feature_importances_,接口依然是apply,fit,predict,score
回归树的接口score返回的是R平方(可±),不是MSE(+)
=>交叉验证的时候,sklearn自动使用负均方误差作为计算
2、交叉验证:用于观察模型的稳定性。
将数据划分为n份,一次使用其中的一份作为测试集,其他n-1份作为训练集,多次计算模型的准确性来评估模型的平均准确程度。
# 实例化 交叉验证
regressor = DecisionTreeRegressor(random_state=0)
cross_val_score(regressor,boston.data,boston.target,cv=10)
五个参数:
regressor模型评估器:任何实例化后的算法模型
Boston.data完整的特征数据集:不需要划分数据集和测试集
Boston.target完整的标签
Cv=10:交叉验证10次,即数据集分成十份;通常默认取5
Scoring衡量模型
3、eg.利用决策树你和一条正弦曲线,并观察回归树的表现
step1:导入需要的库
import numpy as np # 生成数据点
from sklearn.tree import DecisionTreeRegressor
import matplotlib.pyplot as plt # 画图
step2:创建一条含有噪声的正弦曲线
# 2.创建一条含有噪声的正弦曲线
# 思路:先创建随机分布在0-5的x坐标,得y,再到y上添加噪声
rng = np.random.RandomState(1)
X = np.sort( 5 * rng.rand(80,1), axis=0 )
Y = np.sin(X).ravel()
# ①理想中/无噪声
plt.figure()
plt.scatter(X, Y, s=20, edgecolor="black",c="darkorange",label="data")
# ②加噪声
Y[::5] += 3 * (0.5 - rng.rand(16)) # 切片每5个数字取一个,所以80总能取16个;*3变大
plt.figure()
plt.scatter(X, Y, s=20, edgecolor="blue", c="red")
step3:实例化&训练模型
# 建两个模型:不同的拟合效果下,回归树是怎样表现的(max_depth最大深度会限制模型拟合)
regr_1 = DecisionTreeRegressor(max_depth=2)
regr_2 = DecisionTreeRegressor(max_depth=5)
regr_1.fit(X, Y)
regr_2.fit(X, Y)
step4:将测试集导入模型,预测效果
X_test = np.arange(0.0, 5.0, 0.01)[:,np.newaxis]
Y_1 = regr_1.predict(X_test)
Y_2 = regr_2.predict(X_test)
step5:绘图
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()
# y1和正弦曲线的趋势一致;y2波动大,说明受噪声的影响,出现过拟合
# 如果树的最大深度太高(max_depth控制),则决策树学习得太精细。从训练数据中学习了很多细节,包括噪声,从而使模型偏离真实曲线,形成过拟合
通过这个案例可以发现:如果树的最大深度太高(max_depth控制),则决策树学习得太精细。从训练数据中学习了很多细节,包括噪声,从而使模型偏离真实曲线,形成过拟合。
(1)
Fit中不能输入一维数组,用reshape;y只能导入一维数据,x是二维,所以要用降维函数ravel()
np.random.random((2,1))
np.random.random((2,1)).ravel()
np.random.random((2,1)).ravel().shapr
(2)scatter绘制散点图
(3)了解增维切片np.newaxis的用法