基于LightGBM的分类预测

一、学习知识点概要

1.1 LightGBM的介绍
1). 2017年经微软推出,XGBoost的升级版
2). 模型精度: 两个模型精度相当
3). 训练速度: LightGBM训练的速度更快 => 1/10
4). 内存消耗: LightGBM占用内存更小 => 1/6
5). 特征缺失值: 两个模型都可以自动处理特征缺失值
6). 分类特征: XGBoost不支持类别特征,需要对其进行onehot编码,而LightGBM支持类别特征
  • LightGBM的主要优点:

      1.简单易用。提供了主流的Python\C++\R语言接口,用户可以轻松使用LightGBM建模并获得相当不错的效果。
      2.高效可扩展。在处理大规模数据集时高效迅速、高准确度,对内存等硬件资源要求不高。
      3.鲁棒性强。相较于深度学习模型不需要精细调参便能取得近似的效果。
      4.LightGBM直接支持缺失值与类别特征,无需对数据额外进行特殊处理
    
  • LightGBM的主要缺点:

      1.相对于深度学习模型无法对时空位置建模,不能很好地捕获图像、语音、文本等高维数据。
      2.在拥有海量训练数据,并能找到合适的深度学习模型时,深度学习的精度可以遥遥领先LightGBM。
    
1.2 LightGBM的应用
金融风控、购买行为识别、交通流量预测、环境声音分类、基因分类、生物成分分析等诸多领域
1.3 学习目标
1. 了解 LightGBM 的参数与相关知识
2. 掌握 LightGBM 的Python调用并将其运用到英雄联盟游戏胜负预测数据集上
1.4 代码流程
Step1: 库函数导入 
Step2: 数据读取/载入 
Step3: 数据信息简单查看 
Step4: 可视化描述 
Step5: 利用 LightGBM 进行训练与预测
Step6: 利用 LightGBM 进行特征选择
Step7: 通过调整参数获得更好的效果

二、学习内容

1.1 基于英雄联盟数据集的LightGBM分类实战
#下载需要用到的数据集
!wget https://tianchi-media.oss-cn-beijing.aliyuncs.com/DSW/8LightGBM/high_diamond_ranked_10min.csv
  • 数据描述
特征名称 特征意义 取值范围
WardsPlaced 插眼数量 整数
WardsDestroyed 拆眼数量 整数
FirstBlood 是否获得首次击杀 整数
Kills 击杀英雄数量 整数
Deaths 死亡数量 整数
Assists 助攻数量 整数
EliteMonsters 击杀大型野怪数量 整数
Dragons 击杀史诗野怪数量 整数
Heralds 击杀峡谷先锋数量 整数
TowersDestroyed 推塔数量 整数
TotalGold 总经济 整数
AvgLevel 平均英雄等级 浮点数
TotalExperience 英雄总经验 整数
TotalMinionsKilled 英雄补兵数量 整数
TotalJungleMinionsKilled 英雄击杀野怪数量 整数
GoldDiff 经济差距 整数
ExperienceDiff 经验差距 整数
CSPerMin 分均补刀 浮点数
GoldPerMin 分均经济 浮点数
# 1. 导入库函数
#基础函数库
import numpy as np 
import pandas as pd
# 绘图函数库
import matplotlib.pyplot as plt
import seaborn as sns
# 2. 读取数据
df = pd.read_csv('./high_diamond_ranked_10min.csv')
y = df.blueWins # y label标签
# 3. 数据的简单查看
df.info() # 数据的信息
df.head() # 查看数据的前5行
df.tail() # 查看数据的后5行
y.value_counts() # 查看y值得分布

drop_cols = ['gameId','blueWins'] # 删除无用特征
x = df.drop(drop_cols, axis=1)

x.describe() # 查看数据的统计描述
# 根据上面的描述,我们可以去除一些重复变量,比如只要知道蓝队是否拿到一血,
# 我们就知道红队有没有拿到,可以去除红队的相关冗余数据。
drop_cols = ['redFirstBlood','redKills','redDeaths'
             ,'redGoldDiff','redExperienceDiff', 'blueCSPerMin',
            'blueGoldPerMin','redCSPerMin','redGoldPerMin']
x.drop(drop_cols, axis=1, inplace=True) 
  • 小提琴图 (Violin Plot)是用来展示多组数据的分布状态以及概率密度。这种图表结合了箱形图和密度图的特征,主要用来显示数据的分布形状。

  • 从图中我们可以看出:

      击杀英雄数量越多更容易赢,死亡数量越多越容易输(bluekills与bluedeaths左右的区别)。
      助攻数量与击杀英雄数量形成的图形状类似,说明他们对游戏结果的影响差不多。
      一血的取得情况与获胜有正相关,但是相关性不如击杀英雄数量明显。
      经济差与经验差对于游戏胜负的影响较小。
      击杀野怪数量对游戏胜负的影响并不大。
    
# 4. 可视化描述
data = x.copy()
data_std = (data - data.mean()) / data.std()
data = pd.concat([y, data_std.iloc[:, 0:9]], axis=1)
data = pd.melt(data, id_vars='blueWins', var_name='Features', value_name='Values')
fig, ax = plt.subplots(1,2,figsize=(15,5))

# 绘制小提琴图
sns.violinplot(x='Features', y='Values', hue='blueWins', data=data, split=True,
               inner='quart', ax=ax[0], palette='Blues')
fig.autofmt_xdate(rotation=45)

data = x.copy()
data_std = (data - data.mean()) / data.std(
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值