回归决策树算法是应用sklearn.tree中的DecisionTreeRegressor类来实现的
示例:
import numpy as np
from sklearn.tree import DecisionTreeRegressor # 用的是决策树回归算法
import matplotlib.pyplot as plt
N = 100
x=np.random.rand(N) * 6 - 3
x.sort()
# print(x)
y = np.sin(x) + np.random.rand(N) * 0.05
# print(y)
# 多少行不知道,只要最终是一列
x = x.reshape(-1,1)
# 进行初始化
dt_reg = DecisionTreeRegressor(criterion='mse',max_depth=3)
# 进行数据的训练拟合
dt_reg.fit(x,y)
# 生成50个-3到3之间的测试数据
x_test = np.linspace(-3,3,50).reshape(-1,1)
# print(x_test)
# 对测试数据进行预测
y_hat = dt_reg.predict(x_test)
##基于不同深度的决策树,判断其拟合程度
depth = [2,4,6,8,10]
##应用不同的颜色便于区分
color = 'rgbmy'
##实例化对象
dt_reg = DecisionTreeRegressor()
## 原始数据图像的画入
plt.plot(x,y,'ko',label='actual')
##通过遍历使不同的深度的决策树得以在途中呈现,便于观察分析
for d,c in zip(depth,color):
dt_reg.set_params(max_depth=d)
dt_reg.fit(x,y)
y_hat = dt_reg.predict(x_test)
plt.plot(x_test,y_hat,'-',color=c,linewidth=2,label="depth=%d"%d)
plt.legend(loc='lower right')
plt.grid(b=True)
plt.show()
关于 DecisionTreeRegressor类:
criterion="mse",
splitter="best",
max_depth=None,
min_samples_split=2,
min_samples_leaf=1,
min_weight_fraction_leaf=0.,
max_features=None,
random_state=None,
max_leaf_nodes=None,
min_impurity_decrease=0.,
min_impurity_split=None,
presort=False:
参数介绍:
criterion:表示在基于特征划分数据集合时,选择特征的标准。默认的是‘MSE’,即根据均方误差
splitter:表示在构造树时,选择结点的原则,默认是splitter=‘best’,即选择最好的特征点分类,比如基于信息增益分类时,则选择信息增益最大的特征点,还可以是’random’
max_depth:表示所构造的树的深度值,如果达到这个值,则停止。
min_samples_split:表示在分解内部结点时最少的样本数
min_samples_leaf:表示每个叶结点最小的样本数目
min_weight_fraction_leaf:optional(default=0),如果设置为0,则表示所有样本的权重是一样的
max_features:节点分裂时参与判断的最大特征数,节点分裂时参与判断的最大特征数
● int:个数
● float:占所有特征的百分比
★ auto:所有特征数的开方
● sqrt:所有特征数的开方
● log2:所有特征数的log2值
● None:等于所有特征数
random_state:
- 如果是int,则random_state是随机数生成器使用的种子;
- 如果是random state实例,则random_state是随机数生成器;
- 如果没有,则随机数生成器是使用的RandomState实例,通过“NP.随机”。
max_leaf_nodes:最大叶节点数,None时无限制,取整数时,忽略max_depth
min_impurity_decrease:如果节点的分裂导致的不纯度的下降程度大于或者等于这个节点的值,那么这个节点将会被分裂。
不纯度加权减少方程式如下:
N_t / N * (impurity - N_t_R / N_t * right_impurity
- N_t_L / N_t * left_impurity)
N是样本总的数量,N_t是当前节点处的样本数量,N_t_L是左孩子节点样本的数量,还有N_t_R是右孩子节点的样本数量。
N,N_t,N_t_R和N_t_L全部是指加权总和,如果sample_weight通过的话。
min_impurity_split:float, optional (default=1e-7),树增长停止阈值,仅仅当他的impurity超过阈值时才会继续向下分解,否则会成为叶结点
presort:bool,optional(default=False),表示在进行拟合前,是否预分数据来加快数的构建。对于数据集非常庞大的分类,presort=true将导致整个分类变的缓慢;当数据集较小,且数的深度有限制,presort=true才会加速分类