本文章只用于学习交流不用于任何商业行为,所有知识点资料来源于网络,如有任何不当之处请私信联系,作者会及时改正
本文中总结自文档所有标注的页码都是附件参考文档中的页码
由于markdown不支持附件下载,附件链接如下
http://note.youdao.com/noteshare?id=05a144c93bd1f66d0a25881a5fe5ce65
使用流程 & 参数总表
=============================
8个主要参数:Criterion,两个随机性相关的参数(random_state,splitter),五个剪枝参数(max_depth,min_samples_split,min_samples_leaf,max_feature,min_impurity_decrease)
1特殊参数(目标权重参数): class_weight & min_weight_fraction_leaf
一个属性:feature_importances_
四个接口:fit,score,apply,predict
参数调节顺序:
0 根据情况决定
Criterion&random_state
-> 1 max_depth & min_samples_leaf
-> 2 其他三个剪枝参数
调参思路:
数据少的情况下每个参数学习曲线画一下确定一下大致范围
数据大网格搜索效果不一定有自己跑的高,因为参数多说不定还没有参数少的时候结果好,下面这个例子就是这样.所以建议是少量的重要特征叠加测试然后,逐渐增加
1概述
1.1决策树是如何工作的
决策树(Decision Tree)是一种非参数的有监督学习方法(即对输入的数据没有结构限制),它能够从一系列有特征和标签的数据中总结出决策规则,并用树状图的结构来呈现这些规则,以解决分类和回归问题。
决策树算法的核心解决的两个问题
决策树算法的核心是要解决两个问题:
1)如何从数据表中找出最佳节点和最佳分枝?
2)如何让决策树停止生长,防止过拟合?
2重要参数及其详细说明
纯度参数1:criterion
说明:
确定不纯度的计算方法,帮忙找出最佳节点和最佳分枝,不纯度越低,决策树对训练集的拟合越好.
分类模式
有"gini"(基尼系数)和"entropy"(信息增益)可选
如何选取
通常就使用基尼系数
数据维度很大,噪音很大时使用基尼系数
维度低,数据比较清晰的时候,信息熵和基尼系数没区别
当决策树的拟合程度不够的时候,使用信息熵
两个都试试,不好就换另外一个
回归模式
有’mse’,'friedman_mse’和’mae’可选,默认的是R2
作用:
不同的计算方法计算时间和效果不同
分类模式
“gini”:通过基尼系数计算
“entropy”:通过信息增益计算
回归模式
‘mse’:通过使用叶子节点的均值来最小化L2损失
‘friedman_mse’:使用弗里德曼针对潜在分枝中的问题改进后的均方误差
‘mae’:使用叶节点的中值来最小化L1损失
参数推荐:
分类模式
数据维度低时->两者差别不大,‘gini’运算快
数据维度高/噪音大时->‘gini’
拟合程度低时->‘entropy’
实际可以两者都试试
回归模式
一般使用’mse’或’friedman_mse’
模式参数: random_state
说明:
随机模式的设置
作用:
如果不固定下来,每次模型跑出来分数都不一样(不考虑训练集,测试集划分问题)
参数推荐:
随意
分支参数: splitter
说明:
控制决策树分支模式的选项
有"best"和"random"可选
作用:
“best”:选择优先选择更重要的特征进行分支
“random”:随机特征分支
参数推荐:
模型效果过拟合时推荐"random"
注意点:
1两者在低维度时几乎没有差别
剪枝参数意义:1: max_depth
棵决策树对训练数据有了过于优秀的解释性,天生过拟合,剪枝参数来降低过拟合。剪枝策略对决策树的影响巨大,正确的剪枝策略是优化决策树算法的核心。
剪枝参数1: max_depth
说明:
限制树的最大深度,超过设定深度的树枝全部剪掉
作用:
对模型效果和过拟合都有巨大的影响
参数推荐:
建议从=3开始尝试,看看拟合的效
果再决定是否增加设定深度。
注意点:
1两者在低维度时几乎没有差别
剪枝参数2: min_sample_leaf
说明:
节点在分枝后的每个子节点都必须包含至少min_samples_leaf个训练样本
作用:
抑制过拟合
参数推荐:
建议从=5开始使用。如果叶节点中含有的样本量变化很大,建议输入浮点数作为样本量的百分比来使用。
对于类别不多的分类问题,=1通常就是最佳选择
注意点:
1一般搭配max_depth使用,在回归树中有神奇的效果,可以让模型变得更加平滑
剪枝参数3: min_samples_split
说明:
节点必须要包含至少min_samples_split个训练样本,这个节点才允许被分枝
作用:
抑制过拟合
参数推荐:
看情况,一般先调别的参数
剪枝参数4: max_features
说明:
一般被当做max_depth使用,用作树的”精修“.用来限制高维度数据的过拟合的剪枝参数
作用:
直接限制可以使用的特征数量而使决策树停止分裂
参数推荐:
除非对数据很熟悉,或者经验丰富否则不推荐使用
注意点:
1在不知道决策树中的各个特征的重要性的情况下,强行设定这个参数可能会导致模型学习不足。如果希望通过降维的方式防止过拟合,建议使用PCA,ICA或者特征选择模块中的降维算法。
剪枝参数5: min_impurity_decrease
说明:
限制信息增益的大小
作用:
信息增益小于设定数值的分枝不会发生。
参数推荐:
待定
注意点:
1待定
目标权重参数: class_weight & min_weight_fraction_leaf
说明:
完成样本标签平衡的参数
作用:
给少量的标签更多的权重,让模型更偏向少数类,向捕获少数类的方向建模
参数推荐:
该默认None,表示自动给与数据集中的所有标签相同的权重。
对数据熟悉可自行调整
注意点:
1有了权重之后,样本量就不再是单纯地记录数目,而是受输入的权重影响了,因此这时候剪枝,就需要搭配min_weight_fraction_leaf这个基于权重的剪枝参数来使用。另请注意,基于权重的剪枝参数(例如min_weight_fraction_leaf)将比不知道样本权重的标准(比如min_samples_leaf)更少偏向主导类。如果样本是加权的,则使用基于权重的预修剪标准来更容易优化树结构,这确保叶节点至少包含样本权重的总和的一小部分。
重要属性和接口:
决策树最常用的接口还有apply和predict。apply中输入测试集返回每个测试样本所在的叶子节
点的索引,predict输入测试集返回每个测试样本的标签。
#apply返回每个测试样本所在的叶子节点的索引
clf.apply(Xtest)
#predict返回每个测试样本的分类/回归结果
clf.predict(Xtest)