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

【数学建模学习笔记】机器学习分类:XGBoost分类

一、什么是 XGBoost?

XGBoost 是一种特别厉害的 "分类工具",就像一个聪明的 "判断专家"。它的工作原理是:先找一堆 "不太聪明" 的小模型(比如简单的决策树),然后让这些小模型接力工作 —— 每个小模型都努力修正上一个模型的错误,最后把所有小模型的判断加起来,得到一个非常准确的结果。

二、实战:用 XGBoost 给红酒分类

我们用一个红酒数据集来演示,目标是通过红酒的特征(比如酒精含量、颜色等)判断它属于哪种类型。

1. 准备工具

首先要导入需要的 "工具箱"(Python 库),就像做饭前要准备好锅碗瓢盆:

# 导入数据分析工具
import pandas as pd
import numpy as np
# 导入机器学习工具
from sklearn.model_selection import train_test_split  # 拆分数据
from sklearn.preprocessing import StandardScaler    # 数据标准化
from sklearn.preprocessing import LabelEncoder      # 标签编码
from xgboost import XGBClassifier                   # XGBoost模型
from sklearn.metrics import accuracy_score          # 计算准确率
2. 获取数据

加载红酒数据,里面包含各种特征和对应的红酒种类:

# 读取红酒数据
df = pd.read_excel('https://labfile.oss.aliyuncs.com/courses/40611/%E7%BA%A2%E9%85%92%E6%95%B0%E6%8D%AE.xlsx')
# 查看前5行数据
df.head()

运行后会看到类似这样的数据:

酒精苹果酸灰分...种类
14.383.592.28...琴酒
12.453.032.64...贝尔摩德
3. 整理数据

数据不能直接用,需要简单处理:

(1)给中文列名改英文名(方便代码处理):

# 中文列名映射为英文
column_mapping = {'酒精': 'Alcohol','苹果酸': 'Malic_Acid','种类': 'Class'  # 其他列类似
}
df.rename(columns=column_mapping, inplace=True)

(2)拆分特征和标签

  • 特征:用来判断的依据(比如酒精含量、苹果酸等)
  • 标签:要预测的结果(红酒种类)
X = df.drop('Class', axis=1)  # 特征(去掉种类列)
y = df['Class']               # 标签(只保留种类列)

(3)标准化数据
让不同特征的数值范围统一(比如都缩放到 0 附近),避免某一个特征 "太霸道":

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)  # 标准化后的特征

(4)拆分训练集和测试集

  • 训练集:教模型学习的 "教材"
  • 测试集:检验模型学习效果的 "考题"
# 80%数据当教材,20%当考题,random_state=42保证结果可重复
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42
)

(5)给标签编码
模型只认数字,所以把 "琴酒"、"贝尔摩德" 这些文字换成数字(比如 0、1、2):

label_encoder = LabelEncoder()
y_train_encoded = label_encoder.fit_transform(y_train)  # 训练集标签转数字
y_test_encoded = label_encoder.transform(y_test)        # 测试集标签转数字
4. 训练 XGBoost 模型

让模型通过训练集学习 "特征和种类的关系":

# 创建XGBoost分类器(objective指定任务是分类)
model = XGBClassifier(objective='multi:softmax', random_state=42)
# 用训练集训练模型
model.fit(X_train, y_train_encoded)
5. 测试模型效果

用测试集检验模型学的怎么样:

# 让模型预测测试集的红酒种类
y_pred = model.predict(X_test)# 计算准确率
accuracy = accuracy_score(y_test_encoded, y_pred)
print('准确率:', accuracy)  # 输出:0.9444(100个能对94个)

还可以看更详细的报告:

from sklearn.metrics import classification_report
print(classification_report(y_test_encoded, y_pred))

报告会显示每种红酒的预测准确率、召回率等。

6. 看哪个特征最重要

想知道哪些特征对判断红酒种类影响最大?可以画个图:

import matplotlib.pyplot as plt
import seaborn as sns# 获取特征重要性
feature_importances = model.feature_importances_
features = X.columns  # 特征名称# 画条形图
plt.figure(figsize=(10, 6))
sns.barplot(x=feature_importances, y=features)
plt.xlabel('重要性分数')
plt.ylabel('特征名称')
plt.show()

从图中能看到,"稀释的酒的蛋白质浓度的光谱度量" 这个特征最重要,就像判断一个水果是不是苹果,"形状圆不圆" 比 "颜色深不深" 更关键。

三、总结

XGBoost 是一个 "学霸级" 的分类工具,通过多个小模型接力修正错误,既能保证准确率,又不容易 "学傻"。上面的例子里,它只用简单几步就实现了 94% 的红酒分类准确率,还能告诉我们哪些特征最关键,非常实用!

http://www.dtcms.com/a/367241.html

相关文章:

  • Mybatis入门、操作数据、配置xml映射、数据封装
  • STM32实践项目(激光炮台)
  • NotePad++下载安装与设置
  • 深入解析 UDT 协议:突破数据传输瓶颈的高性能解决方案
  • MySQL分区表实战:提升大表查询性能的有效方法
  • c# .net中using的使用
  • AI大模型企业落地指南-笔记05
  • InheritedWidget
  • 2025数学建模国赛高教社杯C题思路代码文章助攻
  • 超细整理,全链路性能测试-容量评估与规划,看这篇就够了...
  • Java ConcurrentModificationException 深度剖析开发调试日志
  • 从群体偏好到解构对齐:大模型强化学习从GRPO到DAPO的“认知”进化
  • https + 域名 + 客户端证书访问模式
  • Python中将方法转为属性式访问
  • Flutter之riverpod状态管理详解
  • 【计算机网络(自顶向下方法 第7版)】第一章 计算机网络概述
  • 从零开始的python学习——元组
  • 晨控CK-GW08S与汇川H5U系列PLC配置Ethernet/IP通讯连接手册
  • 别再跟风通用大模型了!企业自建专属 AI 大模型的「避坑指南 + 落地干货」
  • GitHub每日最火火火项目(9.4)
  • Linux命令和使用
  • 【数学建模学习笔记】机器学习回归:决策树回归
  • Qt---状态机框架QState
  • Java ForkJoin
  • 办公任务分发项目 laravel vue mysql 第一章:核心功能构建 API
  • Dify 低代码平台技术详解与实践
  • 实验室智能化管理信息系统如何重塑实验室运作模式?
  • Linux系统shell脚本(三)
  • 解密注意力计算的并行机制:从多头并张量操作到CUDA内核优化
  • 【Luogu_P5839】 [USACO19DEC] Moortal Cowmbat G【动态规划】