机器学习(三):基于LightGBM的分类预测

本文介绍了LightGBM的优势和参数,包括其在处理大规模数据时的高效性、易用性和鲁棒性。接着,通过英雄联盟数据集展示了LightGBM在分类预测中的应用,包括数据预处理、模型训练、特征选择和参数调优,揭示了推塔数量等特征对游戏胜负的影响。
摘要由CSDN通过智能技术生成

LightGBM介绍

LightGBM是2017年由微软推出的可扩展机器学习系统,是微软旗下DMKT的一个开源项目,由2014年首届阿里巴巴大数据竞赛获胜者之一柯国霖老师带领开发。它是一款基于GBDT(梯度提升决策树)算法的分布式梯度提升框架,为了满足缩短模型计算时间的需求,LightGBM的设计思路主要集中在减小数据对内存与计算性能的使用,以及减少多机器并行计算时的通讯代价。

LightGBM可以看作是XGBoost的升级豪华版,在获得与XGBoost近似精度的同时,又提供了更快的训练速度与更少的内存消耗。

LightGBM的主要优点:
  • 简单易用。提供了主流的Python\C++\R语言接口,用户可以轻松使用LightGBM建模并获得相当不错的效果。
  • 高效可扩展。在处理大规模数据集时高效迅速、高准确度,对内存等硬件资源要求不高。
  • 鲁棒性强。相较于深度学习模型不需要精细调参便能取得近似的效果。
  • LightGBM直接支持缺失值与类别特征,无需对数据额外进行特殊处理
LightGBM的主要缺点:
  • 相对于深度学习模型无法对时空位置建模,不能很好地捕获图像、语音、文本等高维数据。
  • 在拥有海量训练数据,并能找到合适的深度学习模型时,深度学习的精度可以遥遥领先LightGBM。

ps:

关于LightGBM参数

  • lightgbm参数很多,应仔细阅读https://lightgbm.readthedocs.io/en/latest/Parameters.html

  • 关于调参,可以参考https://lightgbm.readthedocs.io/en/latest/Parameters-Tuning.html

  • 1、核心参数:task, objective, boosting, n_estimators, learning_rate, metric

  • 2、与决策树相关的参数:num_leaves, max_depth, min_data_in_leaf, feature_fraction_bynode, min_gain_split

  • 3、涉及加速与防止过拟合的参数:bagging_fraction, feature_fraction, lambda_l1, lambda_l2, max_bin, min_data_in_bin, bin_construct_sample_cnt(实际上,决策树中的参数max_depth, min_data_in_leaf,
    feature_fraction_bynode也有防止过拟合的作用)

  • 4、处理不平衡的参数:pos_bagging_fraction, neg_bagging_fraction, is_unbalance

  • 5、GOSS相关参数(设置boosting=goss才会启用GOSS):top_rate, other_rate

  • 6、EFB相关参数:enable_bundle, max_conflict_rate (实际上,这两个参数也可以实现加速)

ps1:网上也有很多调参攻略,例如我随便搜索看到的网页:

  • https://www.cnblogs.com/wzdLY/p/9867719.html
  • https://blog.csdn.net/u012513618/article/details/78441676
  • https://www.cnblogs.com/jiangxinyang/p/9337094.html
  • https://www.imooc.com/article/43784?block_id=tuijian_wz

ps2:不需要处理缺失值;不需要独热编码(但不能输入字符串)

算法实战

参考链接在此

基于英雄联盟数据集的LightGBM分类实战

数据集变量描述如下:
在这里插入图片描述

数据集导入
mport numpy as np 
import pandas as pd

import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_csv('./high_diamond_ranked_10min.csv')
y = df.blueWins
drop_cols = ['gameId','blueWins']#删除不必要的变量或预测变量
x = df.drop(drop_cols, axis=1)
x.describe()#进行统计描述
  • 不同对局中插眼数和拆眼数的取值范围存在明显差距,甚至有前十分钟插了250个眼的异常值。
  • EliteMonsters的取值相当于Deagons + Heralds。
  • TotalGold 等变量在大部分对局中差距不大。
  • 两支队伍的经济差和经验差是相反数。
  • 红队和蓝队拿到首次击杀的概率大概都是50%
可视化描述
data = x
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
data_std = (data - data.mean()) / data.std()
data = pd.concat([y, data_std.iloc[:, 9:18]], axis=1)
data = pd.melt(data, id_vars='blueWins', var_name='Features', value_name='Values')

# 绘制小提琴图
sns.violinplot(x='Features', y='Values', hue='blueWins'
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值