【 SPA 大赛】win10 python3.5.X 下开启 lightgbm 支持

在数据分析的过程中,我们经常需要对数据建模并做预测。GBDT (Gradient Boosting Decision Tree) 是机器学习中一个长盛不衰的模型,其主要思想是利用弱分类器(决策树)迭代训练以得到最优模型,该模型具有训练效果好、不易过拟合等优点。GBDT在工业界应用广泛,通常被用于点击率预测,搜索排序等任务。GBDT也是各种数据挖掘竞赛的致命武器,据统计Kaggle上的比赛有一半以上的冠军方案都是基于GBDT。

GBDT属于集成学习模型,它基本思想是把成百上千个分类准确率较低的树模型组合起来,成为一个准确率很高的模型。这个模型会不断地迭代,每次迭代就生成一颗新的树。然而Boosting分类器的速度实在是太慢了。为了解决这一问题,xgboost应运而生:xgboost最大的特点在于,它能够自动利用CPU的多线程并行计算,同时在算法上加以改进提高了精度。xgboost因为计算速度快,精确度高,在Kaggle和天池等数据挖掘竞赛中的逐渐成为大杀器。但是去年,xgboost迎来了一个重量级挑战者:lightGBM。

lightgbm

去年(2016年)12月,微软开源了LightGBM,地址:https://github.com/Microsoft/LightGBM 。该项目刚开源就被受到热捧:三天之内GitHub上被star了1000+次,fork了200+次;知乎上有近千人关注“如何看待微软开源的LightGBM?”。接下来简单介绍下这个号称“性能超越其他boosting”的学习模型及其编译和安装方法,以及开启python的lightgbm支持。

LightGBM全称:Light Gradient Boosting Machine,是一个基于决策树算法的快速的、分布式的、高性能 gradient boosting(GBDT、GBRT、GBM 或 MART)框架,可被用于排行、分类以及其他许多机器学习任务中。

LightGBM 是一个梯度 boosting 框架,使用基于学习算法的决策树。它是分布式的,具有以下优势:

更快的训练效率 低内存使用 更好的准确率 支持并行学习 可处理大规模数据

在实际使用的过程中,给我一个最直接的感觉就是LightGBM的速度比xgboost快很多,下图是微软官网给出lightgbm和其他学习模型之间的比较:

原理简介

现有的GBDT工具基本都是基于预排序的方法(pre-sorted)的决策树算法(如 xgboost),GBDT 虽然是个强力的模型,但却有着一个致命的缺陷,不能用类似 mini batch 的方式来训练,需要对数据进行无数次的遍历。如果想要速度,就需要把数据都预加载在内存中,但这样数据就会受限于内存的大小;如果想要训练更多的数据,就要使用外存版本的决策树算法。虽然外存算法也有较多优化,SSD 也在普及,但在频繁的 IO 下,速度仍然比较慢。

LightGBM (Light Gradient Boosting Machine)是一个实现GBDT算法的框架,在Histogram算法之上,LightGBM进行进一步的优化。首先它抛弃了大多数GBDT工具使用的按层生长 (level-wise) 的决策树生长策略,而使用了带有深度限制的按叶子生长 (leaf-wise) 算法。

除此之外,LightGBM还对类别特征的支持进行了优化,可以直接输入类别特征,不需要额外的0/1展开,并在决策树算法上增加了类别特征的决策规则。LightGBM的单机版本还有很多其他细节上的优化,比如cache访问优化,多线程优化,稀疏特征优化等,这就让参赛者省去了调参和处理的麻烦。

lightgbm安装教程:

准备:Anaconda 和VS2015。 本教程假设你已经安装好python3.5.x和visual studio2015,然后克隆仓库到本地:

git clone  https://github.com/Microsoft/LightGBM.git

然后根据http://blog.csdn.net/testcs_dn/article/details/54176824 教程编译dll文件和exe文件。注意配置选项一定选好,只有按照教程生成正确的dll和exe文件,才能成功安装lightgbm python包。

