【数学建模学习笔记】机器学习分类:随机森林分类

发布于:2025-09-08 ⋅ 阅读:(18) ⋅ 点赞:(0)

零基础小白版:随机森林分类超简单讲解

一、什么是随机森林?

简单说,随机森林是一种 "团队作战" 的分类方法。就像做题时,一个人可能犯错,但一群人一起投票,结果往往更准。
这里的 "一群人" 就是多棵 "决策树"(可以理解为一种按规则分类的模型),随机森林通过整合所有决策树的结果,得到最终答案。

二、随机森林为什么 "厉害"?

它的核心是 "随机",体现在两个方面:

  1. 样本随机:每次建决策树时,从原始数据中 "随机抽样本"(有放回,类似抽奖时可重复抽),保证每棵树的训练数据不一样。
  2. 特征随机:每棵树在做分类判断时,只随机选一部分特征(比如判断 "酒的种类",只看 "酒精含量"" 颜色 " 等中的几个),避免某一个特征被过度依赖。

这种随机性让每棵树都有自己的 "想法",最后汇总结果时,错误会相互抵消,所以抗干扰能力强,不容易 "学偏"(过拟合)。

三、随机森林怎么工作?(简单步骤)
  1. 抽样本:从原始数据中随机抽若干样本,给每棵决策树当 "练习题"。
  2. 建树林:每棵树用抽到的样本和随机选的特征,自己学一套分类规则(比如 "酒精含量 > 13 的是琴酒")。
  3. 投票表决:来了新数据,所有树分别判断类别,最后 "少数服从多数",得票最多的就是结果。
四、用红酒数据做例子(附代码实操)

我们用一份红酒数据(包含酒精含量、颜色等特征,以及 "琴酒"" 贝尔摩德 ""雪莉" 三种类别),看看随机森林怎么分类:

  1. 第一步:导入工具和数据
    先加载需要的 Python 库(就像准备好工具箱),再导入红酒数据:

    # 导入工具库
    import numpy as np
    import pandas as pd
    from sklearn.ensemble import RandomForestClassifier  # 随机森林工具
    from sklearn.model_selection import train_test_split  # 拆分数据工具
    from sklearn.metrics import accuracy_score  # 计算准确率工具
    
    # 导入红酒数据(在线地址,直接能用)
    df = pd.read_excel('https://labfile.oss.aliyuncs.com/courses/40611/%E7%BA%A2%E9%85%92%E6%95%B0%E6%8D%AE.xlsx')
    df.head()  # 查看前5行数据
    
     

    运行后能看到数据长这样(部分):

    酒精 苹果酸 种类
    14.38 3.59 琴酒
    12.45 3.03 贝尔摩德
  2. 第二步:整理数据

    • 把中文列名改成英文(方便代码识别):
      # 中文列名转英文
      column_mapping = {
          '酒精': 'Alcohol',
          '苹果酸': 'Malic_Acid',
          '种类': 'Class'  # 其他列名类似转换
      }
      df.rename(columns=column_mapping, inplace=True)
      
    • 拆分 "特征"(用于分类的依据,比如酒精含量)和 "标签"(要预测的结果,即酒的种类):
      X = df.drop('Class', axis=1)  # 特征:除了"种类"之外的所有列
      y = df['Class']  # 标签:只有"种类"这一列
      
  3. 第三步:拆分训练集和测试集
    就像学生先做练习题(训练集),再做考试卷(测试集):

    # 80%数据当训练集,20%当测试集,random_state=42保证结果可重复
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    
  4. 第四步:训练随机森林模型
    让模型从训练集中学规律:

    # 创建随机森林模型,包含100棵树
    clf = RandomForestClassifier(n_estimators=100, random_state=42)
    
    # 用训练集训练模型
    clf.fit(X_train, y_train)
    
  5. 第五步:预测并看效果
    用训练好的模型预测测试集,看看准不准:

    # 预测测试集的酒种类
    y_pred = clf.predict(X_test)
    
    # 计算准确率
    accuracy = accuracy_score(y_test, y_pred)
    print('准确率:', accuracy)  # 输出:准确率: 0.9722(即97%)
    
     

    97% 的准确率意味着,36 个测试样本里,模型猜对了 35 个,效果很好!

五、从图中能看到什么?

我们可以画出 "特征重要性" 图,看看哪些指标对分类最关键:

import matplotlib.pyplot as plt
import seaborn as sns

# 获取特征重要性数值
feature_importances = clf.feature_importances_
features = X.columns  # 特征名称

# 画条形图
plt.figure(figsize=(10, 6))
sns.barplot(x=feature_importances, y=features)
plt.xlabel('重要性')
plt.ylabel('特征')
plt.show()

运行后会看到,"颜色强度" 和 "类黄酮" 的柱子最高,说明这两个特征最能帮我们区分红酒种类。


网站公告

今日签到

点亮在社区的每一天
去签到