一. 学习知识点概要
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参数理解、Python调用、特征工程和模型评估。通过数据预处理、模型训练、特征选择及参数调优,展示了XGBoost在天气数据集上的预测流程,强调了模型的鲁棒性和效率。
最低0.47元/天 解锁文章
2255





