当前位置:首页>新闻 > >正文

快资讯:【机器学习】集成学习代码练习(随机森林、GBDT、XGBoost、LightGBM等)

  • 2022-12-29 16:23:24来源:

本文是中国大学慕课《机器学习》的“集成学习”章节的课后代码。


【资料图】

课程地址:

https://www.icourse163.org/course/WZU-1464096179

课程完整代码:

https://github.com/fengdu78/WZU-machine-learning-course

代码修改并注释:黄海广,haiguang2000@wzu.edu.cn

importwarningswarnings.filterwarnings("ignore")importpandasaspdfromsklearn.model_selectionimporttrain_test_split

生成数据

生成12000行的数据,训练集和测试集按照3:1划分

fromsklearn.datasetsimportmake_hastie_10_2data,target=make_hastie_10_2()

X_train,X_test,y_train,y_test=train_test_split(data,target,random_state=123)X_train.shape,X_test.shape

((9000, 10), (3000, 10))

模型对比

对比六大模型,都使用默认参数

fromsklearn.linear_modelimportLogisticRegressionfromsklearn.ensembleimportRandomForestClassifierfromsklearn.ensembleimportAdaBoostClassifierfromsklearn.ensembleimportGradientBoostingClassifierfromxgboostimportXGBClassifierfromlightgbmimportLGBMClassifierfromsklearn.model_selectionimportcross_val_scoreimporttimeclf1=LogisticRegression()clf2=RandomForestClassifier()clf3=AdaBoostClassifier()clf4=GradientBoostingClassifier()clf5=XGBClassifier()clf6=LGBMClassifier()forclf,labelinzip([clf1,clf2,clf3,clf4,clf5,clf6],["LogisticRegression","RandomForest","AdaBoost","GBDT","XGBoost","LightGBM"]):start=time.time()scores=cross_val_score(clf,X_train,y_train,scoring="accuracy",cv=5)end=time.time()running_time=end-startprint("Accuracy:%0.8f (+/-%0.2f),耗时%0.2f秒。模型名称[%s]"%(scores.mean(),scores.std(),running_time,label))

Accuracy: 0.47488889 (+/- 0.00),耗时0.04秒。模型名称[Logistic Regression]Accuracy: 0.88966667 (+/- 0.01),耗时16.34秒。模型名称[Random Forest]Accuracy: 0.88311111 (+/- 0.00),耗时3.39秒。模型名称[AdaBoost]Accuracy: 0.91388889 (+/- 0.01),耗时13.14秒。模型名称[GBDT]Accuracy: 0.92977778 (+/- 0.00),耗时3.60秒。模型名称[XGBoost]Accuracy: 0.93188889 (+/- 0.01),耗时0.58秒。模型名称[LightGBM]

对比了六大模型,可以看出,逻辑回归速度最快,但准确率最低。而LightGBM,速度快,而且准确率最高,所以,现在处理结构化数据的时候,大部分都是用LightGBM算法。

XGBoost的使用 1.原生XGBoost的使用

importxgboostasxgb#记录程序运行时间importtimestart_time=time.time()#xgb矩阵赋值xgb_train=xgb.DMatrix(X_train,y_train)xgb_test=xgb.DMatrix(X_test,label=y_test)##参数params={"booster":"gbtree",#"silent":1,#设置成1则没有运行信息输出,最好是设置为0.#"nthread":7,#cpu线程数默认最大"eta":0.007,#如同学习率"min_child_weight":3,#这个参数默认是1,是每个叶子里面h的和至少是多少,对正负样本不均衡时的0-1分类而言#,假设 h 在0.01 附近,min_child_weight 为 1 意味着叶子节点中最少需要包含 100个样本。#这个参数非常影响结果,控制叶子节点中二阶导的和的最小值,该参数值越小,越容易 overfitting。"max_depth":6,#构建树的深度,越大越容易过拟合"gamma":0.1,#树的叶子节点上作进一步分区所需的最小损失减少,越大越保守,一般0.1、0.2这样子。"subsample":0.7,#随机采样训练样本"colsample_bytree":0.7,#生成树时进行的列采样"lambda":2,#控制模型复杂度的权重值的L2正则化项参数,参数越大,模型越不容易过拟合。#"alpha":0,#L1正则项参数#"scale_pos_weight":1, #如果取值大于0的话,在类别样本不平衡的情况下有助于快速收敛。#"objective":"multi:softmax",#多分类的问题#"num_class":10,#类别数,多分类与multisoftmax并用"seed":1000,#随机种子#"eval_metric":"auc"}plst=list(params.items())num_rounds=500#迭代次数watchlist=[(xgb_train,"train"),(xgb_test,"val")]

