随机森林算法原理
- 算法流程
- 随机森林的生成
- 随机森林的预测
- 算法总结
- 随机森林的优点
- 随机森林的缺点
算法流程
随机森林的生成
-
输入训练数据 D,样本个数为 m ,待学习的决策树数量为 T。
-
对于 t = 1,2,…,T,从 D 中有放回地采样 m 次,每次随机抽取一个样本,得到样本子集 D_t
-
使用 D_t 生成决策树 t 。在生成决策树 t 的过程中,从当前结点的特征候选集中随机选择 k 个特征进行最优特征的选择。
上述过程体现了两个随机性:随机选择样本集和随机选择特征集,生成的 T 个决策树通过特定的结合策略构成随机森林。
随机森林的预测
若是分类任务,则输出 T 个决策树中多数表决的类别;若是回归任务,则输出 T 个决策树预测结果的均值。
例如,使用随机森林进行二分类的过程是这样的:
输入为样本的特征向量 X,随机森林中的每个决策树给出自己的分类结果,集成模块使用多数表决的方法判定最终的分类结果为 y = 0。
算法总结
随机森林的优点
-
随机森林的两个随机性有利于增大个体学习器之间的差异,增强模型的泛化性能。
-
由于随机森林的决策树是从一个特征子集中进行特征选择,所以训练效率要优于 Bagging。
-
相比 Boosting 类算法,随机森林实现简单,决策树之间相互独立,可以并行训练。
-
由于存在特征子集的随机选择,随机森林可以处理特征维度较高和部分特征缺失的情况。
-
随机森林可以评估特征的重要性(本章的项目实战中会有相应的练习代码)。
随机森林的缺点
-
在某些噪音比较大的样本集上,随机森林容易陷入过拟合。
-
在数据量较小、特征较少的数据集上预测效果不是很好。
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
# 导入乳腺癌数据集
x,y = load_breast_cancer(return_X_y=True)
# 划分训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3)
# 实例化对象
rf = RandomForestClassifier(n_estimators=8, criterion='gini',max_depth=None, n_jobs=-1)
# 根据训练数据建立随机森林
rf = rf.fit(x_train, y_train)
# 模型预测
y_pred = rf.predict(x_test)
# 模型评估:计算准确率
accuracy = rf.score(x_test, y_test)
print(accuracy)
# 测试样本分别归属于每颗决策树的叶子结点索引
x_trans = rf.apply(x_test[[1]])
print(x_trans)