一、随机森林是什么?
随机森林是一种集成学习(Ensemble Learning)方法,通过构建大量'去相关'的决策树,并将它们的预测结果进行集成,提升整体模型的准确率和鲁棒性。
- 本质:多个决策树的集成,每棵树都是在'有放回抽样'的数据子集和'随机特征子集'上训练得到。
- 任务类型:既可用于分类(Classification),也可用于回归(Regression)。
- 优点:高准确率、抗过拟合、对异常值和噪声鲁棒、可处理大规模高维数据。
二、随机森林的核心思想
1. Bagging(Bootstrap Aggregating)
- 每个子集训练一棵决策树,各树之间相互独立。
有放回抽样:从原始训练集随机采样 $N$ 次,得到 $M$ 个不同的训练子集(每个子集大小等于原始数据,可重复)。
2. 随机特征选择(Feature Bagging)
- 这样可进一步增加树之间的差异性,降低整体模型的方差。
每次分裂节点时,不是用全部特征,而是从所有特征中随机选取 $k$ 个特征,再从这 $k$ 个特征中选择最佳分裂点。
三、随机森林的数学表达
1. 分类任务
- 最终预测为多数投票结果:
随机森林由 $M$ 棵决策树组成,每棵树 $h_m(x)$ 对输入 $x$ 做出预测。
$$\hat{y} = \operatorname{mode}{h_1(x), h_2(x), ..., h_M(x)}$$
2. 回归任务
- 最终预测为所有树预测值的平均:
$$\hat{y} = \frac{1}{M} \sum_{m=1}^M h_m(x)$$
四、随机森林的算法流程
- 训练树模型:对每个子集训练一棵决策树,每次节点分裂时随机选择部分特征。
- 集成预测:
- 分类:所有树投票,选择票数最多的类别。
- 回归:所有树预测值取平均。
- 模型评估:可用 OOB(Out-Of-Bag)样本评估模型性能,无需额外验证集。
数据采样:对原始训练集做 $M$ 次有放回抽样,得到 $M$ 个训练子集。
五、随机森林的主要参数与调优
- n_estimators:森林中树的数量,通常越多越好,但计算成本增加。
- max_depth:树的最大深度,防止过拟合。
- min_samples_split / min_samples_leaf:分裂所需的最小样本数,控制树的生长。
- oob_score:是否使用袋外样本评估模型泛化能力。
max_features:每次分裂时考虑的最大特征数,分类默认 $\sqrt{p}$,回归默认 $p/3$。
六、随机森林的代码实现与可视化
1. 分类随机森林代码示例
numpy np
matplotlib.pyplot plt
sklearn.ensemble RandomForestClassifier
sklearn.datasets load_iris
sklearn.metrics accuracy_score
iris = load_iris()
X, y = iris.data, iris.target
rf = RandomForestClassifier(n_estimators=, max_depth=, random_state=, oob_score=)
rf.fit(X, y)
y_pred = rf.predict(X)
(, accuracy_score(y, y_pred))
(, rf.oob_score_)
plt.bar((X.shape[]), rf.feature_importances_)
plt.xticks((X.shape[]), iris.feature_names, rotation=)
plt.ylabel()
plt.title()
plt.tight_layout()
plt.show()


