机器学习:LightGBM算法原理(附案例实战)

Posted i阿极

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习:LightGBM算法原理(附案例实战)相关的知识,希望对你有一定的参考价值。

机器学习:LightGBM算法原理(附案例实战)

作者:i阿极

作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页

😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍

📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!💪


订阅专栏案例:机器学习
机器学习:基于逻辑回归对某银行客户违约预测分析
机器学习:学习k-近邻(KNN)模型建立、使用和评价
机器学习:基于支持向量机(SVM)进行人脸识别预测
决策树算法分析天气、周末和促销活动对销量的影响
机器学习:线性回归分析女性身高与体重之间的关系
机器学习:基于主成分分析(PCA)对数据降维
机器学习:基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测
机器学习:学习KMeans算法,了解模型创建、使用模型及模型评价
机器学习:基于神经网络对用户评论情感分析预测
机器学习:朴素贝叶斯模型算法原理(含实战案例)
机器学习:逻辑回归模型算法原理(附案例实战)
机器学习:基于逻辑回归对优惠券使用情况预测分析
机器学习:基于逻辑回归对超市销售活动预测分析
机器学习:基于KNN对葡萄酒质量进行分类

文章目录


1、LightGBM算法原理

LightGBM是一个基于决策树的梯度提升框架,被广泛应用于机器学习任务,如分类、回归和排序等。LightGBM采用了一些独特的技术,例如基于直方图的决策树学习和GOSS(Gradient-based One-Side Sampling)等,以提高模型的训练效率和准确性。

LightGBM的核心思想是采用基于直方图的决策树算法。直方图是对特征值进行离散化处理后,将连续的数值分段成多个区间,每个区间内的数值数量作为该区间的计数值。然后通过直方图算法来优化决策树的分裂点选择,从而提高决策树的训练效率。

具体来说,LightGBM采用了以下几种优化方法:

  • 基于直方图的决策树算法
    LightGBM采用了基于直方图的算法来对连续特征进行离散化处理,将特征值分段成多个区间,计算每个区间内的样本数量,然后根据区间的计数值来选择最佳的分裂点。这种方法避免了对特征进行排序和遍历的操作,从而提高了训练速度。

  • 基于梯度的单边采样
    LightGBM采用了基于梯度的单边采样算法来加速训练过程。该算法在每次迭代时,优先选择梯度较大的样本进行训练,从而可以快速找到最佳的模型参数。

  • 基于直方图的特征选取
    LightGBM还采用了基于直方图的特征选取算法,该算法通过计算每个特征的直方图信息来评估特征的重要性,然后根据特征重要性的排序选择最佳的特征集合。

  • 带深度的叶节点优化
    LightGBM采用了带深度的叶节点优化算法,该算法可以避免过拟合问题,提高模型的泛化能力。具体来说,该算法通过限制叶节点的深度来控制模型的复杂度,从而防止模型在训练数据上过拟合。

2、实验环境

Python 3.9

Anaconda

Jupyter Notebook

3、LightGBM算法案例实战

3.1案例背景

投资商经常会通过多个不同渠道投放广告,以此来获得经济利益。在本案例中我们选取公司在电视、广播和报纸上的投入,来预测广告收益,这对公司策略的制定是有较重要的意义。

3.2模型搭建

读取数据

import pandas as pd
df = pd.read_excel('/home/mw/input/XG3004/广告收益数据.xlsx')
df.head()

提取特征变量和目标变量

X = df.drop(columns='收益') 
y = df['收益'] 

划分训练集和测试集

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=123)

模型训练和搭建

from lightgbm import LGBMRegressor
model = LGBMRegressor()
model.fit(X_train, y_train)

3.3模型预测及评估

预测测试数据

y_pred = model.predict(X_test)
y_pred[0:5]

预测值和实际值对比

a = pd.DataFrame()  # 创建一个空DataFrame 
a['预测值'] = list(y_pred)
a['实际值'] = list(y_test)
a.head()

手动输入数据进行预测

X = [[71, 11, 2]]
model.predict(X)

查看R-square

from sklearn.metrics import r2_score
r2 = r2_score(y_test, model.predict(X_test))
r2

查看评分

model.score(X_test, y_test)

特征重要性

model.feature_importances_

3.4模型参数调优

参数调优

