【数学建模学习笔记】机器学习回归:XGBoost回归

初学者友好的 XGBoost 回归教程

一句话理解 XGBoost:

一群 "不完美的小专家"(决策树)合作,共同解决一个预测问题,而且会不断学习彼此的错误,越做越好。

举个例子:预测房价

假设你要预测一套房子的价格,怎么用 XGBoost 来做呢?

  1. 先找一群 "小专家"(决策树)

XGBoost 的核心是 "集成",就像你要判断一件事,不会只听一个人的意见,而是找一群人一起商量。这里的 "人" 就是决策树(一种根据特征做判断的模型,比如 "面积> 100 平米则价格高")。

但这些决策树一开始都很 "菜"(称为 "弱学习器"),单独预测准确率不高。

  1. 让专家们轮流 "上班",不断纠正错误

XGBoost 不是一次性训练所有树,而是一棵一棵慢慢加,每棵树都在 "弥补上一群树的缺点"。

  • 第一步:先用一棵简单的树预测房价(比如只看面积),肯定不准,会有误差(比如实际 100 万,它预测 80 万,差 20 万)。

  • 第二步:再训练第二棵树,专门盯着 "上一棵树的误差"(比如刚才差的 20 万),想办法把这个误差补上(比如这棵树看 "房龄",发现老房子容易估低,补上 5 万)。

  • 第三步:第三棵树继续盯着 "前两棵树加起来还没解决的误差"(现在还差 15 万),再找新特征(比如 "是否有电梯")来补......

  • 以此类推,直到误差小到满意为止。

  1. 为什么叫 "Extreme"(极致)?

因为它在 "纠正错误" 这件事上做了很多优化,让整个过程更快、更准:

  • 不做无用功:如果一棵新树对减少误差没帮助,就不让它加入(防止过拟合)。

  • 分工明确:训练时会尽量让不同的树关注不同的特征(比如有的看面积,有的看房龄),避免重复劳动。

  • 速度快:虽然树是一棵一棵加的,但计算时能并行处理一些步骤(比如同时检查多个特征的重要性),比普通的梯度提升树快很多。

  1. 对初学者的好处
  • 效果好:在很多预测问题(房价、销量、评分等)上,XGBoost 的表现通常比简单模型(如线性回归)好。

  • 不用纠结特征:它对数据格式要求不高,能处理数字、类别(比如 "有 / 无电梯"),甚至少量缺失值也能自动处理。

  • 能告诉你 "谁重要":训练完后,能输出每个特征的 "重要性"(比如 "面积" 对房价影响最大),帮你理解数据。

一、准备工作:安装必要的库

首先,我们需要安装 XGBoost 库,它是实现算法的核心工具。在 Python 中可以用pip安装:

python 复制代码
# 安装XGBoost(使用国内镜像加速下载)
!pip install xgboost -i https://pypi.tuna.tsinghua.edu.cn/simple
二、导入需要的工具库

接下来,我们需要导入一些常用的数据处理和分析库,就像准备好做饭的工具一样:

python 复制代码
import numpy as np  # 处理数值
import pandas as pd  # 处理表格数据
from sklearn.model_selection import train_test_split  # 划分训练集和测试集
from sklearn.preprocessing import StandardScaler  # 数据标准化
from sklearn.metrics import mean_squared_error, r2_score  # 评估模型
import matplotlib.pyplot as plt  # 画图
import xgboost as xgb  # XGBoost算法
三、加载并查看数据

我们用的是房价预测的数据集,包含房子的面积、房龄、是否有电梯等特征,以及对应的房价(目标值)。

python 复制代码
# 读取数据(数据来自网络,直接下载)
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行数据,了解数据格式
df.head()

运行后会看到类似表格的输出,包含 "房价""户型""电梯" 等列。

四、数据预处理(非常重要!)

原始数据往往不规整,需要处理后才能给模型使用。主要步骤包括:处理文字特征、处理缺失值、分离特征和目标值。

1. 处理文字特征(编码)

数据中的 "户型"(如 "精装修""简单装修")和 "电梯"("有" 或 "无")是文字,模型只能处理数字,所以需要转换成数字:

python 复制代码
# 把户型文字转换成数字(高端装修=3,简单装修=1,精装修=2)
df['户型'] = df['户型'].map({
    "高端装修": 3,
    "简单装修": 1,
    "精装修": 2
})

# 把电梯文字转换成数字(无=0,有=1)
df['电梯'] = df['电梯'].map({
    "无": 0,
    "有": 1
})
2. 处理缺失值

