Random Forest
Random Forest Algorithm
- Bagging:通过投票降低方差
- DT:建树过程严重依赖数据——较大的方差
- 随机森林:bagging + 完全生成CART
- 使用bootstraping方法抽取数据集
- 利用这样的数据集建立多棵决策树
- 决策树结果投票决定最终结果
- 可以平行化学习:十分高效
- 继承下来CART的优势,并缓解了CART的高方差问题
- 类比数据的随机性带来的模型多样化:
- 特征的随机性——随机选择 d ′ d^\prime d′个特征
- 一般情况下 d ′ ≪ d d^\prime \ll d d′≪d,更加高效
- RF中,每一次分支确定,都可以随机挑选一个特征子集
- 进一步的增强:随机选择并线性组合若干特征(投影)
Out-of-Bag Estimate
- OOB样本:未被选入数据集 D ′ \mathcal D^\prime D′
- 抽选 N N N次仍没有被抽到的概率:
( 1 − 1 N ) N ≈ 1 e \left( 1 - \frac 1 N \right)^N \approx \frac 1 e (1−N1)N≈e1
- 因此数据集中OOB的数据量大约为 1 e N \frac 1 e N e1N
- 类似Validation:这些OOB样本可以用来评估性能
- 但是实际针对badding,验证 g t g_t gt没有太大意义
- 但是可以用来验证 G G G?
- 可以验证 G − G^- G−: x n \bold x_n xn作为OOB样本的若分类器集合: G n − ( x ) = avg ( g 1 , … , g k ) G_n^- (\bold x ) = \operatorname{avg}(g_1, \ldots, g_k) Gn−(x)=avg(g1,…,gk)
E O O B ( G ) = 1 N ∑ n = 1 N err ( y n , G N − ( x n ) ) E_{OOB}(G) = \frac 1N \sum_{n = 1}^N \operatorname{err}(y_n, G_N^-(\bold x_n)) EOOB(G)=N1n=1∑Nerr(yn,GN−(xn))
- 实现对bagging和RF的自验证
- 而且不用像Validation一样进行一次重训练
- 通常非常准确
Feature Selection
- 希望去除的特征
- 冗余特征
- 任务无关特征
- 特征选择的优势
- 高效
- 泛化性强——去除了大量的特征噪声
- 可解释性更强
- 劣势
- 选择过程的计算消耗(组合问题)
- 容易过拟合
- 可能导致的错误解释(关联而非因果)
- 决策树实际上是内建了特征选择过程
- 重要性选择:
- 按照重要性排序,取最大的若干特征作为目标特征子集
- 线性模型:可以使用绝对值最大的若干特征,即 importance ( i ) = ∣ w i ∣ \operatorname{importance}(i) = |w_i| importance(i)=∣wi∣
- 非线性模型?比较麻烦
- 置换测试:
- 如果一个特征很重要:替换一个随机值会很明显地降低性能
- 随机值:将数据顺序随机打乱(不改变数据的分布情况)
- 重要性即置换前后的性能变化差异(置换后需要重新训练和验证)
- 对RF:直接使用OOB误差进行比较,省去了验证过程 importance ( i ) = E o o b ( G ) − E o o b ( G p ) \operatorname{importance}(i) = E_{oob}(G) - E_{oob}(G^p) importance(i)=Eoob(G)−Eoob(Gp)
- 简化训练:
importance
(
i
)
=
E
o
o
b
(
G
)
−
E
o
o
b
p
(
G
)
\operatorname{importance}(i) = E_{oob}(G) - E_{oob}^p(G)
importance(i)=Eoob(G)−Eoobp(G)
- 对OOB的值进行置换
Random Forest in Action
- 随机森林:
- 平滑、大间隔分类边界
- 更加鲁棒
- 能够尽量消除噪声
- 树越多越好:多少棵合适呢?
- 保证随机情况下的稳定性