#训练模型并保存#early_stopping_rounds当设置的迭代次数较大时,early_stopping_rounds可在一定的迭代次数内准确率没有提升就停止训练model=xgb.train(plst,xgb_train,num_rounds,watchlist,early_stopping_rounds=100,)#model.save_model("./model/xgb.model")#用于存储训练出的模型print("bestbest_ntree_limit",model.best_ntree_limit)y_pred=model.predict(xgb_test,ntree_limit=model.best_ntree_limit)print("error=%f"%(sum(1foriinrange(len(y_pred))ifint(y_pred[i]>0.5)!=y_test[i])/float(len(y_pred))))#输出运行时长cost_time=time.time()-start_timeprint("xgboostsuccess!","\n","costtime:",cost_time,"(s)......")

[0]train-rmse:1.11000val-rmse:1.10422[1]train-rmse:1.10734val-rmse:1.10182[2]train-rmse:1.10465val-rmse:1.09932[3]train-rmse:1.10207val-rmse:1.09694

……

[497]train-rmse:0.62135val-rmse:0.68680[498]train-rmse:0.62096val-rmse:0.68650[499]train-rmse:0.62056val-rmse:0.68624best best_ntree_limit 500error=0.826667xgboost success!  cost time: 3.5742645263671875 (s)......

2.使用scikit-learn接口

会改变的函数名是:

eta -> learning_rate

lambda -> reg_lambda

alpha -> reg_alpha

