今天学习一个经典的机器学习算法,Random Forest,老规矩先放参考文献(ps参考文献筛了好几轮,因为我发现很多文献讲的都不一样)
文章目录
References
Random Forest
图源自参考文献2,上图是6个数据,每个数据有5个特征维度,且有两种不同类型的标签,典型的二分类问题。
Bootstrap + Random Feature Selection
对于包含m个样本的原始数据集,对该原始数据集进行可放回抽样m次,上图就对原始数据进行了6次有放回的采样,且该过程重复了四次,接着对每个样本的特征维度也进行采样后得到了上图上半部分,这时你可能会有以下问题:
为什么要可放回采样?
首先对于一个样本,其每次被采样到的概率是
1
m
\frac{1}{m}
m1,不被采样到的概率是
1
−
1
m
1-\frac{1}{m}
1−m1。m次采样都没被抽到的概率是
(
1
−
1
m
)
m
{(1-\frac{1}{m})}^m
(1−m1)m ,那么让我们看看样本个数对数据中无法采样到的样本的比例的影响:
上图中横坐标采用了e为底的指数坐标(
e
2
−
e
14
e^2-e^{14}
e2−e14),可以发现当x趋向无穷时,无法采样到的样本的比例为
l
i
m
x
→
∞
(
1
−
1
m
)
m
=
1
e
lim_{x \rightarrow \infty}{(1-\frac{1}{m})^m}=\frac{1}{e}
limx→∞(1−m1)m=e1,这些数据被称为Out of Bag(OOB)。Breiman在随机森林的论文中证明了OOB误差估计是一种可以取代测试集的误差估计方法,即OOB误差是测试数据集误差的无偏估计,因此可以用来检测模型的泛化能力。
为什么要对每个样本的特征维度进行采样?
1.为了降低树之间的相关性,如果选择所有的特征,那得到的结果具有高方差。
2.不是每个特征都对预测有帮助,删掉一些特征有时反而能更好的预测,但有时候会更差。
那么如何选择特征的数量呢,一般如果总特征数为n,选择
l
o
g
(
n
)
log(n)
log(n)或者
n
\sqrt{n}
n的特征数较好。
Aggregating
选好数据和特征之后构建决策树,测试集数据根据所有的决策树投票决定最优结果。如下图所示。