from sklearn.model_selection import GridSearchCV  # 网格搜索合适的超参数
parameters = 'num_leaves': [15, 31, 62], 'n_estimators': [20, 30, 50, 70], 'learning_rate': [0.1, 0.2, 0.3, 0.4]  # 指定分类器中参数的范围
model = LGBMRegressor()  # 构建模型
grid_search = GridSearchCV(model, parameters,scoring='r2',cv=5)

cv=5表示交叉验证5次,scoring='r2’表示以R-squared作为模型评价准则

输出参数最优值

grid_search.fit(X_train, y_train)  # 传入数据
grid_search.best_params_  # 输出参数的最优值

重新搭建LightGBM回归模型

model = LGBMRegressor(num_leaves=31, n_estimators=50,learning_rate=0.3)
model.fit(X_train, y_train)

查看得分

model.score(X_test, y_test)


总结

总之,LightGBM是一种高效的集成学习框架,它采用了多种优化方法来提高训练速度和准确性,能够在大规模数据集上实现高效的训练和预测。

📢文章下方有交流学习区!一起学习进步!💪💪💪
📢创作不易,如果觉得文章不错,可以点赞👍收藏📁评论📒
📢你的支持和鼓励是我创作的动力❗❗❗

机器学习集成学习进阶LightGBM算法和案例

目录


1 lightGBM

1.1 lightGBM演进过程

1.2 AdaBoost算法

AdaBoost是一种提升树的方法,和三个臭皮匠,赛过诸葛亮的道理一样。

AdaBoost两个问题:

  • (1) 如何改变训练数据的权重或概率分布
    • 提高前一轮被弱分类器错误分类的样本的权重,降低前一轮被分对的权重
  • (2) 如何将弱分类器组合成一个强分类器,亦即,每个分类器,前面的权重如何设置
    • 采取”多数表决”的方法.加大分类错误率小的弱分类器的权重,使其作用较大,而减小分类错误率大的弱分类器的权重,使其在表决中起较小的作用。

1.3 GBDT算法以及优缺点

GBDT和AdaBosst很类似,但是又有所不同。

  • GBDT和其它Boosting算法一样,通过将表现一般的几个模型(通常是深度固定的决策树)组合在一起来集成一个表现较好的模型。

  • AdaBoost是通过提升错分数据点的权重来定位模型的不足, Gradient Boosting通过负梯度来识别问题,通过计算负梯度来改进模型,即通过反复地选择一个指向负梯度方向的函数,该算法可被看做在函数空间里对目标函数进行优化。

因此可以说 。

GradientBoosting=GradientDescent+BoostingGradientBoostin**g=GradientDescent+Boostin**g


缺点:

GBDT ->预排序方法(pre-sorted)

  • (1)

    空间消耗大

    • 这样的算法需要保存数据的特征值,还保存了特征排序的结果(例如排序后的索引,为了后续快速的计算分割点),这里需要消耗训练数据两倍的内存
  • (2)

    时间上也有较大的开销。

    • 在遍历每一个分割点的时候,都需要进行分裂增益的计算,消耗的代价大。
  • (3)

    对内存(cache)优化不友好。

    • 在预排序后,特征对梯度的访问是一种随机访问,并且不同的特征访问的顺序不一样,无法对cache进行优化。
    • 同时,在每一层长树的时候,需要随机访问一个行索引到叶子索引的数组,并且不同特征访问的顺序也不一样,也会造成较大的cache miss。

1.4 启发

常用的机器学习算法,例如神经网络等算法,都可以以mini-batch的方式训练,训练数据的大小不会受到内存限制。

而GBDT在每一次迭代的时候,都需要遍历整个训练数据多次。

如果把整个训练数据装进内存则会限制训练数据的大小;如果不装进内存,反复地读写训练数据又会消耗非常大的时间。

尤其面对工业级海量的数据,普通的GBDT算法是不能满足其需求的。

LightGBM提出的主要原因就是为了解决GBDT在海量数据遇到的问题,让GBDT可以更好更快地用于工业实践。

2 什么是lightGBM

lightGBM是2017年1月,微软在GItHub上开源的一个新的梯度提升框架。

github介绍链接

在开源之后,就被别人冠以“速度惊人”、“支持分布式”、“代码清晰易懂”、“占用内存小”等属性。

LightGBM主打的高效并行训练让其性能超越现有其他boosting工具。在Higgs数据集上的试验表明,LightGBM比XGBoost快将近10倍,内存占用率大约为XGBoost的1/6。

higgs数据集介绍:这是一个分类问题,用于区分产生希格斯玻色子的信号过程和不产生希格斯玻色子的信号过程。

数据链接

3 lightGBM原理

