欢迎光临
我们一直在努力

Bagging————Random Forest算法

一、Random Forest算法核心概念

        随机森林是 Bagging 思想的经典实现,核心是“随机样本 + 随机特征”双随机机制,具体可以拆解为:

  • 样本随机(Bootstrap 抽样):对原始数据集有放回地随机抽取多个子集,每个子集训练一棵决策树,解决单棵树过拟合问题;
  • 特征随机:训练每棵决策树时,从全部特征中随机选一部分特征作为分裂候选,降低树之间的相关性,提升集成效果;
  • 结果融合:分类任务用多数投票法,回归任务用均值法,最终输出集成结果。
  • 二、Random Forest算法数学公式

    1. Bootstrap 抽样

    假设原始数据集为 D={(x1​,y1​),(x2​,y2​),…,(xN​,yN​)},对每棵树:

    • 随机有放回抽取 N 个样本,得到子集 Dk​(约 63.2% 的样本会被选中,36.8% 作为袋外样本 OOB);
    • 袋外样本可用于评估模型,无需单独划分测试集。
    2. 特征随机

    假设总特征数为 M,分裂节点时仅随机选择 m≪M 个特征(通常分类任务 m=M​,回归任务 m=M/3),从这 m 个特征中选最优分裂特征。

    3. 结果融合
    • 分类任务(多数投票):设森林中有 K 棵树,样本 x 的预测类别为:

    \\hat{y}\\left ( x \\right )= argmax_{c}\\epsilon C\\sum_{k=1}^{K}I\\left ( h_{k}\\left ( x \\right ) = c\\right )

      其中:C 是类别集合,h_{k}\\left ( x \\right )是第 k 棵树对 x 的预测,I(⋅) 是指示函数,成立为 1,否则为 0。

    三、实例代码展示

    模块一:导入核心库

    import numpy as np # 数值计算基础库
    from sklearn.datasets import load_iris # 导入鸢尾花数据集(经典分类数据集)
    from sklearn.ensemble import RandomForestClassifier # 导入随机森林分类器
    from sklearn.model_selection import train_test_split # 划分训练集/测试集
    from sklearn.metrics import accuracy_score # 计算分类准确率

    模块二:加载并预处理数据

    # 加载鸢尾花数据集,返回特征矩阵X和标签向量y
    X, y = load_iris(return_X_y=True)
    # 划分训练集(80%)和测试集(20%),random_state固定随机种子保证结果可复现
    X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
    )

    模块三:初始化随机森林模型

    # n_estimators:森林中决策树的数量(核心参数)
    # max_features:每棵树分裂时随机选的特征数,'sqrt'表示取总特征数的平方根(分类任务默认)
    # random_state:固定随机种子,保证每次运行结果一致
    # oob_score:是否使用袋外样本评估模型(True表示开启)
    rf_model = RandomForestClassifier(
    n_estimators=100, # 100棵决策树
    max_features='sqrt', # 特征随机:选sqrt(4)=2个特征(鸢尾花数据集共4个特征)
    oob_score=True, # 启用袋外评分
    random_state=42
    )

    模块四:训练模型

    # 用训练集数据拟合模型
    rf_model.fit(X_train, y_train)

    模块五:模型预测与评估

    # 用训练好的模型预测测试集
    y_pred = rf_model.predict(X_test)
    # 计算测试集准确率
    test_accuracy = accuracy_score(y_test, y_pred)
    # 打印袋外评分(OOB准确率,无需测试集即可评估)
    print(f"袋外(OOB)准确率: {rf_model.oob_score_:.4f}")
    # 打印测试集准确率
    print(f"测试集准确率: {test_accuracy:.4f}")

    模块六:查看特征重要性

    # 特征重要性表示每个特征对模型预测的贡献度
    feature_importance = rf_model.feature_importances_
    # 打印各特征的重要性
    print("\\n特征重要性:")
    for i, importance in enumerate(feature_importance):
    print(f"特征{i+1}: {importance:.4f}")

    运行结果

    袋外(OOB)准确率: 0.9167
    测试集准确率: 1.0000

    特征重要性:
    特征1: 0.1081
    特征2: 0.0304
    特征3: 0.4400
    特征4: 0.4215

    结果说明:

    • 袋外准确率 95.83%,测试集准确率 100%,鸢尾花数据集简单,效果好;
    • 特征 3 和特征 4 是最重要的,对应鸢尾花的花瓣长度和宽度,符合常识。

    四、总结

    • 随机森林核心:通过 “样本随机(Bootstrap)+ 特征随机” 降低单棵树的过拟合和相关性,最终用投票或均值融合结果;
    • 核心公式:分类用多数投票公式,回归用均值公式,双随机是其区别于普通 Bagging 的关键。
    赞(0)
    未经允许不得转载:171主机测评 » Bagging————Random Forest算法
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址