然后进入到python-package目录,笔者的目录是:

D:\lightgbm\lightgbm\python-package

然后打开cmd窗口,直接执行命令:

python setup.py install

此时在cmd 输入python,然后import lightgbm as lgb,如果不报错,证明安装成功!

现在最新的lightgbm python包已经更新到了0.2版本,支持sklearn的自动寻优调参,大家可以试下:

import lightgbm as lgb
import pandas as pd
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import GridSearchCV

estimator = lgb.LGBMRegressor(objective='regression',colsample_bytree=0.8,subsample=0.9,subsample_freq=5)

param_grid={
    'learning_rate':[0.01,0.02,0.05,0.1],
    'n_estimators' :[1000,2000,3000,4000,5000],
    'num_leaves':[128,1024,4096]
}

fit_param={'categorical_feature':[0,1,2,3,4,5]}
gbm = GridSearchCV(estimator,param_grid,fit_params=fit_param,n_jobs=5,refit=True)
gbm.fit(X_lgb,y_lgb)

print('.....................................cv results.......................')
print(gbm.cv_results_)

更多教程见:https://github.com/Microsoft/LightGBM/blob/master/examples/python-guide/sklearn_example.py

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

祁旭翔的专栏

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据派THU

三步教你搭建给黑白照片上色的神经网络 !(附代码)

来源:量子位 本文长度为7970字,建议阅读8分钟 本文为你介绍通过搭建神经网络,来给黑白照片上色的教程。 深度学习云平台FloydHub最近在官方博客上发了一...

2779
来自专栏机器之心

教程 | 如何快速训练免费的文本生成神经网络

2095
来自专栏PaddlePaddle

【序列到序列学习】生成古诗词

生成古诗词 序列到序列学习实现两个甚至是多个不定长模型之间的映射,有着广泛的应用,包括:机器翻译、智能对话与问答、广告创意语料生成、自动编码(如金融画像编码)...

2786
来自专栏新智元

猫狗大战识别准确率直冲 Kaggle Top 2%,手把手教你在 Keras 搭建深度 CNN

猫狗大战 数据集来自 kaggle 上的一个竞赛:Dogs vs. Cats,训练集有25000张,猫狗各占一半。测试集12500张,没有标定是猫还是狗。 ?...

5997
来自专栏机器之心

资源 | 如何通过CRF-RNN模型实现图像语义分割任务

选自GitHub 作者:Shuai Zheng等 机器之心编译 参与:蒋思源 本 Github 项目通过结合 CNN 和 CRF-RNN 模型实现图像的语义分割...

49215
来自专栏机器之心

资源 | NIPS 2017 Spotlight论文Bayesian GAN的TensorFlow实现

3178
来自专栏杨熹的专栏

详解 TensorBoard-如何调参

什么是 TensorBoard TensorBoard 是 TensorFlow 上一个非常酷的功能,我们都知道神经网络很多时候就像是个黑盒子,里面到底是什么样...

4648
来自专栏专知

【前沿】NIPS2017贝叶斯生成对抗网络TensorFlow实现(附GAN资料下载)

导读 今年五月份康奈尔大学的 Andrew Gordon Wilson 和 Permutation Venture 的 Yunus Saatchi 提出了一个贝...

4148
来自专栏PPV课数据科学社区

R语言中不能进行深度学习?

摘要: R语言现在能也进行深度学习了,而且和python一样好,快来试一试吧。 众所周知,R语言是统计分析最好用的语言。但在Keras和TensorFlow的帮...

4039
来自专栏IT派

六行代码!完成你的第一个机器学习算法

Google出了一个面向新手的机器学习教程,每集六七分钟,言简意赅,只掌握最基础的Python语法知识,便可以实现一些基本的机器学习算法。接下来我准备分几次...

3416

扫码关注云+社区