文章目录
- 1 概述
- 1.1 集成算法概述
- 1.2 sklearn中的集成算法
- 2 、随机森林分类:RandomForestClassifier
- 2.1 重要参数
- 2.1.1 控制基评估器的参数
- 2.1.2、 n_estimators,:越大,模型的效果往往越好
- 2.1.3 random_state & estimators_
- 2.1.4、bootstrap & oob_score
- 2.2 重要属性和接口
- 2.2.1 属性 : .estimators_ 和 .oob_score_ 和 .feature_importances_
- 2.2.2接口:apply, fit, predict和score,还有predict_proba
- Bonus:Bagging的另一个必要条件
- 2.3 实战
- 6. n_estimators的学习曲线
- 3 、随机森林回归:RandomForestRegressor
- 3.1 重要参数,属性与接口
- 3.1.1criterion
- 3.1.2、重要属性和接口
- 3.2 实例:用随机森林回归填补缺失值
- 5、 附录
- 5.1 Bagging vs Boosting
- 5.2 RFC的参数列表
- 5..3 RFC的属性列表
- 5.4 RFC的接口列表
1 概述
1.1 集成算法概述
**集成学习(ensemble learning)**是时下非常流行的机器学习算法,它本身不是一个单独的机器学习算法,而是通
过在数据上构建多个模型,集成所有模型的建模结果。
集成算法的目标
集成算法会考虑多个评估器的建模结果,汇总之后得到一个综合的结果,以此来获取比单个模型更好的回归或分类表现。
1.2 sklearn中的集成算法
- sklearn中的集成算法模块ensemble
2 、随机森林分类:RandomForestClassifier
2.1 重要参数
2.1.1 控制基评估器的参数
2.1.2、 n_estimators,:越大,模型的效果往往越好
这是森林中**树木的数量,即基评估器的数量。**这个参数对随机森林模型的精确性影响是单调的
n_estimators越大,模型的效果往往越好
但是相应的,任何模型都有决策边界,n_estimators达到一定的程度之后,随机森林的精确性往往不在上升或开始波动,并且,n_estimators越大,需要的计算量和内存也越大,训练的时间也会越来越长。对于这个参数,我们是渴望在训练难度和模型效果之间取得平衡。
n_estimators的默认值在现有版本的sklearn中是10,但是在即将更新的0.22版本中,这个默认值会被修正为
100。
2.1.3 random_state & estimators_
随机森林中其实也有random_state,用法和分类树中相似,只不过在分类树中,一个random_state只控制生成一
棵树,而随机森林中的random_state控制的是生成森林的模式,而非让一个森林中只有一棵树
当random_state固定时,随机森林中生成是一组固定的树,但每棵树依然是不一致的,这是用”随机挑选特征进行分枝“的方法得到的随机性。并且我们可以证明,当这种随机性越大的时候,袋装法的效果一般会越来越好。用袋装法集成时**,基分类器应当是相互独立的,是不相同的**
2.1.4、bootstrap & oob_score
要让基分类器尽量都不一样,一种很容易理解的方法是使用不同的训练集来进行训练,而袋装法正是通过有放回的随机抽样技术来形成不同的训练数据,bootstrap就是用来控制抽样技术的参数。
在一个含有n个样本的原始训练集中,我们进行随机采样,每次采样一个样本,并在抽取下一个样本之前将该样本放回原始训练集,也就是说下次采样时这个样本依然可能被采集到,这样采集n次,最终得到一个和原始训练集一样大的,n个样本组成的自助集。
**bootstrap参数默认True,代表采用这种有放回的随机抽样技术。**通常,这个参数不会被我们设置为False。
2.2 重要属性和接口
2.2.1 属性 : .estimators_ 和 .oob_score_ 和 .feature_importances_
2.2.2接口:apply, fit, predict和score,还有predict_proba
随机森林的predict_proba接口,这个接口返回每个测试样本对应的被分到每一类标签的概率,标签有几个分类就返回几个概率。如果是二分类问题,则predict_proba返回的数值大于0.5的,被分为1,小于0.5的,被分为0。传统的随机森林是利用袋装法中的规则,平均或少数服从多数来决定集成的结果,而sklearn中的随机森林是平均每个样本对应的predict_proba返回的概率,得到一个平均概率,从而决定测试样本的分类。
Bonus:Bagging的另一个必要条件
之前我们说过,在使用袋装法时要求基评估器要尽量独立。其实,袋装法还有另一个必要条件:基分类器的判断准确率至少要超过随机分类器,即时说,基分类器的判断准确率至少要超过50%。之前我们已经展示过随机森林的准确率公式,基于这个公式,我们画出了基分类器的误差率ε和随机森林的误差率之间的图像。大家可以自己运行一下这段代码,看看图像呈什么样的分布。
import numpy as np
x = np.linspace(0,1,20)
y = []
for epsilon in np.linspace(0,1,20):
E = np.array([comb(25,i)*(epsilon**i)*((1-epsilon)**(25-i))
for i in range(13,26)]).sum()
y.append(E)
plt.plot(x,y,"o-",label="when estimators are different")
plt.plot(x,x,"--",color="red",label="if all estimators are same")
plt.xlabel("individual estimator's error")
plt.ylabel("RandomForest's error")
plt.legend()
plt.show()
可以从图像上看出,当基分类器的误差率小于0.5,即准确率大于0.5时,集成的效果是比基分类器要好的。相反,当基分类器的误差率大于0.5,袋装的集成算法就失效了。所以在使用随机森林之前,一定要检查,用来组成随机森林的分类树们是否都有至少50%的预测正确率。
2.3 实战
6. n_estimators的学习曲线
3 、随机森林回归:RandomForestRegressor
3.1 重要参数,属性与接口
3.1.1criterion
3.1.2、重要属性和接口
最重要的属性和接口,都与随机森林的分类器相一致,还是apply, fit, predict和score最为核心。值得一提的是,随机森林回归并没有predict_proba这个接口,因为对于回归来说,并不存在一个样本要被分到某个类别的概率问题,因此没有predict_proba这个接口。
3.2 实例:用随机森林回归填补缺失值
我们从现实中收集的数据,几乎不可能是完美无缺的,往往都会有一些缺失值。面对缺失值,很多人选择的方式是直接将含有缺失值的样本删除,这是一种有效的方法,但是有时候填补缺失值会比直接丢弃样本效果更好,即便我们其实并不知道缺失值的真实样貌。在sklearn中,我们可以使用sklearn.impute.SimpleImputer来轻松地将均值,中值,或者其他最常用的数值填补到数据中,在这个案例中,我们将使用均值,0,和随机森林回归来填补缺失值,并验证四种状况下的拟合状况,找出对使用的数据集来说最佳的缺失值填补方法。
5、 附录
5.1 Bagging vs Boosting
5.2 RFC的参数列表
5…3 RFC的属性列表
5.4 RFC的接口列表