随机森林
1、算法概述
从数据集中按照Bootstraping的方式抽取k个样本,共抽取n次,使用这n个数据集可以训练n个决策树。
训练决策树时可以随机抽取总特征数一定比例的特征,作为进行决策树的训练时的特征划分集,未选的特征将不再考虑。
最终每个样本的分类结果经根据这n个决策树投票决定。
2、调参
from sklearn.ensemble import RandomForestClassifier
RandomForestClassifier(n_estimators=10, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='auto', max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False, n_jobs=1, random_state=None, verbose=0, warm_start=False, class_weight=None)¶
1)max_features是分割节点时考虑的特征的随机子集的大小。 这个值越低,方差减小得越多,但是偏差的增大也越多。 根据经验,回归问题中使用 max_features = n_features ,分类问题使用 max_features = sqrt(n_features) (其中 n_features 是特征的个数)是比较好的默认值。
2)max_depth = None 和 min_samples_split = 2 结合通常会有不错的效果(即生成完全的树)。 请记住,这些(默认)值通常不是最佳的,同时还可能消耗大量的内存,最佳参数值应由交叉验证获得。
3)另外,请注意,在随机森林中,默认使用自助采样法(bootstrap = True)。
4)当使用自助采样法方法抽样时,泛化精度是可以通过剩余的或者袋外的样本来估算的,设置 oob_score = True 即可实现。
5)并行化
这个模块还支持树的并行构建和预测结果的并行计算,这可以通过n_jobs参数实现。
3、特征的重要性评估
特征对目标变量预测的相对重要性可以通过(树中的决策节点的)特征使用的相对顺序(即深度)来进行评估。
实际上,对于训练完成的模型这些估计值存储在 feature_importances_ 属性中。 这是一个大小为 (n_features,) 的数组,其每个元素值为正,并且总和为 1.0。一个元素的值越高,其对应的特征对预测函数的贡献越大。