sk-learn 决策回归树的参数介绍

    本文大部分内容为sklearn库官网上的翻译内容,主要是为英语还不是很6,刚刚入门的小伙伴提供参考,后面的参数介绍参考了刘建平先生的博客,详情可参考如下两个网站:

介绍

    决策树是一种用于分类和回归的非参数化监督学习方法。其目标是通过从数据特征中学习到的简单决策规则来建立模型,预测目标变量的值。

优点:

1、易于理解,树可以被可视化

2、需要很少的数据预处理。其他模型可能需要特征归一化,需要创建虚拟变量,需要去除无效数据。值得注意的一点是,sklearn的决策树库也不能接受无效数据,在训练之前需要把无效数据去除。

3、决策树的训练复杂度是log(n), n是训练数据总量。

4、能够处理多输出问题。

5、它是一个白盒子模型,即如果给定的情况在模型中是可观察的,则条件的解释很容易通过布尔逻辑来解释。相反的,诸如神经网络等的黑盒子模型,则很难解释它的结果。

缺点:

1、sklearn库中的决策树函数有可能创建过多的枝叶而导致过拟合,目前的版本中还不支持剪枝机制(这点略坑,还以为能够自动剪枝)。因此,函数中要设置叶节点的最小样本数(min_samples_leaf)和树的最大深度(max_depth )来防止过拟合。

2、决策树可能是不稳定的,因为数据集中少量特征的变化就可能会产生一个完全不同的树。这个问题在使用决策树的集成学习方法(ensemble)能够得到一些改善。

3、众所周知,学习一个最优决策树是NP完全问题。因此,实际的决策树学习算法大多基于启发式算法,例如贪心算法。该算法只能得到一个局部最优解,而无法得到全局最优解。这个问题也要在集成学习中才能得到缓解。

扫描二维码关注公众号,回复: 1954066 查看本文章

4、对于异或、奇偶校验或多路复用等问题,决策树很难应用其中。

5、如果训练集中的数据被某类数据所主导,可能学习到一颗带有偏差的决策树。因此在训练之前要均衡训练集中的各类数据。

回归函数的应用

    网上多介绍各个机器学习算法的分类,本人最近做的是回归问题,因此这里主要介绍回归函数,分类函数与之类似。决策回归树的函数形式为:sklearn.tree.DecsionTreeRegressor(),具体python调用示例如下所示:

from sklearn import tree

X = [[0, 0], [2, 2]]

y = [0.5, 2.5]

clf = tree.DecisionTreeRegressor()

clf = clf.fit(X, y)

print(clf.predict([[1, 1]]))

    其中值得注意的是训练输入的特征X,很多新手搞不清特征的具体排列情况,在sklearn库中的所有函数,其特征输入X的格式为n_sanmple*n_features的矩阵,即每行为一个样本,每列为样本的一个特征。

参数说明

criterion string, optional (default=”mse”) 测量分割质量的函数,mse为均方误差函数,每个终端叶节点使用L2使损失最小化。friedman_mse使用Friedman改进分数的均方误差函数,其使用L1范数使损失最小化
max_depth int or None, optional (default=None)

树的最大深度,如果是None树的节点将一直扩展,直至节点包含的叶节点数量少于min_samples_split的数量

一般来说,数据少或者特征少的时候可以不管这个值。如果模型样本量多,特征也多的情况下,推荐限制这个最大深度,具体的取值取决于数据的分布。常用的可以取值10-100之间。

min_samples_split int, float, optional (default=2)

分割内部节点所需要的最少数量,如果是int型,则将该数值作为最小数量;如果是float型,最小数量是min_samples_split * n_samples

如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。刘建平博客上的一个项目例子,有大概10万样本,建立决策树时,他选择了min_samples_split=10。可以作为参考。

min_sample_leaf int, float, optional (default=1)

在叶节点所需要的最小样本数量,类型同上

这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。 默认是1,可以输入最少的样本数的整数,或者最少样本数占样本总数的百分比。如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。之前的10万样本项目使用min_samples_leaf的值为5,仅供参考

min_weight_fraction_leaf float, optional (default=0.)

叶节点所需权重总和的最小加权分数,没有提供时样本具有相同的权重

这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝。 默认是0,就是不考虑权重问题。一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时我们就要注意这个值了。

max_features int, float, string or None, optional (default=None)

寻找最优分割时考虑的特征数量。int和float型情况同上;如果是"auto",max_features=n_features;如果是"sqrt",max_features=sqrt(n_features);如果是log2,max_features=log2(n_features);如果是None,max_features=n_features;

一般来说,如果样本特征数不多,比如小于50,我们用默认的"None"就可以了,如果特征数非常多,我们可以灵活使用刚才描述的其他取值来控制划分时考虑的最大特征数,以控制决策树的生成时间。

max_leaf_nodes int or None, optional (default=None) 通过限制最大叶子节点数,可以防止过拟合,默认是"None”,即不限制最大的叶子节点数。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以限制,具体的值可以通过交叉验证得到。
   
 

猜你喜欢

转载自blog.csdn.net/wl2858623940/article/details/80448875