零基础小白版:随机森林分类超简单讲解
一、什么是随机森林?
简单说,随机森林是一种 "团队作战" 的分类方法。就像做题时,一个人可能犯错,但一群人一起投票,结果往往更准。
这里的 "一群人" 就是多棵 "决策树"(可以理解为一种按规则分类的模型),随机森林通过整合所有决策树的结果,得到最终答案。
二、随机森林为什么 "厉害"?
它的核心是 "随机",体现在两个方面:
- 样本随机:每次建决策树时,从原始数据中 "随机抽样本"(有放回,类似抽奖时可重复抽),保证每棵树的训练数据不一样。
- 特征随机:每棵树在做分类判断时,只随机选一部分特征(比如判断 "酒的种类",只看 "酒精含量"" 颜色 " 等中的几个),避免某一个特征被过度依赖。
这种随机性让每棵树都有自己的 "想法",最后汇总结果时,错误会相互抵消,所以抗干扰能力强,不容易 "学偏"(过拟合)。
三、随机森林怎么工作?(简单步骤)
- 抽样本:从原始数据中随机抽若干样本,给每棵决策树当 "练习题"。
- 建树林:每棵树用抽到的样本和随机选的特征,自己学一套分类规则(比如 "酒精含量 > 13 的是琴酒")。
- 投票表决:来了新数据,所有树分别判断类别,最后 "少数服从多数",得票最多的就是结果。
四、用红酒数据做例子(附代码实操)
我们用一份红酒数据(包含酒精含量、颜色等特征,以及 "琴酒"" 贝尔摩德 ""雪莉" 三种类别),看看随机森林怎么分类:
-
第一步:导入工具和数据
先加载需要的 Python 库(就像准备好工具箱),再导入红酒数据:
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 贝尔摩德 -
第二步:整理数据
-
把中文列名改成英文(方便代码识别):
python# 中文列名转英文 column_mapping = { '酒精': 'Alcohol', '苹果酸': 'Malic_Acid', '种类': 'Class' # 其他列名类似转换 } df.rename(columns=column_mapping, inplace=True)
-
拆分 "特征"(用于分类的依据,比如酒精含量)和 "标签"(要预测的结果,即酒的种类):
pythonX = df.drop('Class', axis=1) # 特征:除了"种类"之外的所有列 y = df['Class'] # 标签:只有"种类"这一列
-
-
第三步:拆分训练集和测试集
就像学生先做练习题(训练集),再做考试卷(测试集):
python# 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)
-
第四步:训练随机森林模型
让模型从训练集中学规律:
python# 创建随机森林模型,包含100棵树 clf = RandomForestClassifier(n_estimators=100, random_state=42) # 用训练集训练模型 clf.fit(X_train, y_train)
-
第五步:预测并看效果
用训练好的模型预测测试集,看看准不准:
python# 预测测试集的酒种类 y_pred = clf.predict(X_test) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print('准确率:', accuracy) # 输出:准确率: 0.9722(即97%)
97% 的准确率意味着,36 个测试样本里,模型猜对了 35 个,效果很好!
五、从图中能看到什么?
我们可以画出 "特征重要性" 图,看看哪些指标对分类最关键:
python
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()
运行后会看到,"颜色强度" 和 "类黄酮" 的柱子最高,说明这两个特征最能帮我们区分红酒种类。