# 随机森林算法
# 直观理解
想象你正在组织一场重要的投票活动,为了确保结果的公正性和准确性,你决定:
- 邀请多位专家(决策树)参与
- 每位专家都从不同角度看问题(随机选择特征)
- 每位专家都基于部分群众的意见(随机抽样数据)
- 最后采用大家投票的结果(集成决策)
这就是随机森林的工作方式!
# 算法原理
# 基本概念(以投票系统为例)
- 专家团队:多棵决策树组成的森林
- 随机抽样:每位专家随机调查部分群众的意见
- 特征选择:每位专家关注不同的问题角度
- 投票决策:根据多数专家的意见作出最终决定
# 算法流程
# 数学原理
# Bagging采样
Bootstrap Aggregating(Bagging)是一种有放回的随机采样方法。对于数据集D,每次采样的概率为:
其中N是数据集的大小。每个样本被选中的概率为:
P(\text{选中}) = 1 - (1 - \frac{1}{N})^N \approx 0.632未被选中的样本称为袋外样本(OOB),可用于评估模型性能:
# 随机特征选择
在每个节点,随机选择m个特征。m的选择对模型性能有重要影响:
m = \sqrt{p} \text{ 或 } m = \log_2(p)其中p是特征总数。特征重要性可通过平均不纯度减少来衡量:
其中:
- T是树的数量
- 是树t中的节点集合
- 是节点n的不纯度减少
- 是节点n选择的特征
# 预测概率
对于分类问题,最终预测概率为:
其中T是树的数量,是第t棵树的预测概率。
# 算法步骤
- 数据采样:使用Bagging方法从原始数据集中采样
- 特征选择:在每个节点随机选择特征子集
- 树的构建:使用选定的样本和特征构建决策树
- 集成预测:综合所有树的预测结果
# 优缺点
# 优点
- 抗过拟合能力强
- 处理高维数据效果好
- 可以处理缺失值
- 可以评估特征重要性
# 缺点
- 计算复杂度较高
- 模型解释性不如单棵决策树
- 占用存储空间大
# 应用场景
金融领域
- 信用评分
- 股票预测
- 风险评估
医疗健康
- 疾病预测
- 基因分析
- 医学图像识别
工业应用
- 设备故障预测
- 质量控制
- 产量预测
# 代码示例
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
# 生成示例数据
X, y = make_classification(n_samples=1000, n_features=20, n_informative=15,
n_redundant=5, random_state=42)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 创建随机森林分类器
rf = RandomForestClassifier(n_estimators=100, max_depth=10, random_state=42)
# 训练模型
rf.fit(X_train, y_train)
# 预测
y_pred = rf.predict(X_test)
# 计算准确率
accuracy = rf.score(X_test, y_test)
print(f"模型准确率: {accuracy:.2f}")
# 特征重要性
for i, importance in enumerate(rf.feature_importances_):
print(f"特征 {i+1} 重要性: {importance:.4f}")
# 调优技巧
模型参数调优
- n_estimators:树的数量
- max_depth:树的最大深度
- min_samples_split:分裂所需最小样本数
- min_samples_leaf:叶节点最小样本数
特征工程
- 特征选择
- 特征编码
- 处理缺失值
采样策略
- 调整采样比例
- 处理类别不平衡
# 常见问题与解决方案
计算效率问题
- 并行计算
- 减少树的数量
- 限制树的深度
内存问题
- 减少特征数量
- 使用数据流处理
- 选择合适的树数量
预测效果优化
- 集成其他模型
- 特征重要性分析
- 交叉验证调参
← 决策树算法 支持向量机(SVM)算法 →