基于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()[
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值