使用流程 & 参数总表
=============================
9个主要参数:n_estimators,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 n_estimators
-> 2 max_depth & min_samples_leaf
-> 3 其他三个剪枝参数
基于经验,图原作者对各个参数对模型的影响程度做了一个排序。在我们调参的时候,大家可以参考这个顺序。
调参思路:
数据少的情况下每个参数学习曲线画一下确定一下大致范围
数据大网格搜索效果不一定有自己跑的高,因为参数多说不定还没有参数少的时候结果好,下面这个例子就是这样.所以建议是少量的重要特征叠加测试然后,逐渐增加
重要参数及其详细说明
评估器参数:n_estimators
说明:
决定森林中树的数量,即评估器的数量
作用:
数量越多效果越好,但是相对的计算成本和过拟合可能性都会升高
参数推荐:
根据样本来,可以考虑样本数量开平方
模式参数: random_state
说明:
随机模式的设置
作用:
如果不固定下来,每次模型跑出来分数都不一样(不考虑训练集,测试集划分问题)
参数推荐:
随意
注意点
分类树中,一个random_state只控制生成一棵树,而随机森林中的random_state控制的是生成森林的模式,整个森林的random_state值是不变的,但是森林中的每颗树的random_state值是不同的。
纯度参数1:criterion
说明:
确定不纯度的计算方法,帮忙找出最佳节点和最佳分枝,不纯度越低,决策树对训练集的拟合越好.
分类模式
有"gini"(基尼系数)和"entropy"(信息增益)可选
回归模式
有’mse’,'friedman_mse’和’mae’可选,默认的是R2
作用:
不同的计算方法计算时间和效果不同
分类模式
“gini”:通过基尼系数计算
“entropy”:通过信息增益计算
回归模式
‘mse’:通过使用叶子节点的均值来最小化L2损失
‘friedman_mse’:使用弗里德曼针对潜在分枝中的问题改进后的均方误差
‘mae’:使用叶节点的中值来最小化L1损失
参数推荐:
分类模式
数据维度低时->两者差别不大,‘gini’运算快
数据维度高/噪音大时->‘gini’
拟合程度低时->‘entropy’
实际可以两者都试试
回归模式
一般使用’mse’或’friedman_mse’
分支参数: splitter
说明:
控制决策树分支模式的选项
有"best"和"random"可选
作用:
“best”:选择优先选择更重要的特征进行分支
“random”:随机特征分支
参数推荐:
模型效果过拟合时推荐"random"
注意点:
1两者在低维度时几乎没有差别
剪枝参数: max_depth
说明:
限制树的最大深度,超过设定深度的树枝全部剪掉
作用:
对模型效果和过拟合都有巨大的影响
参数推荐:
建议从=3开始尝试,看看拟合的效
果再决定是否增加设定深度。
注意点:
1两者在低维度时几乎没有差别
剪枝参数2: min_sample_leaf
说明:
节点在分枝后的每个子节点都必须包含至少min_samples_leaf个训练样本
作用:
抑制过拟合
参数推荐:
建议从=5开始使用。如果叶节点中含有的样本量变化很大,建议输入浮点数作为样本量的百分比来使用。
对于类别不多的分类问题,=1通常就是最佳选择
跑学习曲线一般是从最小值1开始向上增加10或20.面对高维度高样本量数据,如果不放心,也可以直接+50,对于大型数据,可能需要200~300的范围如果调整的时候发现准确率无论如何都上不来,那可以放心大胆调一个很大的数据,大力限制模型的复杂度
注意点:
1一般搭配max_depth使用,在回归树中有神奇的效果,可以让模型变得更加平滑
剪枝参数3: min_samples_split
说明:
节点必须要包含至少min_samples_split个训练样本,这个节点才允许被分枝
作用:
抑制过拟合
参数推荐:
跑学习曲线一般是从最小值1开始向上增加10或20.面对高维度高样本量数据,如果不放心,也可以直接+50,对于大型数据,可能需要200~300的范围如果调整的时候发现准确率无论如何都上不来,那可以放心大胆调一个很大的数据,大力限制模型的复杂度
剪枝参数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)