数据中可能有 "空值"(比如有些房子的面积没记录),这些会影响模型,所以需要删除包含空值的行:

python 复制代码
# 去掉所有包含缺失值的行
df = df.dropna()
3. 简化列名(可选)

把中文列名改成英文,方便后续代码编写:

python 复制代码
# 中文列名映射为英文
column_mapping = {
    '户型': 'Type',
    '电梯': 'Elevator',
    '面积': 'Area',
    '房龄': 'Age',
    '装修程度': 'Decoration',
    '容积率': 'Plot_Ratio',
    '绿化率': 'Greening_Rate',
    '房价': 'House_Price'
}
df.rename(columns=column_mapping, inplace=True)
4. 分离特征和目标值

特征是用来预测的变量(如面积、房龄),目标值是要预测的结果(房价):

python 复制代码
# 选择特征(从Type到Greening_Rate的列)
X = df.loc[:, 'Type':'Greening_Rate']
# 目标值是房价
y = df['House_Price']
5. 数据标准化

不同特征的单位可能不同(比如面积是 "平方米",房龄是 "年"),标准化可以让它们处于同一量级,帮助模型更好地学习:

python 复制代码
# 标准化处理
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)  # 转换后的特征
6. 划分训练集和测试集

我们需要用一部分数据训练模型,另一部分测试模型的效果(类似考试前先做练习,再考试):

python 复制代码
# 测试集占20%,随机种子42保证结果可重复
X_train, X_test, y_train, y_test = train_test_split(
    X_scaled, y, test_size=0.2, random_state=42
)
五、构建并训练 XGBoost 模型

现在数据准备好了,可以开始训练模型了:

python 复制代码
# 创建XGBoost回归器(regressor就是回归器的意思)
regressor = xgb.XGBRegressor(random_state=42)

# 用训练集训练模型(fit就是"拟合"数据的意思)
regressor.fit(X_train, y_train)
六、评估模型效果

训练好的模型需要用测试集检验效果,常用的指标有:

  • 均方误差(MSE):数值越小,预测越准
  • R² 得分:越接近 1,模型效果越好
python 复制代码
# 用测试集预测房价
y_pred = regressor.predict(X_test)

# 计算评估指标
mse = mean_squared_error(y_test, y_pred)  # 均方误差
r2 = r2_score(y_test, y_pred)  # R²得分

print(f'均方误差: {mse}')  # 输出类似:107.97
print(f'R²得分: {r2}')      # 输出类似:0.83(接近1,效果不错)
七、分析特征重要性

XGBoost 可以告诉我们哪些特征对预测房价影响最大,这有助于理解数据:

python 复制代码
# 获取特征重要性分数
feature_importance = regressor.feature_importances_

# 画图展示
plt.figure(figsize=(12, 8))  # 图的大小
plt.barh(X.columns, feature_importance, color='skyblue')  # 横向条形图
plt.xlabel('特征重要性')  # x轴标签
plt.ylabel('特征名称')    # y轴标签
plt.show()  # 显示图片

运行后会看到一个条形图,从图中可以发现:面积(Area)、容积率(Plot_Ratio)、绿化率(Greening_Rate)对房价的影响最大。

八、总结

通过以上步骤,我们完成了用 XGBoost 预测房价的全过程。关键步骤包括:

  1. 数据预处理(处理文字、缺失值、标准化等)
  2. 划分训练集和测试集
  3. 训练 XGBoost 模型
  4. 评估模型并分析特征重要性
相关推荐
XZSSWJS6 小时前
机器学习基础-day03-机器学习中的线性回归
人工智能·机器学习·线性回归
茫然无助6 小时前
机器学习:后篇
人工智能·机器学习
XZSSWJS6 小时前
机器学习基础-day04-数学方法实现线性回归
人工智能·机器学习·线性回归
THMAIL6 小时前
机器学习从入门到精通 - 卷积神经网络(CNN)实战:图像识别模型搭建指南
linux·人工智能·python·算法·机器学习·cnn·逻辑回归
无法无天霸王龙6 小时前
云计算培训为什么这么贵?
linux·运维·学习·云计算
addaduvyhup6 小时前
【RNN-LSTM-GRU】第五篇 序列模型实战指南:从选型到优化与前沿探索
学习
我命由我123456 小时前
Photoshop - Photoshop 触控手势
笔记·学习·ui·设计·photoshop·ps·美工
ssjnbnbnb6 小时前
学习资料1(粗略版)
数据库·学习·数据分析
snowfoootball6 小时前
(自用)PowerShell常用命令自查文档
linux·学习