sklearn回归树

回归树

几乎所有参数,属性及接口都和分类树一模一样。需要注意的是,在回归树中没有标签分布是否均衡的问题,因此没有class_weight这样的参数。

criterion

回归树衡量分枝质量的指标:

  1. mse:均方误差,这种方法通过使用叶子节点的均值来最小化L2损失
  2. friedman_mse:费尔德曼均方误差,这种指标针对潜在分枝中的问题改进后的均方误差
  3. mae:绝对平均误差,这种指标使用叶节点的中值来最小化L1损失
    属性中最重要的依然是feature_importances_,接口依然是apply, fit, predict, score最核心

MSE的本质就是样本真实数据和回归结果的差异。**在回归树中,MSE不只是我们的分枝质量衡量指标,也是我们最常用的衡量回归树回归质量的指标。**当使用交叉验证,或其他方式获取回归树的结果时,往往选择均方误差作为评估。回归树中,MSE越小越好。回归树的接口score返回的是R平方,并不是MSE。

均方误差永远为正,但是sklearn当中使用均方误差作为评判标准时,是计算“负均方误差”,因此在sklearn中,真正的误差MSE的数值,其实就是neg_mean_squared_error去掉负号的数字。

简单回归树工作&交叉验证cross_val_score的用法

from sklearn.datasets import load_boston
from sklearn.model_selection import cross_val_score #导入交叉验证的包
from sklearn.tree import DecisionTreeRegressor

regressor = DecisionTreeRegressor(random_state=0)
cross_val_score(regressor, boston.data, boston.target, cv=10,
                scoring = "neg_mean_squared_error" 
                #什么都不填默认返回R平方,将其改为负均方误差NMSE
               )
----------------------------------------------------------
array([-18.08941176, -10.61843137, -16.31843137, -44.97803922,
       -17.12509804, -49.71509804, -12.9986    , -88.4514    ,
       -55.7914    , -25.0816    ])

一维回归的图像绘制

在二维平面上观察决策树怎么样拟合一条曲线。我们使用回归树来拟合正弦曲线,并添加一些噪声来观察回归树的表现。

导入需要的库

import numpy as np
from sklearn.tree import DecisionTreeRegressor
import matplotlib.pyplot as plt

创建一条含有噪声的正弦曲线

基本思路:首先创造一组随机,在0-5上的横坐标轴的取值(x),然后将这一组值放到sin函数中去生成纵坐标的值(y),再对y添加噪声。

rng = np.random.RandomState(1) #添加随机种子
x = np.sort(5*rng.rand(80,1),axis=0) #进行排序
y = np.sin(x).ravel() #导入函数sinx,并进行降维
y[::5] += 3* (0.5 - rng.rand(16)) #在正弦曲线上添加噪声

模型实例化&训练&导入测试集

regr_1 = DecisionTreeRegressor(max_depth = 3)
regr_2 = DecisionTreeRegressor(max_depth = 5)
regr_1.fit(x,y)
regr_2.fit(x,y)

X_test = np.arange(0.0, 5.0, 0.01)[:, np.newaxis] #np.newaxis进行升维 np.arange(起始值,最终值,步长)
y_1 = regr_1.predict(X_test) #由于传入测试集故需升维
y_2 = regr_2.predict(X_test)

绘制图像

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=3", linewidth=2)
plt.plot(X_test, y_2, color="yellowgreen", label="max_depth=5", linewidth=2)
plt.title("Decision Tree Regressor")
plt.legend()
plt.show()

最终结果

sklearn回归树_第1张图片

你可能感兴趣的:(sklearn,回归,机器学习)