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

相关文章

来自专栏Coding迪斯尼

神经网络实战:快速构建一个基于神经网络的手写数字识别系统

13420
来自专栏机器之心

ICLR 2018 | 彩云科技提出结合组合子抽象的神经编程器-解释器,提升通用性和可学习性

35690
来自专栏鸿的学习笔记

写给开发者的机器学习指南(七)

Classifying email as spam or ham (NaiveBayes)

13110
来自专栏AI研习社

阿里将 TVM 融入 TensorFlow,在 GPU 上实现全面提速

AI 研习社按,日前,阿里机器翻译团队和 PAI 团队发表博文,阐述将 TVM 引入 TensorFlow,可以带来至少 13 倍的 batch 矩阵相乘(ma...

21520
来自专栏ATYUN订阅号

数据清理的简要介绍

清理数据应该是数据科学(DS)或者机器学习(ML)工作流程的第一步。如果数据没有清理干净,你将很难在探索中的看到实际重要的部分。一旦你去训练你的ML模型,他们也...

15630
来自专栏机器之心

学界 | MIT与微软联合论文提出深度API编程器:可通过API调用合成新程序

选自arXiv.org 机器之心编译 参与:吴攀 让机器学会自动编程一直以来都是人工智能研究界所追求的一个重要目标,甚至被一些人认为是实现真正通用的人工智能...

31450
来自专栏人工智能LeadAI

如何使用sklearn进行数据挖掘

1.1、数据挖掘的步骤 数据挖掘通常包括数据采集,数据分析,特征工程,训练模型,模型评估等步骤。使用sklearn工具可以方便地进行特征工程和模型训练工作,在《...

30690
来自专栏数据科学与人工智能

【Python环境】R vs Python:硬碰硬的数据分析

我们将在已有的数十篇从主观角度对比Python和R的文章中加入自己的观点,但是这篇文章旨在更客观地看待这两门语言。我们会平行使用Python和R分析一个数据集,...

31490
来自专栏游戏开发那些事

【小白学游戏常用算法】二、A*启发式搜索算法

  在上一篇博客中,我们一起学习了随机迷宫算法,在本篇博客中,我们将一起了解一下寻路算法中常用的A*算法。

18820
来自专栏机器学习算法工程师

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

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

19430

扫码关注云+社区

领取腾讯云代金券