LionKing数据科学专栏

购买普通会员高级会员可以解锁网站精华内容且享受VIP服务的优惠

想要查看更多数据科学相关的内容请关注我们的微信公众号知乎专栏

随机森林(random forest)原理及算法实现

随机森林的原理

随机森林是基于决策树的一种集成学习(ensemble learning)方法,可以用来解决分类和回归问题。

随机森林通过学习很多不同的决策树,并且将各个决策树的预测结合起来用来进行更加精确的预测。

算法

假设有训练样本$(x^{(1)}, y^{(1)}), \ldots, (x^{(n)}, y^{(n)})$

并行地训练$B$棵不同的树,对于每棵树有放回地抽取$n$个训练样本并训练一棵分类/回归树$T_i$,训练时在每一个结点的划分时只考虑所有特征的一个随机的子集作为候选分裂变量。

对于一个新的样本,在每棵树$T_i$上得到关于目标变量的预测$y_1, \ldots, y_B$。

对于分类问题,取$y_1, \ldots, y_B$出现次数最多的类型作为预测;对于回归问题,取平均值$$\frac{1}{B}\sum_{i=1}^{n}y_i$$作为预测。

评估随机森林效果的方法是使用袋外错误率(out-of-bag error):对于每一个训练样本,其大约在$37\%$的树的训练过程中并没有被选中,用所有这些树对该样本的预测的投票/平均值作为预测结果,计算关于每个训练样本的损失并取平均可以得到袋外错误率。

为了选择最优的$B$,可以选取袋外错误率最小的$B$。

变量重要性(variable importance)

随机森林可以给出各个特征的重要性排序。思路基于排列测试(permutation test):如果一个特征非常重要, 那么假设将该特征进行扰动, 则会显著影响预测的准确性。我们对于特征$x_j$, 将该特征进行随机的排列, 计算随机排列后袋外错误率(out-of-bag error)的增加。如果袋外错误率的增加较大, 说明该特征较重要, 因此使用该值作为特征的重要性分值。

Python实现

from sklearn import ensemble
from sklearn import datasets
import numpy as np

n_train = 1000
n_test = 200
p = 10

# 生成X, y
X, y = datasets.make_classification(n_samples=n_train + n_test, n_features=p, n_informative=2, n_redundant=0, random_state=0)

# 拆分训练和测试数据集
X_train = X[:n_train, :]
y_train = y[:n_train]
X_test = X[n_train:, :]
y_test = y[n_train:]

# 创建随机森林分类训练器
random_forest_classifier = ensemble.RandomForestClassifier(max_depth=5, random_state=0)
# 训练模型
random_forest_classifier.fit(X_train, y_train)
# 训练集预测
yhat_train = random_forest_classifier.predict(X_train)
# 训练错误率
err_train = np.mean(yhat_train != y_train)
print('训练错误率为%f' % (err_train, ))
# 测试集预测
yhat_test = random_forest_classifier.predict(X_test)
# 测试错误率
err_test = np.mean(yhat_test != y_test)
print('测试错误率为%f' % (err_test, ))
# 特征重要性
variable_importance = random_forest_classifier.feature_importances_
print('特征重要性为%s' % (variable_importance, ))
        
输出:

训练错误率为0.010000
测试错误率为0.110000
特征重要性为[0.0272267  0.06784902 0.02557453 0.030536   0.69986344 0.03496923
0.03748265 0.02141783 0.02334935 0.03173124]
        

常见面试问题

Q:随机森林有哪些优缺点?

需要购买普通会员高级会员登录后刷新该页面查看

Q:随机森林和GBDT有什么异同?

需要购买普通会员高级会员登录后刷新该页面查看

Q:随机森林如何计算变量重要性?

需要购买普通会员高级会员登录后刷新该页面查看

更多机器学习相关问题见本网站论坛机器学习理论版面机器学习实践版面

更多面试问题见面试真题汇总

想要查看更多数据科学相关的内容请关注我们的微信公众号知乎专栏