Python 包的相关介绍 其它有用的链接列表
- Python 例子
- Python API
- 参数优化
- 视频介绍
setuptools
, wheel
, numpy
和 scipy
是必须的, scikit-learn
对于 sklearn 接口和推荐也是必须的:pip install setuptools wheel numpy scipy scikit-learn -U
pip install lightgbm
更多内容参考 Python-package 安装指南文件夹.
为了验证是否安装成功, 可以在 Python 中
import lightgbm
试试:import lightgbm as lgb
特性及功能 请参考: http://lightgbm.apachecn.org/cn/latest/Features.html
数据接口 LightGBM Python 模块能够使用以下几种方式来加载数据:
- libsvm/tsv/csv txt format file(libsvm/tsv/csv 文本文件格式)
- Numpy 2D array, pandas object(Numpy 2维数组, pandas 对象)
- LightGBM binary file(LightGBM 二进制文件)
Dataset
对象中.要加载 ligsvm 文本文件或 LightGBM 二进制文件到 Dataset 中:
train_data = https://www.it610.com/article/lgb.Dataset('train.svm.bin')
要加载 numpy 数组到 Dataset 中:
data = https://www.it610.com/article/np.random.rand(500, 10)# 500 个样本, 每一个包含 10 个特征 label = np.random.randint(2, size=500)# 二元目标变量,0 和 1 train_data = lgb.Dataset(data, label=label)
要加载 scpiy.sparse.csr_matrix 数组到 Dataset 中:
csr = scipy.sparse.csr_matrix((dat, (row, col))) train_data = https://www.it610.com/article/lgb.Dataset(csr)
保存 Dataset 到 LightGBM 二进制文件将会使得加载更快速:
train_data = https://www.it610.com/article/lgb.Dataset('train.svm.txt') train_data.save_binary('train.bin')
创建验证数据:
test_data = https://www.it610.com/article/train_data.create_valid('test.svm')
or
test_data = https://www.it610.com/article/lgb.Dataset('test.svm', reference=train_data)
在 LightGBM 中, 验证数据应该与训练数据一致(格式一致).
指定 feature names(特征名称)和 categorical features(分类特征):
train_data = https://www.it610.com/article/lgb.Dataset(data, label=label, feature_name=['c1', 'c2', 'c3'], categorical_feature=['c3'])
LightGBM 可以直接使用 categorical features(分类特征)作为 input(输入). 它不需要被转换成 one-hot coding(独热编码), 并且它比 one-hot coding(独热编码)更快(约快上 8 倍)
注意: 在你构造
Dataset
之前, 你应该将分类特征转换为 int
类型的值.【AI_Python|LightGBM Python 软件包的基本演练.】当需要时可以设置权重:
w = np.random.rand(500, ) train_data = https://www.it610.com/article/lgb.Dataset(data, label=label, weight=w)
或者
train_data = https://www.it610.com/article/lgb.Dataset(data, label=label) w = np.random.rand(500, ) train_data.set_weight(w)
并且你也可以使用
Dataset.set_init_score()
来初始化 score(分数), 以及使用 Dataset.set_group()
;来设置 group/query 数据以用于 ranking(排序)任务.内存的高使用:
LightGBM 中的
Dataset
对象由于只需要保存 discrete bins(离散的数据块), 因此它具有很好的内存效率. 然而, Numpy/Array/Pandas 对象的内存开销较大. 如果你关心你的内存消耗. 您可以根据以下方式来节省内存:- 在构造
Dataset
时设置free_raw_data=https://www.it610.com/article/True
(默认为True
) - 在
Dataset
被构造完之后手动设置raw_data=https://www.it610.com/article/None
- 调用
gc
- Booster(提升器)参数:
param = {'num_leaves':31, 'num_trees':100, 'objective':'binary'} param['metric'] = 'auc'
- 您还可以指定多个 eval 指标:
param['metric'] = ['auc', 'binary_logloss']
num_round = 10 bst = lgb.train(param, train_data, num_round, valid_sets=[test_data])
在训练完成后, 可以使用如下方式来存储模型:
bst.save_model('model.txt')
训练后的模型也可以转存为 JSON 的格式:
json_model = bst.dump_model()
以保存模型也可以使用如下的方式来加载.
bst = lgb.Booster(model_file='model.txt')#init model
交叉验证 使用 5-折 方式的交叉验证来进行训练(4 个训练集, 1 个测试集):
num_round = 10 lgb.cv(param, train_data, num_round, nfold=5)
提前停止 如果您有一个验证集, 你可以使用提前停止找到最佳数量的 boosting rounds(梯度次数). 提前停止需要在
valid_sets
中至少有一个集合. 如果有多个,它们都会被使用:bst = lgb.train(param, train_data, num_round, valid_sets=valid_sets, early_stopping_rounds=10) bst.save_model('model.txt', num_iteration=bst.best_iteration)
该模型将开始训练, 直到验证得分停止提高为止. 验证错误需要至少每个 early_stopping_rounds 减少以继续训练.
如果提前停止, 模型将有 1 个额外的字段: bst.best_iteration. 请注意 train() 将从最后一次迭代中返回一个模型, 而不是最好的一个.
This works with both metrics to minimize (L2, log loss, etc.) and to maximize (NDCG, AUC). Note that if you specify more than one evaluation metric, all of them will be used for early stopping.
这与两个度量标准一起使用以达到最小化(L2, 对数损失, 等等)和最大化(NDCG, AUC). 请注意, 如果您指定多个评估指标, 则它们都会用于提前停止.
预测 已经训练或加载的模型都可以对数据集进行预测:
# 7 个样本, 每一个包含 10 个特征 data = https://www.it610.com/article/np.random.rand(7, 10) ypred = bst.predict(data)
如果在训练过程中启用了提前停止, 可以用 bst.best_iteration 从最佳迭代中获得预测结果:
ypred = bst.predict(data, num_iteration=bst.best_iteration)
完整例子:
# coding: utf-8 # pylint: disable = invalid-name, C0111 import json import lightgbm as lgb import pandas as pd from sklearn.metrics import mean_squared_error
# load or create your dataset print('Load data...')
# download data from https://github.com/Microsoft/LightGBM/tree/master/examples/regression df_train = pd.read_csv('../regression/regression.train', header=None, sep='\t') df_test = pd.read_csv('../regression/regression.test', header=None, sep='\t')y_train = df_train[0].values y_test = df_test[0].values X_train = df_train.drop(0, axis=1).values X_test = df_test.drop(0, axis=1).values# create dataset for lightgbm lgb_train = lgb.Dataset(X_train, y_train) lgb_eval = lgb.Dataset(X_test, y_test, reference=lgb_train)# specify your configurations as a dict 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, 'verbose': 0 }print('Start training...') # train gbm = lgb.train(params, lgb_train, num_boost_round=20, valid_sets=lgb_eval, early_stopping_rounds=5)print('Save model...') # save model to file gbm.save_model('model.txt')print('Start predicting...') # predict y_pred = gbm.predict(X_test, num_iteration=gbm.best_iteration) # eval print('The rmse of prediction is:', mean_squared_error(y_test, y_pred) ** 0.5)
推荐阅读
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Python专栏|数据分析的常规流程
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- Python绘制小红花
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- python|8. 文件系统——文件的删除、移动、复制过程以及链接文件
- 爬虫|若想拿下爬虫大单,怎能不会逆向爬虫,价值过万的逆向爬虫教程限时分享
- 分布式|《Python3网络爬虫开发实战(第二版)》内容介绍
- java|微软认真聆听了开源 .NET 开发社区的炮轰( 通过CLI 支持 Hot Reload 功能)