【数学建模学习笔记】机器学习回归:随机森林回归
随机森林回归入门:从理论到实践
随机森林回归是一种强大的机器学习方法,特别适合处理回归问题。本文将为初学者详细解释随机森林回归的基本概念,并通过房价预测的实例带你一步步实现整个流程。
什么是随机森林回归?
随机森林回归是一种集成学习方法,它的核心思想是 "三个臭皮匠赛过诸葛亮"。简单来说,就是创建多个决策树,让它们各自进行预测,然后取所有树预测结果的平均值作为最终预测。
这种方法有两个主要优势:
- 减少过拟合风险:通过多个树的平均,降低了单一模型的方差
- 提高预测准确性:综合多个模型的智慧,通常比单个决策树表现更好
随机森林回归的工作流程
- 从原始数据中随机抽样,创建多个不同的训练集
- 为每个训练集构建一棵决策树
- 在构建每棵树时,随机选择部分特征进行分裂
- 所有树都完成预测后,取平均值作为最终结果
实战:用随机森林预测房价
让我们通过一个实际例子来学习随机森林回归,我们将使用房价数据集进行预测。
第一步:导入必要的库
首先,我们需要导入 Python 数据分析和机器学习所需的库:
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt
第二步:加载并查看数据
我们使用一个包含各种房屋特征和对应房价的数据集:
# 读取数据
df = pd.read_excel('https://labfile.oss.aliyuncs.com/courses/40611/%E5%8E%9F%E5%A7%8B%E6%95%B0%E6%8D%AE_%E6%88%BF%E4%BB%B7%E9%A2%84%E6%B5%8B%EF%BC%88mini%E7%89%88%E6%95%B0%E6%8D%AE%EF%BC%89.xlsx')# 查看前5行数据
print(df.head())
数据集中包含了房价、户型、电梯、面积等 26 个特征,我们的目标是根据这些特征预测房价。
第三步:数据预处理
现实世界的数据往往不完美,需要进行预处理才能用于建模:
1. 查看数据分布
# 查看户型和电梯的值分布
print("户型分布:")
print(df['户型'].value_counts())
print("\n电梯分布:")
print(df['电梯'].value_counts())
输出结果:
户型分布:
高端装修 642
简单装修 319
精装修 38
Name: count, dtype: int64电梯分布:
无 517
有 476
Name: count, dtype: int64
2. 处理缺失值
# 检查缺失值
print("缺失值数量:")
print(df.isnull().sum())# 移除含有缺失值的行
df = df.dropna()
3. 编码分类特征
机器学习模型通常需要数值型输入,我们需要将分类特征转换为数字:
# 编码定类特征
df['户型'] = df['户型'].map({"高端装修": 3,"简单装修": 1,"精装修": 2
})df['电梯'] = df['电梯'].map({"无": 0,"有": 1
})
4. 重命名列(可选)
为了方便后续处理,可以将中文列名改为英文:
column_mapping = {'户型': 'Type','电梯': 'Elevator','面积': 'Area','房龄': 'Age','装修程度': 'Decoration','容积率': 'Plot_Ratio','绿化率': 'Greening_Rate','房价': 'House_Price'
}
df.rename(columns=column_mapping, inplace=True)
第四步:准备训练数据
1. 分离特征和目标变量
# 选择特征和目标变量
X = df.loc[:, 'Type':'Greening_Rate'] # 特征
y = df['House_Price'] # 目标变量(房价)
2. 数据标准化
标准化可以让不同量级的特征对模型产生同等影响:
# 标准化处理
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
3. 划分训练集和测试集
# 划分训练集(80%)和测试集(20%)
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42
)
第五步:构建和训练随机森林回归模型
# 创建随机森林回归器,包含100棵树
regressor = RandomForestRegressor(random_state=42, n_estimators=100)# 训练模型
regressor.fit(X_train, y_train)
n_estimators=100
表示我们要创建 100 棵决策树,random_state=42
确保结果可重现。
第六步:模型预测与评估
# 使用模型进行预测
y_pred = regressor.predict(X_test)# 评估模型性能
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)print(f'均方误差(MSE): {mse:.2f}')
print(f'R²得分: {r2:.4f}')
输出结果:
均方误差(MSE): 91.73
R²得分: 0.8577
- 均方误差 (MSE):衡量预测值与实际值之间的平均平方差,值越小越好
- R² 得分:衡量模型解释数据变异的能力,范围在 0 到 1 之间,越接近 1 表示模型效果越好
我们的 R² 得分为 0.8577,说明模型能解释 85.77% 的房价变异,效果相当不错。
第七步:特征重要性分析
随机森林的一个重要优势是可以评估每个特征对预测的重要性:
# 获取特征重要性
feature_importance = regressor.feature_importances_# 可视化特征重要性
plt.figure(figsize=(12, 8))
plt.barh(X.columns, feature_importance, color='skyblue')
plt.xlabel('特征重要性')
plt.ylabel('特征')
plt.title('各特征对房价的重要性')
plt.show()
从结果可以看出,面积 (Area) 和容积率 (Plot_Ratio) 对房价的影响最大,这符合我们的常识 - 房子越大、容积率越低(居住越舒适),价格通常越高。
总结
通过本文,我们学习了:
- 随机森林回归的基本概念和优势
- 完整的机器学习工作流程:
- 数据加载与探索
- 数据预处理(处理缺失值、编码分类特征)
- 数据集划分
- 模型训练与评估
- 特征重要性分析
随机森林回归是一种简单易用但功能强大的算法,不需要太多的特征工程就能取得不错的效果,非常适合初学者入门。随着你对机器学习理解的深入,可以尝试调整模型参数(如树的数量、树的深度等)来进一步提高模型性能。