第10步 LightGBM


前言

上回说到Xgboost是数据竞赛大杀器,那它有没有缺点呢?答案是肯定的,简单来说就是训练速度慢、内存占用高。
所以呢,大佬就对其进行了改良,一方面呢,延续了 XGBoost 的那一套集成学习的方式;另一方面呢,相对于xgboost,具有训练速度快和内存占用率低的特点。它就是这一步要介绍的,LightGBM。
LightGBM的设计初衷就是提供一个快速高效、低内存占用、高准确度、支持并行和大规模数据处理的数据科学工具。
具体怎么改良的,就不细说了,有兴趣的可以自行百度食用。
我们直接上代码实战,继续SUV的例子:


一、导入库与数据

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.metrics import confusion_matrix
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
# 导入数据集
dataset = pd.read_csv('Day 4 Social_Network_Ads.csv')
X = dataset.iloc[:, [1, 2, 3]].values
Y = dataset.iloc[:, 4].values
# 性别转化为数字
labelencoder_X = LabelEncoder()
X[:, 0] = labelencoder_X.fit_transform(X[:, 0])

二、数据集切分与特征缩放

# 将数据集分成训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
    X, Y, test_size=0.25, random_state=0)
# 特征缩放
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

三、数据训练与预测

3.1 安装LightGBM

Sklearn并没有包含LightGBM,所以得自己安装,步骤如下:
① 使用pip进行安装。打开Anaconda Prompt。这个都会吧,点击“开始”,找到Anaconda (64-bit)文件夹,子菜单就有了。
② 输入pip install lightgbm,回车。开始下载,安装成功。
③ 打开Spyder,输入import lightgbm,回车。无报错,安装成功。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2 训练LightGBM

import lightgbm as lgb
gbm = lgb.LGBMClassifier(boosting='gbdt', objective='binary', metric='auc', feature_fraction = 1, bagging_fraction = 0.9, lambda_l1 = 0.1, lambda_l2 = 0.1)
gbm.fit(X_train, y_train)

3.3 预测测试集结果

y_pred = gbm.predict(X_test)

保姆级操作演示

LightGBM的参数多到让人绝望,可以分为四类:核心参数、控制学习过程参数、IO参数和学习目标参数。
下面只介绍重要参数(具体可以看:https://lightgbm.apachecn.org/#/docs/6):

1.1、核心参数
① boosting:指定要使用的基础模型,默认gbdt。可选项:gbdt,传统的梯度提升决策树;rf,Random Forest(随机森林);dart,Dropouts meet Multiple Additive Regression Trees;goss, Gradient-based One-Side Sampling (基于梯度的单侧采样)。
② task:指定数据的用途,默认train。可选项:train,用于训练;predict,用于预测;convert_model,要将模型文件转换成 if-else 格式。
③ objective:指定模型的用途,默认为regression。可选项:
1)回归:regression,损失函数为L2;regression_l1,损失函数为L1;huber,损失函数为huber;fair,损失函数为fair;poisson,泊松回归;quantile,quantile 回归;quantile_l2, 类似于 quantile, 但是使用了L2损失函数。
2)binary:二分类,用的最多的。
3)多分类:multiclass,目标函数为softmax,需要指定num_class(分成几类);multiclassova,目标函数One-vs-All,需要指定num_class(分成几类)。
④ num_iterations:boosting的迭代次数,默认100。
⑤ learning_rate:学习速度,默认0.1。
⑥ num_leaves:一棵树上的叶子数,默认31。

1.2、控制学习过程参数
① max_depth:指定树模型的最大深度,默认-1。
② min_data_in_leaf:一个叶子上数据的最小数量,默认20。
③ feature_fraction:默认1.0。如果feature_fraction小于1.0,LightGBM将会在每次迭代中随机选择部分特征。例如,如果设置为0.8,将会在每棵树训练之前选择80%的特征。boosting 为random forest时用。
④ feature_fraction_seed:随机选择特征时的随机种子数,默认2。
⑤ bagging_fraction:每次迭代时用的数据比例,默认1。注意:为了启用bagging,bagging_freq应该设置为非零值。
⑥ bagging_freq:bagging的频率,默认为0。设置为0意味着禁用bagging。k意味着每k次迭代执行bagging。
⑦ bagging_seed:bagging 随机数种子,默认3。
⑧ early_stopping_round:早停设置,默认为0。如果一次验证数据的一个度量在最近的early_stopping_round 回合中没有提高,模型将停止训练。
⑨ lambda_l1:L1正则化,默认0。
⑩ lambda_l2:L2正则化,默认0。
⑪ min_gain_to_split:执行切分的最小增益,默认0。
⑫ min_data_per_group:每个分类组的最小数据量,默认100。

1.3、IO参数
① max_bin:表示特征将存入的 bin 的最大数量,默认255。
② categorical_feature:指定分类特征。用数字做索引,categorical_feature=0,1,2意味着column_0,column_1和column_2是分类特征。
③ ignore_column:在培训中指定一些忽略的列。用数字做索引,ignore_column=0,1,2意味着column_0,column_1和column_2将被忽略。
④ save_binary:默认Flase。设置为True时,则数据集被保存为二进制文件,下次读数据时速度会变快。

1.4、学习目标参数
① is_unbalance:默认Flase。用于binary分类,如果数据不平衡设置为True。
② metric:设置度量指标:mae,mse,rmse,quantile,huber,fair,poisson,ndcg,map,auc,binary_logloss,binary_error(样本0的正确分类,1的错误分类),multi_logloss(mulit-class 损失日志分类),multi_error(error rate for mulit-class 出错率分类)。注意:支持多指标, 使用 , 分隔。

2、可以看到,LightGBM的参数非常多,跟Xgboost不相上下。因此调参也是一门大工程。这里我就随缘设置几个参数,先看看效果。

3.4 模型评估

模型预测,使用混淆矩阵评估:

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
print(cm)

输出的结果:
在这里插入图片描述
混淆矩阵可视化(再次重现一次代码):

classes = list(set(y_test))
classes.sort()
plt.imshow(cm, cmap=plt.cm.Blues)
indices = range(len(cm))
plt.xticks(indices, classes)
plt.yticks(indices, classes)
plt.colorbar()
plt.xlabel('guess')
plt.ylabel('fact')
for first_index in range(len(cm)):
    for second_index in range(len(cm[first_index])):
        plt.text(first_index, second_index, cm[first_index][second_index]) 
plt.show() 

在这里插入图片描述

总结

有一种打脸的感觉,LightGBM的随缘调参法,还不如逻辑回归的分类效果。一顿操作猛如虎,一看战绩0比5。
还是那句话,数据至上,模型只是逼近它的极限而已。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jet4505

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值