fromsklearn.model_selectionimporttrain_test_splitfromsklearnimportmetricsfromxgboostimportXGBClassifierclf=XGBClassifier(# silent=0, #设置成1则没有运行信息输出,最好是设置为0.是否在运行升级时打印消息。#nthread=4,#cpu线程数默认最大learning_rate=0.3,#如同学习率min_child_weight=1,#这个参数默认是1,是每个叶子里面h的和至少是多少,对正负样本不均衡时的0-1分类而言#,假设 h 在0.01 附近,min_child_weight 为 1 意味着叶子节点中最少需要包含 100个样本。#这个参数非常影响结果,控制叶子节点中二阶导的和的最小值,该参数值越小,越容易 overfitting。max_depth=6,#构建树的深度,越大越容易过拟合gamma=0,#树的叶子节点上作进一步分区所需的最小损失减少,越大越保守,一般0.1、0.2这样子。subsample=1,#随机采样训练样本训练实例的子采样比max_delta_step=0,#最大增量步长,我们允许每个树的权重估计。colsample_bytree=1,#生成树时进行的列采样reg_lambda=1,#控制模型复杂度的权重值的L2正则化项参数,参数越大,模型越不容易过拟合。#reg_alpha=0,#L1正则项参数#scale_pos_weight=1, #如果取值大于0的话,在类别样本不平衡的情况下有助于快速收敛。平衡正负权重#objective="multi:softmax",#多分类的问题指定学习任务和相应的学习目标#num_class=10,#类别数,多分类与multisoftmax并用n_estimators=100,#树的个数seed=1000#随机种子#eval_metric="auc")clf.fit(X_train,y_train)y_true,y_pred=y_test,clf.predict(X_test)print("Accuracy:%.4g"%metrics.accuracy_score(y_true,y_pred))

Accuracy : 0.936

LIghtGBM的使用 1.原生接口

importlightgbmaslgbfromsklearn.metricsimportmean_squared_error#加载你的数据#print("Loaddata...")#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#创建成lgb特征的数据集格式lgb_train=lgb.Dataset(X_train,y_train)#将数据保存到LightGBM二进制文件将使加载更快lgb_eval=lgb.Dataset(X_test,y_test,reference=lgb_train)#创建验证数据#将参数写成字典下形式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,#k意味着每k次迭代执行bagging"verbose":1#<0显示致命的,=0显示错误(警告),>0显示信息}print("Starttraining...")#训练cvandtraingbm=lgb.train(params,lgb_train,num_boost_round=500,valid_sets=lgb_eval,early_stopping_rounds=5)#训练数据需要参数列表和数据集print("Savemodel...")gbm.save_model("model.txt")#训练后保存模型到文件print("Startpredicting...")#预测数据集y_pred=gbm.predict(X_test,num_iteration=gbm.best_iteration)#如果在训练期间启用了早期停止,可以通过best_iteration方式从最佳迭代中获得预测#评估模型print("error=%f"%(sum(1foriinrange(len(y_pred))ifint(y_pred[i]>0.5)!=y_test[i])/float(len(y_pred))))

Start training...[LightGBM] [Warning] Auto-choosing col-wise multi-threading, the overhead of testing was 0.000448 seconds.You can set `force_col_wise=true` to remove the overhead.[LightGBM] [Info] Total Bins 2550[LightGBM] [Info] Number of data points in the train set: 9000, number of used features: 10[LightGBM] [Info] Start training from score 0.012000[1]valid_0"s auc: 0.814399valid_0"s l2: 0.965563Training until validation scores don"t improve for 5 rounds[2]valid_0"s auc: 0.84729valid_0"s l2: 0.934647[3]valid_0"s auc: 0.872805valid_0"s l2: 0.905265[4]valid_0"s auc: 0.884117valid_0"s l2: 0.877875[5]valid_0"s auc: 0.895115valid_0"s l2: 0.852189

……

[191]valid_0"s auc: 0.982783valid_0"s l2: 0.319851[192]valid_0"s auc: 0.982751valid_0"s l2: 0.319971[193]valid_0"s auc: 0.982685valid_0"s l2: 0.320043Early stopping, best iteration is:[188]valid_0"s auc: 0.982794valid_0"s l2: 0.319746Save model...Start predicting...error=0.664000

2.scikit-learn接口

fromsklearnimportmetricsfromlightgbmimportLGBMClassifierclf=LGBMClassifier(boosting_type="gbdt",#提升树的类型gbdt,dart,goss,rfnum_leaves=31,#树的最大叶子数,对比xgboost一般为2^(max_depth)max_depth=-1,#最大树的深度learning_rate=0.1,#学习率n_estimators=100,#拟合的树的棵树,相当于训练轮数subsample_for_bin=200000,objective=None,class_weight=None,min_split_gain=0.0,#最小分割增益min_child_weight=0.001,#分支结点的最小权重min_child_samples=20,subsample=1.0,#训练样本采样率行subsample_freq=0,#子样本频率colsample_bytree=1.0,#训练特征采样率列reg_alpha=0.0,#L1正则化系数reg_lambda=0.0,#L2正则化系数random_state=None,n_jobs=-1,silent=True,)clf.fit(X_train,y_train,eval_metric="auc")#设置验证集合verbose=False不打印过程clf.fit(X_train,y_train)y_true,y_pred=y_test,clf.predict(X_test)print("Accuracy:%.4g"%metrics.accuracy_score(y_true,y_pred))

Accuracy : 0.927

参考

1.https://xgboost.readthedocs.io/

2.https://lightgbm.readthedocs.io/

3.https://blog.csdn.net/q383700092/article/details/53763328?locationNum=9&fps=1

往期精彩回顾适合初学者入门人工智能的路线及资料下载(图文+视频)机器学习入门系列下载机器学习及深度学习笔记等资料打印《统计学习方法》的代码复现专辑机器学习交流qq群955171419,加入微信群请扫码

标签: 机器学习 训练样本 信息输出

延伸阅读

推荐阅读

新华全媒+丨中风患者防疫需要注意什么?|当前消息

1月9日,中南大学湘雅医院神经内科主任医师夏健在给患者提供诊疗服务。(受访者供图)新华社长沙1月10日电中风患者(脑血管

卡片放大播放效果实现总结,不同元素间的放大过渡效果如何实现?|世界今头条

背景最近一段时间做了几个需求,其中涉及的素材列表展示,需要实现类似下方图片中的动效,暂且称之为【卡片放大播放动效】,具体细节如下:初

来服务网,让家电焕然一新-世界新视野

但是随着长时间使用,家电里的灰尘、细菌、异味都影响了使用感。长久使用后的微波炉,内壁的油渍油垢清理让人烦恼不已。现金陵晚报旗下服务网

2021重庆玛雅海滩水公园端午节游玩攻略(优惠门票、活动)

重庆玛雅海滩水公园开园时间:2021年6月13日地址:重庆市两江新区礼嘉镇金渝大道29号开放时间:10:30~18:30★最新优惠门票1、水乐园早鸟票门票价格:

南农大教授苦心研究不起坨的玉米糊拼多多助力科技美味从实验室走向大市场

玉米或许是粮食中最平平无奇的一种,生活中无处不在。而玉米糊更是很多人儿时的记忆,老少皆宜。如今,因润肠通便、健胃和中、有助降低胆固醇

当前报道:北京中日创新合作示范区累计新增注册主体1973家

(徐婧杜燕)记者5日从北京市大兴区获悉,截至2022年底,北京中日创新合作示范区(简称“中日示范区”)累计新增注册主体1973家,其中外资企业62家

江苏省泰州市市场监管局公示70批次糕点监督抽检合格信息_天天播报

中国质量新闻网讯近日,江苏省泰州市市场监管局公示2022年第十七期食品安全监督抽检结果,涉及70批次糕点监督抽检合格信

聘请律师需要注意的事项有哪些_今日快看

(1)与律师所在的律师事务所签订律师服务合同;(2)根据律师服务合同的约定向律师事务所支付律师费,并由律师事务所出具税务发票;(3)根据

马前炮,第2波抄底成功!涨婷了,坚持就是胜利

上周五空仓说过了,那是因为个股集体跌停和大跌洗盘,根据事不过三的原则,洗盘最多3天,所以今天早上就抄底入场了,因为好股都是早上涨的,最

每日短讯:【早知道】2023年对月销售额10万元以下的增值税小规模纳税人免征增值税;央行上海总部:推动上海房地产市场平稳健康发展

证券时报e公司讯,摘要:两部门:2023年对月销售额10万元以下的增值税小规模纳税人免征增值税。央行上海总部:推动上海房地产市场平稳健康发展

全球热点评!民法典上还贷期间什么时候开始计算诉讼时效

借款诉讼时效:(1)约定了还款期限的借款,诉讼时效从还款期限届满的次日起计算满3年;(2)没有约定还款期的借款:根据相关法律规定,对于借款期

2023年1月9日全国各地最新大米价格行情走势分析 世界观焦点

中商情报网讯:最新数据显示:1月8日,全国粳米当日均价为5 22元 公斤,籼米当日均价为4 88元 公斤。其中,粳米价格

宁夏交通违章处理需要哪些材料 世界观天下

1、车辆行驶证原件或复印件;2、车辆驾驶人驾驶证原件;3、车辆驾驶人身份证原件;4、现金和银行卡。交通违章行为在事故发生中所起作用的大小,主

顺丰押下四个亿,春节放手一搏

春节不打烊,顺丰发四亿元补贴员工。出品|电商行业作者|航叔顺丰快递春节不打烊春节将至,顺丰又有大动作。日前,顺丰宣布今年将持续保障春节

简讯:光伏企业在这里扎下根(经济聚焦)

核心阅读围绕重点产业,青海西宁推行“链长制+包保制”,以精准招商和靠前服务,为企业提供全方位保障,助力企业生产更稳、产业链条更强。...

交易猫怎么发货 交易猫如何发货呢

1、客户下了订单后,客服的后台会有通知,接到通知后,客服会记录下来客户的联系方式及地址,以及客人订购的商品。2、整理好了客人订购的商品

雷柏科技(002577.SZ):控股股东减持完毕 累计减持1%股份_要闻速递

格隆汇1月5日丨雷柏科技公布,公司控股股东香港热键于2022年12月14日至2023年01月04日期间通过集中竞价交易的方式累计减持公司无限售流通股282

一斤牛肉半斤菜要多少面粉? 每日关注

1000克面粉。1 将牛里脊剁成牛肉末,备用,芹菜用开水里焯一下,切成芹菜末备用。将牛肉末、芹菜末、酱油、鸡蛋清和牛肉味浓汤宝放在搅拌盆里

环球热资讯!使用Python批量筛选上千个Excel文件中的某一行数据并另存为新Excel文件(上篇)

点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤离离原上草,一岁一枯荣。大家好...

东华能源(002221):第六届董事会第十一次会议决议-天天观焦点

证券代码:002221证券简称:东华能源公告编号:2023-001东华能源股份有限公司第六届董事会第十一次会议决议公

环球百事通!2023年投资建议:坚持看好大金融、制造业,收复3500点,美股反弹

即将和2022年挥手告别,回顾这一年的投资历程,有得有失,还算满意。总体小亏损,正所谓知足常乐,那就展望迎接2023年吧。坚定看好大金融和制

天天最新:南京新冠康复专项体检医院+预约方式

为了帮助市民综合评估身体恢复情况,排查健康隐患,目前已有多家知名医院及连锁品牌体检机构推出新冠康复专项体检服务,对呼吸系统、消化系统

家里的衣柜是定制好,还是自己买板子请木工做好?今天终于明白了 通讯

大家好我是小雷,今天跟大家聊聊家里面的衣柜定制好,还是自己买板材请木工做好,相信这个也是大部分朋友在装修的时候最纠结的一个问题,今天

“最帅中国演员”榜单出炉,杨洋、吴磊上榜前五,肖战拿下首位! 环球速看料

在娱乐圈有各种各样的榜单,不过其中也有很多属于是“野鸡”榜单,没有什么权威性。当然也有一些榜单是大家评选出来的,大家都比较认可。而...

阳光乳业:公司没有婴幼儿乳粉产品|今日热讯

阳光乳业(001318)01月05日在投资者关系平台上答复了投资者关心的问题。

【2023开门红】首个交易日A股超4200家个股上涨 沪指重返3100点

点击蓝字关注南方财经报道导读:1月3日,A股迎来了2023年的首个交易日。在交易日当天,A股走出震荡回升的态势,202

世界观天下!供需整体呈现两弱状态 PTA价格跟随油价波动

来源:宝城期货作者:宝城期货研报正文核心观点:【PTA】今日(1月3日)PTA主力合约PTA2305最终收盘于5530元 吨,较上一交易日收盘价下跌10元 吨,

天天速读:未来一周气温回升 雾霾重森林火险等级升高

未来一周气温回升雾霾重森林火险等级升高

世界热文:2023年以太坊生态5大预测;平台和钱包APP的安全性 | 区块客周刊

你已选中了添加链接的内容2023 1 2第151期本期关键字Bitkeep应用为官方正版资产仍然被盗;全球主要央行在2022年累计加息2700个基点;做慈善远

猜您喜欢

Copyright ©  2015-2022 时代服装网版权所有  备案号:   联系邮箱: 514 676 113@qq.com