【 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 条评论
登录 后参与评论

相关文章

来自专栏闪电gogogo的专栏

IEEE Trans 2009 Stagewise Weak Gradient Pursuits论文学习

论文在第二部分先提出了贪婪算法框架,如下截图所示: ? 接着根据原子选择的方法不同,提出了SWOMP(分段弱正交匹配追踪)算法,以下部分为转载《压缩感知重构算法...

3198
来自专栏数据小魔方

标注特定日期的折线图

今天给大家分享的标注特定日期的折线图! ▽▼▽ 有时候我们拿到的数据存在特定日气的波动,比如股市、衍生品等指数会存在星期(周末)的波动,如果能够在图表中标注出特...

3377
来自专栏机器学习算法全栈工程师

LightGBM大战XGBoost,谁将夺得桂冠?

如果你是一个机器学习社区的活跃成员,你一定知道 **提升机器**(Boosting Machine)以及它们的能力。提升机器从AdaBoost发展到目前最流行的...

1233
来自专栏人工智能头条

用机器学习识别随机生成的C&C域名

2083
来自专栏深度学习计算机视觉

opencv的初步使用(高斯模糊、边缘检测、灰度化、二值化、闭运算、绘制边缘)

前提:已经配好了opencv+Qt 这里只讲如何使用api,不怎么讲算法原理 既然要用opencv的库,首先把相应的头文件导进去吧 #include <ope...

3305
来自专栏人工智能

漫谈神经语言模型之中文输入法

漫谈神经语言模型之中文输入法 Speech Valley是原先的github项目Automatic Speech Recognition的正式库名称,之所以取名...

24310
来自专栏wym

HDU 6108 小C的倍数问题

http://acm.hdu.edu.cn/showproblem.php?pid=6108

483
来自专栏jeremy的技术点滴

tensorflow学习笔记_01

2877
来自专栏小鹏的专栏

可视化Google Inception V3模型的网络结构

深度学习涉及到图像就少不了CNN模型,前面我做过几个关于图像的练习,使用的CNN网络也不够”Deeper”。我在做对象检测练习( Object Detect...

5088
来自专栏奇点大数据

阿里巴巴最新实践:TVM+TensorFlow优化GPU上的神经机器翻译

本文是阿里巴巴 PAI-Blade 团队发表于 TVM 的最新博文,文中阐述了如何将 TVM 引入 TensorFlow,使 TensorFlow 中的 bat...

3625

扫码关注云+社区