(参考资料:菜菜的sklearn)

重要参数,属性及接口

  • criterion
    1)输入"mse"使用均方误差mean squared error(MSE),父节点和叶子节点之间的均方误差的差额将被用来作为特征选择的标准,这种方法通过使用叶子节点的均值来最小化L2损失 。
    2)输入“friedman_mse”使用费尔德曼均方误差,这种指标使用弗里德曼针对潜在分枝中的问题改进后的均方误差
    3)输入"mae"使用绝对平均误差MAE(mean absolute error),这种指标使用叶节点的中值来最小化L1损失
  • 属性中最重要的依然是feature_importances_,接口依然是apply, fit, predict, score最核心

基于贝叶斯的高斯回归 贝叶斯回归树_回归树


在回归树中,MSE不只是我们的分枝质量衡量指标,也是我们最常用的衡 量回归树回归质量的指标,我们追求的是MSE越小越好注意!!回归树的接口score返回的是R平方,并不是MSE。R平方的定义如下:

基于贝叶斯的高斯回归 贝叶斯回归树_机器学习_02


其中u是残差平方和,v是总平方和。

**虽然均方误差永远为正,但是sklearn当中使用均方误差作为评判标准时,却是计算”负均方误差”(neg_mean_squared_error)。**这是因为sklearn在计算模型评估指标的时候,会考虑指标本身的性质,均 方误差本身是一种误差,所以被sklearn划分为模型的一种损失(loss),因此在sklearn当中,都以负数表示。真正的均方误差MSE的数值,其实就是neg_mean_squared_error去掉负号的数字。

实例:一维回归图像的绘制

用回归树来拟合正弦曲线,并添加一些噪声来 观察回归树的表现。
1.导入需要的库

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

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

#创建一条含噪声的正弦曲线
rng=np.random.RandomState(1)   #生成随机数种子
5*rng.rand(80,1)   #rand()生成0~1之间的随机数
X = np.sort(5 * rng.rand(80,1), axis=0)   #生成的横坐标的数据
y=np.sin(X).ravel()
y[::5]+=3*(0.5-rng.rand(16))    #[::5],5是步长,每5个数取出来一个加上一个随机数,以此制造噪声
plt.figure()
plt.scatter(X,y,s=20,edgecolor="black",c="darkorange",label="data")  #画散点图

基于贝叶斯的高斯回归 贝叶斯回归树_机器学习_03


3.实例化训练模型

#实例化训练模型
regr_1 = DecisionTreeRegressor(max_depth=2)
regr_2 = DecisionTreeRegressor(max_depth=5)
regr_1.fit(X, y)
regr_2.fit(X, y)
  1. 测试集导入模型,预测结果
X_test=np.arange(0.0,5.0,0.01)[:,np.newaxis]   #arange(起始点,结束点,步长),[:np.newaxis]用于升维
y_1=regr_1.predict(X_test)    #生成预测值
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()

基于贝叶斯的高斯回归 贝叶斯回归树_基于贝叶斯的高斯回归_04