本学习笔记为阿里云天池龙珠计划机器学习训练营的学习内容,学习链接为:AI训练营机器学习-阿里云天池
LightGBM介绍
LightGBM是2017年由微软推出的可扩展机器学习系统,是微软旗下DMKT的一个开源项目,由2014年首届阿里巴巴大数据竞赛获胜者之一柯国霖老师带领开发。它是一款基于GBDT(梯度提升决策树)算法的分布式梯度提升框架,为了满足缩短模型计算时间的需求,LightGBM的设计思路主要集中在减小数据对内存与计算性能的使用,以及减少多机器并行计算时的通讯代价。
LightGBM可以看作是XGBoost的升级豪华版,在获得与XGBoost近似精度的同时,又提供了更快的训练速度与更少的内存消耗。
LightGBM的主要优点:
简单易用。提供了主流的Python\C++\R语言接口,用户可以轻松使用LightGBM建模并获得相当不错的效果。
高效可扩展。在处理大规模数据集时高效迅速、高准确度,对内存等硬件资源要求不高。
鲁棒性强。相较于深度学习模型不需要精细调参便能取得近似的效果。
LightGBM直接支持缺失值与类别特征,无需对数据额外进行特殊处理
LightGBM的主要缺点:
相对于深度学习模型无法对时空位置建模,不能很好地捕获图像、语音、文本等高维数据。
在拥有海量训练数据,并能找到合适的深度学习模型时,深度学习的精度可以遥遥领先LightGBM。
ps:
安装LightGBM,详见https://lightgbm.readthedocs.io/en/latest/Installation-Guide.html
这个网页介绍了使用lightgbm的两种形式:原生形式(import lightgbm as lgb)和Sklearn接口形式(from lightgbm import LGBMRegressor, LGBMClassifier)具体可查看https://www.cnblogs.com/chenxiangzhen/p/10894306.html
原生形式中可以使用lgb.cv做交叉验证选参数, 但要注意数据集必须使用lgb.Dataset函数加以转换
关于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
1
2
3
4
5
6
7
drop_cols = ['gameId','blueWins']#删除不必要的变量或预测变量