LightGBM学习笔记
LightGBM2017年由微软提出,是GBDT模型的另一个进化版本, 主要用于解决GBDT在海量数据中遇到的问题,以便更好更快的用于工业实践中。从 LightGBM 名字我们可以看出其是轻量级(Light)的梯度提升机器(GBM), 所以面对大规模数据集,它依然非常淡定,跑起来更加轻盈
一、LightGBM的直方图算法(Histogram)
LightGBM的直方图算法是代替Xgboost的预排序算法的, 之前我们提到过,Lightgbm是在xgboost的基础上进行的优化,为什么要基于xgboost进行优化呢? 这是因为在GBDT的众多演化算法里面,Xgboost性能应该算是最好的一个,而Lightgbm也算是演变家族中的一员,所以为了凸显其优越性,都是一般和xgboost进行对比。 虽然直方图的算法思路不算是Lightgbm的亮点,毕竟xgboost里面的近似算法也是用的这种思想,但是这种思路对于xgboost的预排序本身也是一种优化,所以Lightgbm本着快的原则,也采用了这种直方图的思想。
二、使用步骤
1.引入库
代码如下(示例):
import lightgbm as lgb
from sklearn.metrics import mean_squared_error
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
2.读入数据
代码如下(示例):
boston = load_boston()
data = boston.data
target = boston.target
X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.2)
3.建立模型
# 创建成lgb特征的数据集格式
lgb_train = lgb.Dataset(X_train, y_train)
lgb_eval = lgb.Dataset(X_test, y_test, reference=lgb_train)
# 将参数写成字典下形式
params = {
'task': 'train',
'boosting_type': 'gbdt', # 设置提升类型
'objective': 'regression', # 目标函数
'metric': {'l2', 'auc'}, # 评估函数
'num_leaves': 31, # 叶子节点数
'learning_rate': 0.05, # 学习速率
'feature_fraction': 0.9, # 建树的特征选择比例
'bagging_fraction': 0.8, # 建树的样本采样比例
'bagging_freq': 5, # k 意味着每 k 次迭代执行bagging
'verbose': 1 # <0 显示致命的, =0 显示错误 (警告), >0 显示信息
}
# 训练 cv and train
gbm = lgb.train(params, lgb_train, num_boost_round=20, valid_sets=lgb_eval, early_stopping_rounds=5)
# 保存模型到文件
#gbm.save_model('model.txt')
joblib.dump(lgb, './model/lgb.pkl')
# 预测数据集
y_pred = gbm.predict(X_test, num_iteration=gbm.best_iteration)
# 评估模型
print('The rmse of prediction is:', mean_squared_error(y_test, y_pred) ** 0.5)