随机森林
1.概述
本身并不是一个单独的机器学习算法,而是通过在数据上构建多个模型,集成所有模型的建模结果。以此来获得最好的结果。
集成算法会考虑多个评估器的建模结果,汇总之后得到一个综合的结果,以此来获取比单个模型更好的回归或者分类表现。
随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支——集成学习(Ensemble Learning)方法。
多个模型集成成为的模型叫做集成评估器(ensemble estimator),组成集成评估器的每一个模型叫做基评估器(base estimator)。
通常来说,有三类集成算法:装袋法(Bagging),提升法(Boosting)和Stacking
袋装法的核心思想就是构建多个相互独立的评估器,然后对其预测进行平均或者多数表决原则来决定集成评估器的结果。如:随机森林。
提升法基评估器是相关的,核心思想是结合弱评估器的力量一次次对难以评估的样本进行预测,从而构建一个强评估器。如:Adaboost,梯度提升树。
2.随机森林的特点
随机森林的优缺点
优点:
- 1.每一个树都选择部分样本和部分特征,一定程度上避免过拟合;
- 2.随机选择样本并且随机选择特征。性能稳定。
- 3.能处理高维数据,并且不需要做特征选择。
- 4.适合并行计算。
缺点: - 1.参数比较复杂。
- 2.模型训练和预测都比较慢。
3 sklearn中的集成算法
随机森林分类
随机森林回归
完全随机树的集成
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 )
参数作用:
n_estimators:数值型取值
含义:森林中决策树的个数,默认是10
criterion:字符型取值
含义:采用何种方法度量分裂质量,信息熵或者基尼指数,默认是基尼指数
max_features:取值为int型, float型, string类型, or None(),默认"auto"
含义:寻求最佳分割时的考虑的特征数量,即特征数达到多大时进行分割。
int:max_features等于这个int值
float:max_features是一个百分比,每(max_features * n_features)特征在每个分割出被考虑。
"auto":max_features等于sqrt(n_features)
"sqrt":同等于"auto"时
"log2":max_features=log2(n_features)
None:max_features = n_features
max_depth:int型取值或者None,默认为None
含义:树的最大深度
min_samples_split:int型取值,float型取值,默认为2
含义:分割内部节点所需的最少样本数量
int:如果是int值,则就是这个int值
float:如果是float值,则为min_samples_split * n_samples
min_samples_leaf:int取值,float取值,默认为1
含义:叶子节点上包含的样本最小值
int:就是这个int值
float:min_samples_leaf * n_samples
min_weight_fraction_leaf : float,default=0.
含义:能成为叶子节点的条件是:该节点对应的实例数和总样本数的比值,至少大于这个min_weight_fraction_leaf值
max_leaf_nodes:int类型,或者None(默认None)
含义:最大叶子节点数,以最好的优先方式生成树,最好的节点被定义为杂质相对较少,即纯度较高的叶子节点
min_impurity_split:float取值
含义:树增长停止的阀值。一个节点将会分裂,如果他的杂质度比这个阀值;如果比这个值低,就会成为一个叶子节点。
min_impurity_decrease:float取值,默认0.
含义:一个节点将会被分裂,如果分裂之后,杂质度的减少效果高于这个值。
bootstrap:boolean类型取值,默认True
含义:是否采用有放回式的抽样方式
oob_score:boolean类型取值,默认False
含义:是否使用袋外样本来估计该模型大概的准确率
n_jobs:int类型取值,默认1
含义:拟合和预测过程中并行运用的作业数量。如果为-1,则作业数设置为处理器的core数。
class_weight:dict, list or dicts, "balanced"
含义:如果没有给定这个值,那么所有类别都应该是权重1
对于多分类问题,可以按照分类结果y的可能取值的顺序给出一个list或者dict值,用来指明各类的权重.
"balanced"模式,使用y值自动调整权重,该模式类别权重与输入数据中的类别频率成反比,即n_samples / (n_classes * np.bincount(y)),分布为第n个类别对应的实例数。
"balanced_subsample"模式和"balanced"模式类似,只是它计算使用的是有放回式的取样中取得样本数,而不是总样本数
单个决策树的准确率越高,随机森林的准确率也会越高,因为袋装法是依赖于平均值或者少数服从多数的原则来决定集成结果的。
重要参数详解
(1)n_estimators
这是森林中树木的数量,即基评估器的数量。
(2)random_state
sklearn中的分类树自带随机性,所以随机森林中的树天生就不一样。
决策树从最重要的特征中随机选择出一个特征来进行分枝,因此每次生成的决策树都不一样,这个功能由参数random_state控制。
随机森林中也有random_state,只不过在分类树中,一个random_state只控制生成一棵树,而随机森林中的random_state控制的是生成森林的模式,而非让一个森林中只有一棵树。当random_state固定时,随机森林中生成是一组固定的树,但每棵树依然是不一致的,这是用”随机挑选特征进行分枝“的方法得到的随机性。
用袋装法集成时,基分类器应当是相互独立的,是不相同的。
(3)bootstrap
袋装法正是通过有放回的随机抽样技术来形成不同的训练数据,bootstrap就是用来控制抽样技术的参数。
在一个含有n个样本的原始训练集中,我们进行随机采样,每次采样一个样本,并在抽取下一个样本之前将该样本放回原始训练集,也就是说下次采样时这个样本依然可能被采集到,这样采集n次,最终得到一个和原始训练集一样大的,n个样本组成的自助集。由于是随机采样,这样每次的自助集和原始数据集不同,和其他的采样集也是不同的。这样我们就可以自由创造取之不尽用之不竭,并且互不相同的自助集,用这些自助集来训练我们的基分类器,我们的基分类器自然也就各不相同了。
(4)oob_score
在使用随机森林时,我们可以不划分测试集和训练集,只需要用袋外
数据来测试我们的模型即可。
参考链接: