python程序设计教程视频,用python做预测
简介LightGBM是一个基于决策树算法的快速、分布式、高性能梯度提升框架。它可以用于排序、分类、回归和许多其他机器学习任务。
在竞赛题中,我们知道XGBoost算法非常受欢迎,是一个优秀的拉取框架。但是在使用的过程中,它的训练时间很长,内存占用量很大。2017年1月,微软在GitHub上开放了新的助推工具——light GBM。在不降低精度的前提下,速度提高10倍左右,占用内存减少3倍左右。因为它是基于决策树算法的,所以它使用最优dydld策略来分裂叶子节点。而其他提升算法一般用深度方向或水平智慧代替树叶,这是明智的。因此,在LightGBM算法中,当它增长到同一个叶节点时,dydld算法比horizontal -wise算法减少了更多的损失。因此,它导致更高的精度,这是任何其他现有的提升算法都无法实现的。同时,它的速度令人震惊,这也是为什么算法被命名为灯。
2014年3月,XGBOOST作为一个研究项目被wwdxt首次提出。
(XGBOOST在我的另一个博客:https://blog.csdn.net/huacha__/article/details/81029680.
2017年1月,微软发布了第一个稳定版LightGBM。
在微软亚洲研究院AI头条分享的“LightGBM简介”中,机器学习组首席研究员hsjdbks提到,微软DMTK团队在github上开放LightGBM后,表现优于其他决策树工具,三天内造了1000颗星,穿越了200多次。知乎近千人关注“如何看待微软开源LightGBM?”问题,评价为“速度惊人”、“很有启发”、“支持分布式”、“代码清晰易懂”、“内存占用小”等。以下是微软提到的LightGBM的优点,以及项目的开源地址。
科普链接:如何玩轻GBM https://v.qq.com/x/page/k0362z6lqix.html
目录
序
I .“我们在LightGBM做什么?”
第二,不同数据集的比较
三、LightGBM技术的细节
1.直方图优化
2.内存优化
3.深度受限的节点扩展方法
4.直方图差异优化
5.顺序存取梯度
6.支持类别特征。
7.支持并行学习
第四,MacOS安装LightGBM
5.用python实现LightGBM算法
I .“我们在LightGBM做什么?”下表给出了XGBoost和LightGBM之间更详细的性能比较,包括树的增长模式。LightGBM是直接选择获得利润最多的节点进行扩展,而XGBoost是通过层增长来完成的,这样LightGBM就可以用更少的计算成本来构建我们需要的决策树。当然,在这个算法中,我们还需要控制树的深度和每个叶子节点的最小数据量,以减少过拟合。
稍微翻译一下,有问题指出来。
XGBoostLightGBM树生长算法按层生长的方式
它有利于工程优化,但对学习模型效率不高。
选择最大收益的节点直接,用较少的计算代价选择我们需要的决策树。
控制树的深度和每个叶节点中的数据量可以减少过拟合。
直方图算法:将特征值划分成许多小圆柱体,然后在圆柱体上搜索分裂点,降低了计算成本和存储成本,得到了更好的性能。此外,数据结构的改变使得细节的改变在内存开销方面具有不同的效率。计算增益数据特性除以8个字节和1个字节,容器特性缓存优化,在higgs数据集上没有40%的加速,在expo数据集上没有快8倍。二、不同数据集上的比较,Higgs和Expo是分类数据,yahoo ltr和msltr是分类数据,其中LightGBM的准确率更好,内存占用更强。
准确率
内存使用
与计算速度相比,完成同样的训练量XGBoost通常要比LightGBM多几倍的时间,在higgs数据集上两者相差15倍以上。
三。LightGBM 1的详细信息。直方图优化XGBoost采用预排序的方法。在计算过程中,根据值的排序逐一计算分割收益。这种算法可以准确地找到最佳分割值,但在成本相同的情况下没有很好地推广。
在LightGBM中,没有使用传统的预排序思想,而是将这些精确且连续的值中的每一个划分为一系列离散的域,即线轴。以浮点数据为例,将一个区间的值作为一个柱面,然后用精度单位做这些柱面的直方图。这样数据的表达变得更加简化,内存的使用减少,直方图带来一定的正则化效果,可以使我们的模型避免过拟合,具有更好的泛化能力。
看直方图优化的细节。
大家可以看到,“直方图”是按照健康小鼠进行索引的,不需要按照每个“特征”进行排序,也不需要逐个比较不同“特征”的值,大大减少了计算量。
2.内存优化。当我们用健康小鼠来描述数据特征时带来的变化:第一,不需要像预排序算法那样存储每一个排序后的数据序列,就是下图的灰表。在LightGBM中,这部分的计算成本为0;其次,一般健康的老鼠会被控制在一个比较小的范围内,所以我们可以用更小的内存来存储。
3.深度受限的节点扩展方法LightGBM使用带深度限制的节点展开方法(Leaf-wise)来提高模型精度,这是比XGBoost中的Level-wise更高效的方法。它可以减少训练误差,获得更好的精度。但单纯使用Leaf-wise可能会导致树很深,在小数据集上可能会造成过拟合,所以在Leaf-wise以上增加了一个深度限制。
4.直方图差值优化直方图差值优化可以达到两倍的速度,可以观察到一个叶子节点上的直方图,可以通过从其父节点的直方图中减去其兄弟节点的直方图得到。据此,我们可以用较小的数据量构造叶节点的直方图,然后利用直方图差值得到较大数据量的叶节点的直方图,从而达到加速的效果。
5.顺序访问梯度预排序算法中有两个频繁操作会导致cache-miss,即缓存消失(对速度影响很大,尤其是数据量大的时候,顺序访问比随机访问多速度快4倍以上)。
获取梯度:计算增益时需要梯度。对于不同的特征,访问渐变的顺序不同,对索引表的访问是随机的。预排序算法使用行号和叶节点号索引表,防止数据分段时所有特征都被分段。与访问梯度一样,所有要素都通过访问该索引表进行索引。这两个操作都是随机访问,会给系统性能带来很大的降级。
GBM使用的直方图算法可以很好地解决这类问题。首先。对于渐变访问,由于不需要对特征进行排序,所有特征的访问方式都是一样的,所以只需要对渐变访问的顺序进行重新排序,所有特征都可以连续访问渐变。而且直方图算法不需要把数据id到叶子节点号(不需要这个索引表,也不存在这个缓存消失问题)
6.支持类别功能。传统的机器学习一般无法支持类别特征的直接输入。需要先转化成多维的0-1特征,在空间和时间上都是低效的。通过改变决策树算法的决策规则,GBM直接支持类别特征,无需变换,提高了近8倍的速度。
7.支持并行学习。LightGBM天生支持并行学习。目前支持特征并行(Featrue Parallelization)和数据并行(Data Parallelization),另一个是基于投票的数据并行(Voting Parallelization)。
特征并行的主要思想是分别在不同机器上和不同的特征集合上寻找最佳分割点,然后在机器之间同步最佳分割点。数据并行是让不同的机器局部构造直方图,然后全局合并,最后在合并的直方图上面找到最优分割点。GBM针对这两种并行方法进行了优化。
特征并行算法,通过在本地保存所有数据来避免数据分割结果的通信。在数据并行中,使用Reduce scatter将直方图合并的任务分配到不同的机器上,减少了通信和计算,使用直方图差分进一步减少一半的流量。基于投票的数据并行(Voting Parallelization)进一步优化了数据并行中的通信开销,使得通信开销保持在一个恒定的水平。当数据量较大时,使用投票并行可以获得非常好的加速效果。下图更好地说明了上述三种并行学习的整体过程:
直方图合并时通信开销比较大,基于投票的数据并行可以很好地解决这个问题。
四、MacOS安装LightGBM #先安装cmake和gcc,直接跳过安装的前两步:brew install cmake brew install gcc git clone-recursive https://github.com/Microsoft/LightGBM CD light GBM #比cmake早一步添加环境变量export cxx=g-7cc=gcc-7mkdirbuild;构建cmake.make-j4cd./python-package sudo python setup . py install对其进行测试:
你完了!
值得注意的是,pip列表中没有lightgbm,所以以后使用lightgbm时需要在特定的文件夹中运行。我的地址是:
/Users/fengxianhe/light GBM/python-package
5.用python实现lightgbm算法为了演示LightGBM在python中的用法,这段代码以sklearn包中包含的iris数据集为例,使用LightGBM算法实现了iris物种的分类任务。
#编码:utf-8 # pylint:disable=invalid-name,C0111#函数的更多使用方法参见LightGBM官方文档:http://轻GBM。阅读文档。io/en/latest/Python-intro。html导入JSON导入light GBM as lgbi导入熊猫as PD来自sk learn。指标从sk学习导入均方误差。数据集从sk learn导入load _ iris。模型_选择从sk学习导入训练_测试_分割。数据集导入make _ class ification iris=load _ iris()#载入鸢尾花数据集数据=虹膜。数据目标=iris。目标X _ train,X_test,y_train,y_test=train_test_split(data,target,test_size=0.2)#加载你的数据#打印(加载数据.)# 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].值# y_test=df_test[0].值# X_train=df_train.drop(0,轴=1)。values# X_test=df_test.drop(0,轴=1)。价值观#创建成长滩特征的数据集格式lgb_train=lgb .数据集(十火车,y火车)#将数据保存到LightGBM二进制文件将使加载更快lgb_eval=lgb .数据集(X _测试,y _测试,参考=lgb_train) #创建验证数据# 将参数写成字典下形式params={ task: train , boosting_type: gbdt ,#设置提升类型目标:回归,#目标函数指标:{l2 , auc},#评估函数num_leaves: 31,#叶子节点数 learning_rate: 0.05,#学习速率 feature_fraction: 0.9,#建树的特征选择比例 bagging_fraction: 0.8,#建树的样本采样比例bagging_freq: 5,# k意味着每k次迭代执行打包"详细":1 # 0显示致命的,=0 显示错误(警告), 0 显示信息}打印(开始训练.)# 训练简历和traingbm=lgb.train(params,lgb_train,num_boost_round=20,valid_sets=lgb_eval,early_stopping_rounds=5) #训练数据需要参数列表和数据集打印(保存模型.)gbm.save_model(model.txt) #训练后保存模型到文件打印(开始预测.)# 预测数据集y_pred=gbm.predict(X_test,num _ iteration=GBM。最佳迭代)#如果在训练期间启用了早期停止,可以通过最佳迭代方式从最佳迭代中获得预测# 评估模型打印(预测的均方根误差(root-mean-square error)为:,均方误差(y测试,y预测)** 0.5) #计算真实值和预测值之间的均方根误差输出结果:
可以看到预测值和真实值之间的均方根误差为0.722972。
定位三边怎么加边框
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。