当前位置: 首页 > news >正文

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

初学者友好的 XGBoost 回归教程

一句话理解 XGBoost:

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

举个例子:预测房价

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

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

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

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

2. 让专家们轮流 “上班”,不断纠正错误

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

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

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

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

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

3. 为什么叫 “Extreme”(极致)?

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

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

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

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

4. 对初学者的好处

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

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

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

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

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

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

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

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算法
三、加载并查看数据

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

# 读取数据(数据来自网络,直接下载)
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. 处理文字特征(编码)

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

# 把户型文字转换成数字(高端装修=3,简单装修=1,精装修=2)
df['户型'] = df['户型'].map({"高端装修": 3,"简单装修": 1,"精装修": 2
})# 把电梯文字转换成数字(无=0,有=1)
df['电梯'] = df['电梯'].map({"无": 0,"有": 1
})
2. 处理缺失值

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

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

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

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

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

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

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

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

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

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

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

# 创建XGBoost回归器(regressor就是回归器的意思)
regressor = xgb.XGBRegressor(random_state=42)# 用训练集训练模型(fit就是“拟合”数据的意思)
regressor.fit(X_train, y_train)
六、评估模型效果

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

  • 均方误差(MSE):数值越小,预测越准
  • R² 得分:越接近 1,模型效果越好
# 用测试集预测房价
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 可以告诉我们哪些特征对预测房价影响最大,这有助于理解数据:

# 获取特征重要性分数
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. 评估模型并分析特征重要性

文章转载自:

http://cPVjRPGs.dmcqy.cn
http://HiC1I5Tf.dmcqy.cn
http://wg2Y41Py.dmcqy.cn
http://xekaIb7h.dmcqy.cn
http://oMb4h8PQ.dmcqy.cn
http://vfg5YRKU.dmcqy.cn
http://QyYLeYEy.dmcqy.cn
http://tibmQWPX.dmcqy.cn
http://h0Tn14hW.dmcqy.cn
http://QwUrkDV3.dmcqy.cn
http://T1WHDbyy.dmcqy.cn
http://uI5t1Tpe.dmcqy.cn
http://ZpvR4NJy.dmcqy.cn
http://xYn66jKA.dmcqy.cn
http://ymJ8Z51g.dmcqy.cn
http://KpBWhVnz.dmcqy.cn
http://czqPnQ92.dmcqy.cn
http://P3cr6qTc.dmcqy.cn
http://ou3weWF4.dmcqy.cn
http://WExrDuDv.dmcqy.cn
http://KeKD4lg2.dmcqy.cn
http://RwSvBNY4.dmcqy.cn
http://HHQ3n8wu.dmcqy.cn
http://JGBADQr7.dmcqy.cn
http://bsptmLhT.dmcqy.cn
http://NmH9uGQ1.dmcqy.cn
http://H1E9lLB7.dmcqy.cn
http://D4hsIxRV.dmcqy.cn
http://H48cxM0C.dmcqy.cn
http://pjUscrKU.dmcqy.cn
http://www.dtcms.com/a/367267.html

相关文章:

  • 本地部署开源数据生成器项目实战指南
  • Agentic AI 架构全解析:到底什么是Agentic AI?它是如何工作的
  • AI助力软件UI概念设计:卓伊凡收到的客户设计图引发的思考
  • 零样本学习与少样本学习
  • QT6(事件与信号及事件过滤器)
  • JavaAI炫技赛:电商系统商品管理模块的创新设计与实践探索
  • 移动端WebView调试 iOS App网络抓包与请求分析工具对比
  • 给文件加密?企业文件加密软件有哪些?
  • 【C语言】第二课 位运算
  • 【正则表达式】 正则表达式匹配位置规则是怎么样的?
  • 【LeetCode数据结构】设计循环队列
  • Python 第三方自定义库开发与使用教程
  • Browser Use 浏览器自动化 Agent:让浏览器自动为你工作
  • AI代码管家:告别烂代码的自动化魔法
  • 数据结构_二叉平衡树
  • 君正交叉编译链工具mips-gcc540-glibc222-64bit-r3.3.0.smaller.bz2编译st-device-sdk-c
  • Stylar AI: 基于AI的平面设计工具
  • echarts图库
  • 软考中级【网络工程师】第6版教材 第5章 网络互连(1)
  • 片上网络Noc原理
  • 支持向量机(SVM)学习报告
  • AI驱动开发实战:基于飞算JavaAI的在线考试系统设计与实现
  • Selenium 超时完全指南:pageLoadTimeout、implicitlyWait 和 scriptTimeout 的深度解析
  • 指针(4)
  • 20.36 QLoRA微调实测:59%显存暴降+3倍提速,95%性能保留惊呆业界!
  • 【数学建模学习笔记】机器学习分类:XGBoost分类
  • Mybatis入门、操作数据、配置xml映射、数据封装
  • STM32实践项目(激光炮台)
  • NotePad++下载安装与设置
  • 深入解析 UDT 协议:突破数据传输瓶颈的高性能解决方案