lightGBM 主要基于以下方面优化,提升整体特特性:

  1. 基于Histogram(直方图)的决策树算法
  2. Lightgbm 的Histogram(直方图)做差加速
  3. 带深度限制的Leaf-wise的叶子生长策略
  4. 直接支持类别特征
  5. 直接支持高效并行

具体解释见下,分节介绍。


3.1 基于Histogram(直方图)的决策树算法

直方图算法的基本思想是

  • 先把连续的浮点特征值离散化成k个整数,同时构造一个宽度为k的直方图。
  • 在遍历数据的时候,根据离散化后的值作为索引在直方图中累积统计量,当遍历一次数据后,直方图累积了需要的统计量,然后根据直方图的离散值,遍历寻找最优的分割点。

Eg:

[0, 0.1) --> 0;

[0.1,0.3) --> 1;

使用直方图算法有很多优点。首先,**最明显就是内存消耗的降低,**直方图算法不仅不需要额外存储预排序的结果,而且可以只保存特征离散化后的值,而这个值一般用8位整型存储就足够了,内存消耗可以降低为原来的1/8。

然后在计算上的代价也大幅降低,预排序算法每遍历一个特征值就需要计算一次分裂的增益,而直方图算法只需要计算k次(k可以认为是常数),时间复杂度从O(#data*#feature)优化到O(k*#features)。

当然,Histogram算法并不是完美的。由于特征被离散化后,**找到的并不是很精确的分割点,所以会对结果产生影响。**但在不同的数据集上的结果表明,离散化的分割点对最终的精度影响并不是很大,甚至有时候会更好一点。原因是决策树本来就是弱模型,分割点是不是精确并不是太重要;较粗的分割点也有正则化的效果,可以有效地防止过拟合;即使单棵树的训练误差比精确分割的算法稍大,但在梯度提升(Gradient Boosting)的框架下没有太大的影响。

3.2 Lightgbm 的Histogram(直方图)做差加速

一个叶子的直方图可以由它的父亲节点的直方图与它兄弟的直方图做差得到。

通常构造直方图,需要遍历该叶子上的所有数据,但直方图做差仅需遍历直方图的k个桶。

利用这个方法,LightGBM可以在构造一个叶子的直方图后,可以用非常微小的代价得到它兄弟叶子的直方图,在速度上可以提升一倍。

3.3 带深度限制的Leaf-wise的叶子生长策略

Level-wise遍历一次数据可以同时分裂同一层的叶子,容易进行多线程优化,也好控制模型复杂度,不容易过拟合。

  • 但实际上Level-wise是一种低效的算法,因为它不加区分的对待同一层的叶子,带来了很多没必要的开销,因为实际上很多叶子的分裂增益较低,没必要进行搜索和分裂。

Leaf-wise则是一种更为高效的策略,每次从当前所有叶子中,找到分裂增益最大的一个叶子,然后分裂,如此循环。

  • 因此同Level-wise相比,在分裂次数相同的情况下,Leaf-wise可以降低更多的误差,得到更好的精度。
  • Leaf-wise的缺点是可能会长出比较深的决策树,产生过拟合。因此LightGBM在Leaf-wise之上增加了一个最大深度的限制,在保证高效率的同时防止过拟合。

3.4 直接支持类别特征

实际上大多数机器学习工具都无法直接支持类别特征,一般需要把类别特征,转化到多维的0/1特征,降低了空间和时间的效率。

而类别特征的使用是在实践中很常用的。基于这个考虑,LightGBM优化了对类别特征的支持,可以直接输入类别特征,不需要额外的0/1展开。并在决策树算法上增加了类别特征的决策规则。

在Expo数据集上的实验,相比0/1展开的方法,训练速度可以加速8倍,并且精度一致。目前来看,LightGBM是第一个直接支持类别特征的GBDT工具。

Expo数据集介绍:数据包含1987年10月至2008年4月美国境内所有商业航班的航班到达和离开的详细信息。这是一个庞大的数据集:总共有近1.2亿条记录。主要用于预测航班是否准时。

数据链接

3.5 直接支持高效并行

LightGBM还具有支持高效并行的优点。LightGBM原生支持并行学习,目前支持特征并行和数据并行的两种。

  • 特征并行的主要思想是在不同机器在不同的特征集合上分别寻找最优的分割点,然后在机器间同步最优的分割点。
  • 数据并行则是让不同的机器先在本地构造直方图,然后进行全局的合并,最后在合并的直方图上面寻找最优分割点。

LightGBM针对这两种并行方法都做了优化:

  • 特征并行算法中,通过在本地保存全部数据避免对数据切分结果的通信;

  • 数据并行中使用分散规约 (Reduce scatter) 把直方图合并的任务分摊到不同的机器,降低通信和计算,并利用直方图做差,进一步减少了一半的通信量。

  • **基于投票的数据并行(Voting Parallelization)**则进一步优化数据并行中的通信代价,使通信代价变成常数级别。在数据量很大的时候,使用投票并行可以得到非常好的加速效果。


小结

  • lightGBM 演进过程

  • lightGBM优势

    • 基于Histogram(直方图)的决策树算法
    • Lightgbm 的Histogram(直方图)做差加速
    • 带深度限制的Leaf-wise的叶子生长策略
    • 直接支持类别特征
    • 直接支持高效并行

4 lightGBM算法api介绍

4.1 lightGBM的安装

  • windows下:
pip3 install lightgbm

4.2 lightGBM参数介绍

4.2.1 Control Parameters

Control Parameters含义用法
max_depth树的最大深度当模型过拟合时,可以考虑首先降低 max_depth
min_data_in_leaf叶子可能具有的最小记录数默认20,过拟合时用
feature_fraction例如 为0.8时,意味着在每次迭代中随机选择80%的参数来建树boosting 为 random forest 时用
bagging_fraction每次迭代时用的数据比例用于加快训练速度和减小过拟合
early_stopping_round如果一次验证数据的一个度量在最近的early_stopping_round 回合中没有提高,模型将停止训练加速分析,减少过多迭代
lambda指定正则化0~1
min_gain_to_split描述分裂的最小 gain控制树的有用的分裂
max_cat_group在 group 边界上找到分割点当类别数量很多时,找分割点很容易过拟合时
n_estimators最大迭代次数最大迭代数不必设置过大,可以在进行一次迭代后,根据最佳迭代数设置

4.2.2 Core Parameters

Core Parameters含义用法
Task数据的用途选择 train 或者 predict
application模型的用途选择 regression: 回归时, binary: 二分类时, multiclass: 多分类时
boosting要用的算法gbdt, rf: random forest, dart: Dropouts meet Multiple Additive Regression Trees, goss: Gradient-based One-Side Sampling
num_boost_round迭代次数通常 100+
learning_rate学习率常用 0.1, 0.001, 0.003…
num_leaves叶子数量默认 31
devicecpu 或者 gpu
metricmae: mean absolute error , mse: mean squared error , binary_logloss: loss for binary classification , multi_logloss: loss for multi classification

4.2.3 IO parameter

IO parameter含义
max_bin表示 feature 将存入的 bin 的最大数量
categorical_feature如果 categorical_features = 0,1,2, 则列 0,1,2是 categorical 变量
ignore_column与 categorical_features 类似,只不过不是将特定的列视为categorical,而是完全忽略
save_binary这个参数为 true 时,则数据集被保存为二进制文件,下次读数据时速度会变快

4.3 调参建议

IO parameter含义
num_leaves取值应 <= 2(max_depth), 超过此值会导致过拟合
min_data_in_leaf将它设置为较大的值可以避免生长太深的树,但可能会导致 underfitting,在大型数据集时就设置为数百或数千
max_depth这个也是可以限制树的深度

下表对应了 Faster Speed ,better accuracy ,over-fitting 三种目的时,可以调的参数

Faster Speedbetter accuracyover-fitting
max_bin 设置小一些用较大的 max_binmax_bin 小一些
num_leaves 大一些num_leaves 小一些
feature_fraction来做 sub-samplingfeature_fraction
bagging_fractionbagging_freq【bagging的次数。0表示禁用bagging,非零值表示执行k次bagging】设定 bagging_fraction 和 bagging_freq
training data 多一些training data 多一些
save_binary来加速数据加载直接用 categorical featuregmin_data_in_leaf 和 min_sum_hessian_in_leaf【和xgboost中的min_child_weight类似】
用 parallel learning用 dart 【DART利用了深度神经网络中dropout设置的技巧,随机丢弃生成的决策树,然后再从剩下的决策树集中迭代优化提升树】lambda_l1, lambda_l2 ,min_gain_to_split 做正则化
num_iterations 大一些,learning_rate小一些max_depth 控制树的深度

5 lightGBM算法api介绍

5.1 lightGBM的安装

  • windows下:
pip3 install lightgbm

5.2 lightGBM参数介绍

5.2.1 Control Parameters

Control Parameters含义用法
max_depth树的最大深度当模型过拟合时,可以考虑首先降低 max_depth
min_data_in_leaf叶子可能具有的最小记录数默认20,过拟合时用
feature_fraction例如 为0.8时,意味着在每次迭代中随机选择80%的参数来建树boosting 为 random forest 时用
bagging_fraction每次迭代时用的数据比例用于加快训练速度和减小过拟合
early_stopping_round如果一次验证数据的一个度量在最近的early_stopping_round 回合中没有提高,模型将停止训练加速分析,减少过多迭代
lambda指定正则化0~1
min_gain_to_split描述分裂的最小 gain控制树的有用的分裂
max_cat_group在 group 边界上找到分割点当类别数量很多时,找分割点很容易过拟合时
n_estimators最大迭代次数最大迭代数不必设置过大,可以在进行一次迭代后,根据最佳迭代数设置

5.2.2 Core Parameters

Core Parameters含义用法
Task数据的用途选择 train 或者 predict
application模型的用途选择 regression: 回归时, binary: 二分类时, multiclass: 多分类时
boosting要用的算法gbdt, rf: random forest, dart: Dropouts meet Multiple Additive Regression Trees, goss: Gradient-based One-Side Sampling
num_boost_round迭代次数通常 100+
learning_rate学习率常用 0.1, 0.001, 0.003…
num_leaves叶子数量默认 31
devicecpu 或者 gpu
metricmae: mean absolute error , mse: mean squared error , binary_logloss: loss for binary classification , multi_logloss: loss for multi classification

5.2.3 IO parameter

IO parameter含义
max_bin表示 feature 将存入的 bin 的最大数量
categorical_feature如果 categorical_features = 0,1,2, 则列 0,1,2是 categorical 变量
ignore_column与 categorical_features 类似,只不过不是将特定的列视为categorical,而是完全忽略
save_binary这个参数为 true 时,则数据集被保存为二进制文件,下次读数据时速度会变快

5.3 调参建议

IO parameter含义
num_leaves取值应 <= 2(max_depth), 超过此值会导致过拟合
min_data_in_leaf将它设置为较大的值可以避免生长太深的树,但可能会导致 underfitting,在大型数据集时就设置为数百或数千
max_depth这个也是可以限制树的深度

下表对应了 Faster Speed ,better accuracy ,over-fitting 三种目的时,可以调的参数

Faster Speedbetter accuracyover-fitting
max_bin 设置小一些用较大的 max_binmax_bin 小一些
num_leaves 大一些num_leaves 小一些
feature_fraction来做 sub-samplingfeature_fraction
bagging_fractionbagging_freq【bagging的次数。0表示禁用bagging,非零值表示执行k次bagging】设定 bagging_fraction 和 bagging_freq
training data 多一些training data 多一些
save_binary来加速数据加载直接用 categorical featuregmin_data_in_leaf 和 min_sum_hessian_in_leaf【和xgboost中的min_child_weight类似】
用 parallel learning用 dart 【DART利用了深度神经网络中dropout设置的技巧,随机丢弃生成的决策树,然后再从剩下的决策树集中迭代优化提升树】lambda_l1, lambda_l2 ,min_gain_to_split 做正则化
num_iterations 大一些,learning_rate小一些max_depth 控制树的深度

6 《绝地求生》玩家排名预测

6.1 项目背景

绝地求生(Player unknown’s Battlegrounds),俗称吃鸡,是一款战术竞技型射击类沙盒游戏。

这款游戏是一款大逃杀类型的游戏,每一局游戏将有最多100名玩家参与,他们将被投放在绝地岛(battlegrounds)上,在游戏的开始时所有人都一无所有。玩家需要在岛上收集各种资源,在不断缩小的安全区域内对抗其他玩家,让自己生存到最后。

本作拥有很高的自由度,玩家可以体验飞机跳伞、开越野车、丛林射击、抢夺战利品等玩法,小心四周埋伏的敌人,尽可能成为最后1个存活的人。

该游戏中,玩家需要在游戏地图上收集各种资源,并在不断缩小的安全区域内对抗其他玩家,让自己生存到最后。

6.2 数据集介绍

本项目中,将为您提供大量匿名的《绝地求生》游戏统计数据。

其格式为每行包含一个玩家的游戏后统计数据,列为数据的特征值。

数据来自所有类型的比赛:单排,双排,四排;不保证每场比赛有100名人员,每组最多4名成员。

文件说明:

  • train_V2.csv - 训练集
  • test_V2.csv - 测试集

数据集局部图如下图所示:


数据集中字段解释:

  • Id [用户id]
    • Player’s Id
  • groupId [所处小队id]
    • ID to identify a group within a match. If the same group of players plays in different matches, they will have a different groupId each time.
  • matchId [该场比赛id]
    • ID to identify match. There are no matches that are in both the training and testing set.
  • assists [助攻数]
    • Number of enemy players this player damaged that were killed by teammates.
  • boosts [使用能量,道具数量]
    • Number of boost items used.
  • damageDealt [总伤害]
    • Total damage dealt. Note: Self inflicted damage is subtracted.
  • DBNOs [击倒敌人数量]
    • Number of enemy players knocked.
  • headshotKills [爆头数]
    • Number of enemy players killed with headshots.
  • heals [使用治疗药品数量]
    • Number of healing items used.
  • killPlace [本厂比赛杀敌排行]
    • Ranking in match of number of enemy players killed.
  • killPoints [Elo杀敌排名]
    • Kills-based external ranking of player. (Think of this as an Elo ranking where only kills matter.) If there is a value other than -1 in rankPoints, then any 0 in killPoints should be treated as a “None”.
  • kills [杀敌数]
    • Number of enemy players killed.
  • killStreaks [连续杀敌数]
    • Max number of enemy players killed in a short amount of time.
  • longestKill [最远杀敌距离]
    • Longest distance between player and player killed at time of death. This may be misleading, as downing a player and driving away may lead to a large longestKill stat.
  • matchDuration [比赛时长]
    • Duration of match in seconds.
  • matchType [比赛类型(小组人数)]
    • String identifying the game mode that the data comes from. The standard modes are “solo”, “duo”, “squad”, “solo-fpp”, “duo-fpp”, and “squad-fpp”; other modes are from events or custom matches.
  • maxPlace [本局最差名次]
    • Worst placement we have data for in the match. This may not match with numGroups, as sometimes the data skips over placements.
  • numGroups [小组数量]
    • Number of groups we have data for in the match.
  • rankPoints [Elo排名]
    • Elo-like ranking of player. This ranking is inconsistent and is being deprecated in the API’s next version, so use with caution. Value of -1 takes place of “None”.
  • revives [救活队员的次数]
    • Number of times this player revived teammates.
  • rideDistance [驾车距离]
    • Total distance traveled in vehicles measured in meters.
  • roadKills [驾车杀敌数]
    • Number of kills while in a vehicle.
  • swimDistance [游泳距离]
    • Total distance traveled by swimming measured in meters.
  • teamKills [杀死队友的次数]
    • Number of times this player killed a teammate.
  • vehicleDestroys [毁坏机动车的数量]
    • Number of vehicles destroyed.
  • walkDistance [步行距离]
    • Total distance traveled on foot measured in meters.
  • weaponsAcquired [收集武器的数量]
    • Number of weapons picked up.
  • winPoints [胜率Elo排名]
    • Win-based external ranking of player. (Think of this as an Elo ranking where only winning matters.) If there is a value other than -1 in rankPoints, then any 0 in winPoints should be treated as a “None”.
  • winPlacePerc [百分比排名]
    • The target of prediction. This is a percentile winning placement, where 1 corresponds to 1st place, and 0 corresponds to last place in the match. It is calculated off of maxPlace, not numGroups, so it is possible to have missing chunks in a match.

6.3 项目评估方式

你必须创建一个模型,根据他们的最终统计数据预测玩家的排名,从1(第一名)到0(最后一名)。

最后结果通过平均绝对误差(MAE)进行评估,即通过预测的winPlacePerc和真实的winPlacePerc之间的平均绝对误差

关于MAE:

  • sklearn.metrics.mean_absolute_error

以上是关于机器学习:LightGBM算法原理(附案例实战)的主要内容,如果未能解决你的问题,请参考以下文章

机器学习:逻辑回归模型算法原理(附案例实战)

机器学习集成学习进阶LightGBM算法和案例

Python应用实战案例-Pythongeopandas包详解(附大量案例及代码)

数学建模MATLAB应用实战系列(九十)-变异系数法应用案例(附MATLAB和Python代码)

数学建模MATLAB应用实战系列(九十)-TOPSIS法应用案例(附MATLAB和Python代码)

Pytorch深度学习实战3-5:详解计算图与自动微分机(附实例)