品牌 资讯 搭配 材料 时尚 热点 行业 首饰 玉石 行情

【机器学习】集成学习代码练习(随机森林、GBDT、XGBoost、LightGBM等)_热头条

2022-12-28 16:43:17 来源:

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

课程地址:


(资料图)

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,加入微信群请扫码

标签:

(责任编辑:)

相关文章

招商蛇口(001979)12月29日主力资金净卖出1643.14万元_焦点关注

​截至2022年12月29日收盘,招商蛇口(001979)报收于12 7元,下跌2 61%,换手率0 71%,成交量54 61万手,成交额6 92亿元。

2022-12-30 09:02:17

快e贷网贷逾期32年还不起征信有什么影响 环球观点

​网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天后上报给征信机构,因为有些借贷机构可

2022-12-30 00:40:58

厦门平价菜超市名单一览 环球速看

​厦门启动2023年第一期政府差价补贴销售平价农副产品通知原文经研究,定于2023年1月1日起,启动平价商店蔬菜、猪肉差价补贴销售农副产品机制。

2022-12-29 19:11:52

鸟瞰部分冻结的尼亚加拉大瀑布 热议

​当地时间12月27日,美国纽约州,尼亚加拉大瀑布上出现彩虹。极端寒冷天气导致瀑布部分冻结。当地时间12月27日,美国纽约州,极端寒冷天气导致

2022-12-29 17:10:41

东莞海王星辰药店可以买到血氧仪吗?-天天快看点

​东莞海王星辰药房可以买血氧仪吗?截至12月29日10:00,根据海王星辰线上商城搜索结果,有多款血氧仪供市民选购!购买入口:点击进入在搜索栏搜

2022-12-29 15:24:56

ZOL科技早餐:微信号可认为是公民个人信息,iPhone 14直降900元|当前热讯

​12月29日晨,为您推送的科技消息1京东放出年货节红包,iPhone14直降900元京东年货节将于12月29日晚八点开启,iPhone14Plus限时优惠1000元;iPh

2022-12-29 13:02:47

大为股份涨停,市值38.6亿,公司拟220亿元投建含锂矿产资源综合利用及锂电池产业链等项目-全球快播

​金融界12月29日消息今日大为股份(行情002213,诊股)股价开盘后迅速涨停,报16 37元,当前总市值38 63亿元,消息上,公司拟220亿元投建锂矿产资

2022-12-29 11:19:55

表达结婚的句子精选709句|全球观热点

​表达结婚的句子精选137句1 看着请柬的喜报,听着鞭炮的欢笑,想着洞房的热闹,望着新人的娇俏,喊着祝福的口号,祝你们相亲相爱一百年不动摇!

2022-12-28 19:21:28

【机器学习】集成学习代码练习(随机森林、GBDT、XGBoost、LightGBM等)_热头条

​本文是中国大学慕课《机器学习》的“集成学习”章节的课后代码。课程地址:https: www icourse163 org course WZU-1464096

2022-12-28 16:43:17

昆船智能12月28日盘中跌幅达5%

​以下是昆船智能在北京时间12月28日13:44分盘口异动快照:12月28日,昆船智能盘中跌幅达5%,截至13点44分,报18 03元,成交9057 86万元,换手率

2022-12-28 13:58:29

视后林夏薇35岁嫩肤靠一招保养,穿浴袍素颜拍片肤质滑到反光_焦点简讯

​现年35岁视后林夏薇拥冻龄外貌,虽然成为人妻,但多年来仍Keep住少女味。林夏薇27日在社交网上载新片,今次是亲授保养心得,见到她估计在浴室

2022-12-28 10:21:38

12月27日基金净值:国投瑞银国家安全混合最新净值1.103,涨0.55% 焦点

​12月27日,国投瑞银国家安全混合最新单位净值为1 103元,累计净值为1 262元,较前一交易日上涨0 55%。历史数据显示该基金近1个月下跌3 94%,近

2022-12-28 01:06:10

每日讯息!博实股份:联创未来拟大宗交易减持不超3%股份

​【博实股份:联创未来拟大宗交易减持不超3%股份】博实股份(002698)12月27日晚间公告,联创未来(武汉)智能制造产业投资合伙企业(有限合伙)计划

2022-12-27 17:56:17

莱美药业:公司拥有注射用炎琥宁相关产品,目前该产品生产销售情况正常

​莱美药业(300006)12月27日在投资者关系平台上答复了投资者关心的问题。投资者:请问公司生产的抗病毒药炎琥宁,用于病毒性肺炎和病毒性上呼吸

