# 科学计算模块
import numpy as np
import pandas as pd
# 绘图模块
import matplotlib as mpl
import matplotlib.pyplot as plt
# Scikit-Learn相关模块
# 评估器类
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
from sklearn.model_selection import GridSearchCV
# 实用函数
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 数据准备
from sklearn.datasets import load_iris
# 导入LGBM
import lightgbm as lgb
接下来我们尝试训练LGBM模型。对于LGBM来说,支持多种不同类型的数据输入以及多种不同类型的训练方式,这里我们先从最简单的应用情况开始介绍,即围绕CSV格式数据进行DATaFrame数据格式读取,并采用类sklearn的建模风格进行模型的训练。这里我们先采用鸢尾花数据集进行简单模型测试,数据导入和数据集划分如下:
# 读取数据
iris = load_iris()
data = pd.DataFrame(data= np.c_[iris['data'], iris['target']], columns= iris['feature_names'] + ['target'])
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(data.drop("target", axis=1), data["target"], test_size=0.2)
然后是模型实例化过程。和XGB类似,LGBM不同类型的模型(及功能)可以直接通过导入子模块的方式来调用,也可以直接通过父模块.子模块的方式直接进行调用,例如我们可以通过如下方式调用LGBM的分类模型:
gbm = lgb.LGBMClassifier()
gbm
也可以先导入,再调用:
from lightgbm import LGBMClassifier
gbm = LGBMClassifier()
gbm
在sklearn API中,模型已经设置好了默认超参数取值,可以完全不认识任何模型超参数的情况下进行建模。sklearn API中LGBM的超参数情况如下:
LGBMClassifier?
具体的模型训练过程和sklearn中其他模型一样,通过fit进行训练,并利用predict进行结果输出:
# 训练模型
gbm.fit(X_train, y_train)
然后输出预测结果,同样可以输出类别结果和概率预测结果:
gbm.predict(X_test)
gbm.predict_proba(X_test)
我们可以借助argmax方法将概率预测结果转化为类别预测结果:
np.argmax(gbm.predict_proba(X_test), 1)
这段代码使用了Python中的NumPy库中的argmax函数,用于返回沿轴的最大值的索引。gbm是一个机器学习模型,predict_proba()方法会返回输入数据X_test在所有可能标签上的概率值,然后argmax()函数会返回具有最高概率值的标签。总体来说,这行代码的作用是对测试数据进行预测,并返回预测结果的标签。
调用accuracy_score函数快速查看最终模型在训练集和测试集上的准确率:
accuracy_score(y_train, gbm.predict(X_train)), accuracy_score(y_test, gbm.predict(X_test))
至此,我们就完成了一次简单的LGBM算法的sklearn API调用。