目录
一、随机森林算法的通俗理解
上来就是重点啊,随机森林算法是一种集合算法,是把多个决策树集合在一起的一种算法(如下图)。
为什么要集合多个决策树呢?因为集合起来能解决决策树算法容易过拟合的问题。怎么解决过拟合问题的呢?随机森林算法中每棵树的参数都不相同,然后我们把每棵树预测的结果取平均值,这样即可以保留决策树们的工作成效,又可以降低过拟合的风险。
这回明白了吧。
二、随机森林算法的优势
除了样本数据不需要预处理外,随机森林算法有以下优势。
优势 | 说明 | 生活化示例 |
---|---|---|
抗过拟合 | 多棵树降低单一决策树的过拟合风险 | 医生会诊:多位专家独立诊断后投票,比单一医生误诊率低 |
处理高维数据 | 自动选择重要特征 | 选手机:只看处理器+摄像头(而非所有100项参数) |
鲁棒性强 | 对缺失值和噪声不敏感 | 天气预报:多个气象模型综合预测,比单一模型更准 |
并行训练 | 树之间独立训练,可并行加速 | 工厂生产线:多条产线同时生产不同零件 |
特征重要性 | 可评估特征贡献度 | 房价预测:自动识别"地段"比"窗框颜色"更重要 |
三、随机森林算法的示例及源代码
使用随机森林算法根据花瓣/萼片尺寸识别鸢尾花种类(山鸢尾/变色鸢尾/维吉尼亚鸢尾)。详细的python源代码及运行效果如下。
# -*- coding: utf-8 -*-
"""
鸢尾花分类器:使用随机森林区分三种鸢尾花
"""
# 导入库
from sklearn.ensemble import RandomForestClassifier # 随机森林分类器
from sklearn.datasets import load_iris # 经典鸢尾花数据集
from sklearn.model_selection import train_test_split # 数据集分割工具
from sklearn.metrics import accuracy_score # 准确率计算器
import numpy as np # 数值计算库
# 加载数据集
iris = load_iris()
X = iris.data # 特征矩阵:150个样本×4个特征(萼片长宽+花瓣长宽)
y = iris.target # 目标向量:0/1/2 对应三种鸢尾花
# 分割数据集 (80%训练,20%测试)
X_train, X_test, y_train, y_test = train_test_split(
X, y,
test_size=0.2, # 20%数据作测试集
random_state=42 # 随机种子确保可复现结果
)
# 创建随机森林模型
model = RandomForestClassifier(
n_estimators=100, # 森林中100棵树
max_depth=3, # 每棵树最大深度3层
random_state=42, # 固定随机性
oob_score=True # 启用袋外误差评估
)
# 训练模型
model.fit(X_train, y_train) # 用训练数据构建森林
# 预测测试集
y_pred = model.predict(X_test) # 用训练好的森林预测新数据
# 计算准确率
accuracy = accuracy_score(y_test, y_pred) # 比较预测值与真实值
print(f"测试集准确率: {accuracy:.2%}")
# 输出特征重要性
print("\n特征重要性:")
for i, name in enumerate(iris.feature_names):
print(f"{name}: {model.feature_importances_[i]:.2%}") # 显示每个特征贡献度
# 袋外误差评估
print(f"\n袋外误差: {model.oob_score_:.2%}") # 未参与训练的样本预测精度
程序中关键代码的解释说明:
代码行 | 功能说明 |
---|---|
from sklearn.ensemble... | 导入随机森林分类器 |
from sklearn.datasets... | 导入经典鸢尾花数据集 |
X = iris.data | 获取特征数据(4个测量维度) |
y = iris.target | 获取标签数据(3种花类别) |
test_size=0.2 | 保留20%数据作为测试集 |
random_state=42 | 固定随机种子保证结果可复现 |
n_estimators=100 | 构建100棵决策树 |
max_depth=3 | 限制树深度防止过拟合 |
oob_score=True | 启用袋外误差评估(天然验证集) |
model.fit(...) | 训练森林(并行构建100棵树) |
y_pred = model.predict(...) | 用训练好的森林预测新数据 |
accuracy_score(...) | 计算预测准确率 |
model.feature_importances_ | 输出特征重要性(决策贡献度) |
model.oob_score_ | 输出袋外样本预测精度 |
四、小结
1.随机森林算法推荐在医疗诊断、金融风控、客户分群等场景中使用。避免在图像识别(需CNN)、时序预测(需LSTM)等场景中使用。
2.优先使用袋外误差(OOB Score)作为初始评估指标,无需额外验证集即可获得无偏估计,特别适合小数据集场景。
以上就是本文内容。
请大家多多点赞、收藏、加关注。谢谢啦。