基于XGBoost的分类预测

本文详细介绍了XGBoost的优势和局限性,包括其在商店销售额预测、高能物理事件分类等领域的应用。学习目标涵盖XGBoost参数理解、Python调用、特征工程和模型评估。通过数据预处理、模型训练、特征选择及参数调优,展示了XGBoost在天气数据集上的预测流程,强调了模型的鲁棒性和效率。

一. 学习知识点概要

1.1 XGBoost的介绍

优点

1. 简单易用。相对其他机器学习库,用户可以轻松使用XGBoost并获得相当不错的效果。
2. 高效可扩展。在处理大规模数据集时速度快效果好,对内存等硬件资源要求不高。
3. 鲁棒性强。相对于深度学习模型不需要精细调参便能取得接近的效果。
4. XGBoost内部实现提升树模型,可以自动处理缺失值。

缺点:

1. 相对于深度学习模型无法对时空位置建模,不能很好地捕获图像、语音、文本等高维数据。
2. 在拥有海量训练数据,并能找到合适的深度学习模型时,深度学习的精度可以遥遥领先XGBoost。
1.2 XGboost的应用
  • 例如商店销售额预测、高能物理事件分类、web文本分类;用户行为预测、运动检测、广告点击率预测、恶意软件分类、灾害风险预测、在线课程退学率预测
1.3 学习目标
1. 了解 XGBoost 的参数与相关知识
2. 掌握 XGBoost 的Python调用并将其运用到天气数据集预测
1.4 代码流程
Step1: 库函数导入
Step2: 数据读取/载入
Step3: 数据信息简单查看
Step4: 可视化描述
Step5: 对离散变量进行编码
Step6: 利用 XGBoost 进行训练与预测
Step7: 利用 XGBoost 进行特征选择
Step8: 通过调整参数获得更好的效果

二. 学习内容

Step1库函数导入

import numpy as np 
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

数据的各个特征描述如下:

特征名称 意义 取值范围
Date 日期 字符串
Location 气象站的地址 字符串
MinTemp 最低温度 实数
MaxTemp 最高温度 实数
Rainfall 降雨量 实数
Evaporation 蒸发量 实数
Sunshine 光照时间 实数
WindGustDir 最强的风的方向 字符串
WindGustSpeed 最强的风的速度 实数
WindDir9am 早上9点的风向 字符串
WindDir3pm 下午3点的风向 字符串
WindSpeed9am 早上9点的风速 实数
WindSpeed3pm 下午3点的风速 实数
Humidity9am 早上9点的湿度 实数
Humidity3pm 下午3点的湿度 实数
Pressure9am 早上9点的大气压 实数
Pressure3pm 早上3点的大气压 实数
Cloud9am 早上9点的云指数 实数
Cloud3pm 早上3点的云指数 实数
Temp9am 早上9点的温度 实数
Temp3pm 早上3点的温度 实数
RainToday 今天是否下雨 No,Yes
RainTomorrow 明天是否下雨 No,Yes

Step2:数据读取/载入

data = pd.read_csv('./data/train.zip', compression='zip')

Step3:数据信息简单查看

data.head()
data.info()
data['RainTomorrow'].value_counts()
data.describe()

Step4:可视化描述

# 数字特征
numerical_features = [x for x in train_data.columns if data[x].dtype == np.float]
# 类别特征
category_features = [x for x in data.columns if data[x].dtype != np.float and x != 'RainTomorrow']
# 选取三个特征与标签组合的散点可视化
# 在2D情况下不同的特征组合对于第二天下雨与不下雨的散点分布,以及大概的区分能力。相对的Sunshine与其他特征的组合更具有区分能力
sns.pairplot(data=data[['Rainfall', 'Evaporation', 'Sunshine'] + ['RainTomorrow']], diag_kind='hist', hue= 'RainTomorrow')
plt.show()
# 利用箱型图我们也可以得到不同类别在不同特征上的分布差异情况。我们可以发现Sunshine,Humidity3pm,Cloud9am,Cloud3pm的区分能力较强
for col in data[numerical_features].columns:
    if col != 'RainTomorrow':
        sns.boxplot(x='RainTomorrow', y=col, saturation=0.5, palette='pastel', data=data)
        plt.title(col)
        plt.show()
# 可以发现不同地区降雨情况差别很大,有些地方明显更容易降雨
tlog = {
   
   }
for i in category_features:
    tlog[i] = data[data['RainTomorrow'] == 'Yes'][i].value_counts()
flog = {
   
   }
for i in category_features:
    flog[i] = data[data['RainTomorrow'] == 'No'][i].value_counts()

plt.figure(figsize=(10,10))
plt.subplot(1,2,1)
plt.title('RainTomorrow')
sns.barplot(x = pd.DataFrame(tlog['Location']).sort_index()[
### 如何使用XGBoost进行分类预测 XGBoost 是一种基于梯度提升决策树(GBDT)的高效机器学习算法,广泛应用于分类和回归任务。以下是关于如何使用 XGBoost 进行分类预测的具体方法以及代码示例。 #### 1. 导入必要的库 为了实现分类预测,需要导入 `xgboost` 库以及其他辅助工具如 `pandas`, `numpy` 和 `sklearn` 中的相关模块。 ```python import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from xgboost import XGBClassifier from sklearn.metrics import accuracy_score, classification_report ``` #### 2. 准备数据集 假设我们有一个二分类或多分类的数据集,可以将其划分为训练集和测试集以便评估模型性能。 ```python # 假设 df 是包含特征列和目标列 'target' 的 DataFrame X = df.drop('target', axis=1) y = df['target'] # 将数据拆分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ``` #### 3. 初始化并训练 XGBoost 分类器 通过设置参数来初始化 XGBoost 分类器,并利用训练数据拟合模型。 ```python model = XGBClassifier( objective='binary:logistic', # 对于二分类问题 n_estimators=100, learning_rate=0.1, max_depth=6, subsample=0.8, colsample_bytree=0.8 ) # 训练模型 model.fit(X_train, y_train, eval_metric="error", verbose=True) ``` 对于多分类问题,需调整目标函数为目标 `'multi:softmax'` 并指定类别数: ```python model = XGBClassifier( objective='multi:softmax', num_class=len(np.unique(y)), # 类别数量 n_estimators=100, learning_rate=0.1, max_depth=6, subsample=0.8, colsample_bytree=0.8 ) ``` #### 4. 预测与评估 完成模型训练后,可对测试集进行预测并对结果进行评估。 ```python # 测试集上的预测 predictions = model.predict(X_test) # 输出准确率和其他指标 accuracy = accuracy_score(y_test, predictions) print(f"Accuracy: {accuracy * 100:.2f}%") # 打印详细的分类报告 print(classification_report(y_test, predictions)) ``` 以上过程展示了如何构建一个基本的 XGBoost 分类模型[^1]。如果涉及多标签分类,则可以通过 `MultiOutputClassifier` 来封装多个独立的 XGBoost 模型以分别处理每个标签[^2]。 ```python from sklearn.multioutput import MultiOutputClassifier # 创建一个多输出分类器实例 multi_output_model = MultiOutputClassifier(XGBClassifier()) # 训练多输出模型 multi_output_model.fit(X_train, y_train) # 多输出预测 multi_predictions = multi_output_model.predict(X_test) ```
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值