随机森林学习笔记(未完待续)
以下内容参考资料有:
周志华《西瓜书》
李航《统计学习方法》
哔哩哔哩白板推导@shuhuai008
哔哩哔哩菜菜的sciki-learn课堂
《机器学习实战》
吴喜之《多元统计分析——R与python的实现》
为什么随机森林的效果好于单个分类器
随机森林的本质是一种装袋集成算法(bagging),这是对基评估器的预测结果进行平均,或者用少数服从多数原则来决定集成评估器的结果。
例如,一片森林里建立了25棵树,对任何一个样本,根据平均或少数服从多数原则下,当且仅当有13棵以上的树判断错误的时候,随机森林才会判断错误。
25棵树中,假设一棵树判断错误的可能性为0.2(ε),有棵树判错的概率是:
那13棵树以上都判断错误(也就是整片随机森林会判错)的可能性是:
对比一下0.000369和0.2两个预测误差,随机森林的预测误差远远小于单棵决策树。
import numpy as np
import matplotlib.pyplot as plt
from scipy.special import comb ##组合数
x=np.linspace(0,1,20)
y=[]
for epsilon in x:
E=np.array([comb(25,i)*(epsilon)**i*(1-epsilon)**(25-i)for i in range(13,26)]).sum()##comb(25,i)组合数
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),随机森林会把这种误差扩大,此时要避免用随机森林(其实这时候用决策树也不应该,误差率都高于一个随机分类器了orz)。
sciki-learn中random forest的常用接口
接口 | 作用 |
---|---|
apply | 输入测试集,返回测试样本所在的叶子节点索引 |
predict | |
score | |
fit | |
predict_proba | 返回样本被分到每一类的概率,有几类就返回几个概率。如果是二分类问题,则predict_proba返回的数值大于0.5的,被分为1,小于0.5的,被分为0。 |
注:传统的随机森林是bagging思想,可以平均所有样本的取值作为最终的结果,或者少数服从多数来决定集成的结果。sklearn中的随机森林先平均每个样本对应的predict_proba返回的概率,得到一个平均概率,再用传统bagging方法决定测试样本的分类
本文地址:https://blog.csdn.net/fengjiandaxia/article/details/107555767
下一篇: 两个就一吨了!传说中的终极音响在此