2022-12-27 14:31:29

凯石外汇:比特币今年最后一笔交易将如何进行 全球微资讯

​比特币价格下跌,但观望的空头应等待确认,以避免逆趋势的流动性追逐。关键水平已经确定,以确定比特币的下一步潜在走势。比特币价格将很快有

2022-12-27 09:08:16

焦点关注:润禾材料(300727)12月26日主力资金净卖出101.42万元

​截至2022年12月26日收盘,润禾材料(300727)(300727)报收于24 25元,上涨4 62%,换手率1 16%,成交量1 32万手,成交额3149

2022-12-26 15:30:24

芳香世家|为什么越来越多的女性选择创业?女性创业选什么方向?|焦点热议

​在互联网经济崛起的时代,女性的消费力与市场影响力势不可挡,越来越多的独立女性加入创业的大环境中,女性正在不断追赶男性,成为创业新热潮

2022-12-26 10:11:30

快资讯:鄢陵县气象台发布道路结冰黄色预警「III级/较重」「2022-12-25」

​【来源:鄢陵县气象台】鄢陵县气象台2022年12月25日20时02分发布道路结冰黄色预警信号:受低温和降雪影响,预计今天夜里我县安陵镇、柏梁镇等

2022-12-25 20:35:33

神反转!大S自曝“雇佣”具俊晔假结婚,震惊娱乐圈:果然,我们都被她骗了 快看点

​作者| 明月大s人设彻底崩了?前些天,台媒曝出汪小菲和大s的女儿汪希玥,在街头痛哭的视频。暴雨天,汪希玥身边只有保姆一个人。不知道是不是

2022-12-25 03:55:27

吉林省委经济工作会议召开 强调千方百计扩内需|全球观焦点

​(记者郭佳)吉林省委经济工作会议23日在长春召开,“扩内需”成为2023年经济工作关键词之一。会议强调,要千方百计扩大内需,全力扩大有效投...

2022-12-24 08:36:59

万业企业: 上海万业企业股份有限公司第十一届董事会临时会议决议公告|观热点

​证券代码:600641     证券简称:万业企业       公告编号:临 2022-063              上海万业企业股份有限公司

2022-12-23 18:14:33

进一步加深合作,江淮汽车17.04亿元收购安徽蔚来项目资产

​12月22日,江淮汽车(600418)公告称,基于其与蔚来汽车(安徽)有限公司(下称“安徽蔚来”)两方建立的长期战略合作关系,为共同推动新能源汽

2022-12-23 13:46:03

今日看点:每日低价硬货:12代i7英特尔蝰蛇峡谷NUC狂跌千元

​今年10月,IntelNUC蝰蛇峡谷国行正式上市,定价9999元。然而不到2个月,这款2 5L的超强迷你电脑价格就出现了松动,目前8799元即可到手,降幅达

2022-12-23 07:51:51

【天天播资讯】2022年12月22日在线教育涨停板梳理

​2022年12月22日,在线教育受到利好消息的刺激下,整个板块掀起了涨停潮。共5家涨停。1板:1、广弘控股(000529)(10 06%)2、陕西金叶(0008

2022-12-22 18:45:30

快消息!融e邦:BOSS直聘正式以介绍方式于港交所主板完成双重主要上市

​牵手融e邦,资本运作很简单。12月22日,人力资源领域科技企业BOSS直聘正式以介绍方式,于香港联合交易所主板完成双重主要上市,股票代号“2076

2022-12-22 13:05:07

小期贷贷款逾期25天不还会上征信吗|重点聚焦

​网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天后上报给征信机构,因为有些借贷机构可

2022-12-22 06:41:40

世界即时看!国信证券(002736):独立董事辞职

​2022年12月22日公告发布

2022-12-21 17:11:29

每日热讯!辽阳区做债权律师收费标准是怎样的?

​(一)不涉及财产关系的:2000元-30000元 件。上下浮动幅度:20%但收费额不足2000元的按2000元收取。(二)涉及财产关系的,按争议标的额的以下费

2022-12-21 11:11:23

全球观天下!突发!又一条俄罗斯向欧洲输送天然气的管道发生爆炸

​当地时间周二,据俄罗斯媒体援引当地官员的消息报道称,从西西伯利亚到欧洲的俄罗斯天然气出口管道Urengoy-Pomary-Uzhgorod发生了爆炸事件,已造成

2022-12-21 03:33:29