首页 >行情 > 正文

全球热消息:【机器学习】集成学习代码练习(随机森林、GBDT、XGBoost、LightGBM等)

2022-12-23 04:42:08

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


【资料图】

课程地址:

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

上一篇:世界关注:成都燃气: 北京环球(成都)律师事务所关于成都燃气2022年第三次临时股东大会之法律意见书 下一篇:【世界新要闻】西藏粮食产量连续8年稳定在100万吨以上
x
推荐阅读

世界今热点:中光防雷(300414):选举产生第五届监事会职工代表监事

2022-12-28

热推荐:俄媒盘点:中国“铁路外交”在全球开花结果

2022-12-28

【全球热闻】保龄宝:公司赤藓糖醇产品不存在结块问题

2022-12-28

焦点速讯:第一个以中国内地城市命名的国际海事公约诞生

2022-12-27

环球关注:房贷转经营贷陷阱多

2022-12-27

全球资讯:中捷通信:用数赋智实现精益供应链服务

2022-12-27

世界快消息!铜陵有色董秘回复:公司没有独立的镍矿资源,公司的镍产品是冶炼的副产品之一,作为资源综合回收利用

2022-12-27

【天天快播报】IBM与腾讯重提“无界零售”:明年零售企业必须全线出击

2022-12-26

观热点:蔚来:明年上半年新能源汽车市场将承压

2022-12-26

环球短讯!中信证券:看好保租房REITs的投资价值

2022-12-26

【全球速看料】汇金通(603577.SH)预中标1.27亿元国家电网相关采购项目

2022-12-25

环球速读:正规离婚协议书

2022-12-24

每日快播:微博借钱逾期3个月还不起会上征信吗

2022-12-24

世界消息!三维通信: 关于修订《公司章程》的公告

2022-12-23

【世界新要闻】西藏粮食产量连续8年稳定在100万吨以上

2022-12-23

全球热消息:【机器学习】集成学习代码练习(随机森林、GBDT、XGBoost、LightGBM等)

2022-12-23

世界关注:成都燃气: 北京环球(成都)律师事务所关于成都燃气2022年第三次临时股东大会之法律意见书

2022-12-22

世界微动态丨快可电子董秘回复:截至2022年12月20日,公司股东人数为9530户

2022-12-22

全球快资讯:一周跌20%!硅片价格断崖式下跌 释放什么信号

2022-12-21

环球今日讯!徐工机械最新公告:徐工汉云拟获增资3亿元 国开制造业基金增资2.5亿元

2022-12-21

聚焦:天振股份:董事长已赴美拜访主要客户 并达成新的合作意向

2022-12-21

报道:漫步者: 独立董事候选人声明(张昱波)

2022-12-20

每日报道:推出微信键盘 张小龙不图输入法市场图什么

2022-12-20

每日聚焦:西周晋国玉器精品汇聚一堂

2022-12-20

【当前独家】梅西何能“超越”丨九派时评

2022-12-19

世界观热点:杂谈|做期货靠什么盈利?

2022-12-19

环球微动态丨平安证券:市场向上趋势不变 波动可能会有所加大

2022-12-19

今日热门!“2022年中国永春芦柑品牌文化节”举办

2022-12-18

环球聚焦:更省钱 家里买打印机选这三款就对了

2022-12-18

当前报道:在卡塔尔打工:当地人“不缺钱”,上班为了混社保;外国人挣得并不多,不如去北上广

2022-12-17

今日观点!斯莱克(300382.SZ):将在宜宾市新设立控股公司 实施苏州斯莱克宜宾厂房定购项目

2022-12-16

当前观点:迈拓股份获11家机构调研:公司是国内较早向市场推广使用户用智能超声水表的企业之一(附调研问答)

2022-12-16

【独家】【机构调研记录】国联安基金调研英杰电气

2022-12-16

世界微资讯!濮阳县徐镇派出所连续查处两起危险驾驶案

2022-12-15

焦点报道:点赞!河南鲁山范钦宪带出的这个爱心团队获得村民广泛赞誉

2022-12-15

环球新动态:海利生物(603718)12月14日主力资金净卖出641.78万元

2022-12-15

精彩看点:农村房屋买卖合同中无效是什么意思

2022-12-14

全球视点!近期开机的四部新剧,造型一部比一部精美,看看有你想追的吗?

2022-12-14

世界热文:军婚:《战爷追妻夜夜撩》他说,“战家要有后,你主动点……”

2022-12-14

焦点观察:嗨袋网贷13000还不起我会不会被起诉

2022-12-13

每日精选:亚翔集成董秘回复:我司的主要客户集中于高端洁净室工程市场中的IC半导体、光电行业领域

2022-12-13

全球要闻:健康元: 健康元药业集团股份有限公司八届董事会二十次会议决议公告

2022-12-12

世界消息!东方园林:江西屹立10万吨再生电解铜项目尚未完成建设

2022-12-12

当前报道:中超-天王山之战!马尔康破门吴兴涵救主,武汉三镇1-1山东泰山继续领跑

2022-12-09

报道:掌阅科技: 掌阅科技股份有限公司关于公司持股5%以上的股东减持股份达到1%的提示性公告

2022-12-08

【环球速看料】邓州法院召开十月份重点工作讲评会

2022-12-07

【天天热闻】今飞凯达:公司研发的高强韧非热处理一体化压铸铝合金新材料尚处于专利公示阶段,目前未应用于新能源车零部件生产

2022-12-06

国内油价或将迎来“四连跌” “第15轮”调整将于下周二晚上

2022-08-08

湖南省人社厅公布7个热门职业的专项职业能力考核规范

2022-06-20

总投资3172.5亿元 石家庄提前超额完成年度目标任务

2022-03-20

石家庄海关共签发RCEP原产地证书864份 货值3.9亿元

2022-03-20

蚌埠海关累计签发RCEP原产地证书35份 涉及金额2583.09万元

2022-03-20

绥化望奎以工业化思维为引领 推动肉类加工制造产业腾飞

2022-03-20

衡阳耒阳免费发放油茶苗 助推油茶产业稳步发展

2022-03-20

郴州安仁文旅项目集中开工 总投资1000万元

2022-03-20

2022年郴州计划重点推进文旅项目101个 总投资354亿元

2022-03-20

宿州泗县深入推进文旅融合发展 擦亮城市品牌

2022-03-20

汽车零部件产业“领头羊” 锦州力争一季度“开门红”

2022-03-20

油价或有望冲击“九元”大关 宁波新能源汽车市场如何

2022-03-20

从水塘到“云”端 全国最大高邮鸭养殖基地实现智慧养殖

2022-03-20

淡季不忘引流 京郊民宿市场有望迎来回暖

2022-03-20

镇江乡村一二三产业融合发展 闯出“镇江之路”

2022-03-20

总投资30亿元 盐城东台8个重大产业项目相继开工

2022-03-20

去年南京规上信息软件业企业实现营收7577.28亿元 同比增长10.3%

2022-03-20

2021年南京农业保险保费收入53.07亿元 同比增长19.13%

2022-03-20

安阳本土确诊病例上升至26例

2022-01-10

3次推迟婚期 满洲里抗疫民警兑现承诺:“我回来娶你了!”

2022-01-10

上海公安民警在岗位上迎接2022年“中国人民警察节”

2022-01-10

郑州核酸检测为中小学生开辟“绿色通道”

2022-01-10

反扒便衣警察“小曹”:藏在人海中的隐形“守护者”

2022-01-10

哥哥移植肾脏给病重弟弟 已在上海顺利康复

2022-01-10

网友与人裸聊被敲诈10万余元 被告人获刑5年

2022-01-10

1月10日起天津市暂停开展旅行社旅游业务活动

2022-01-10

“3·28”特大跨境电信网络诈骗案公开审理

2022-01-10

忠诚履职 守护万家灯火

2022-01-10

奥密克戎病例已涉天津、安阳 “动态清零”必须坚持!

2022-01-10

专家协作成功完成亲体肾移植 同“肾”兄弟顺利康复

2022-01-10

著名指挥陈燮阳携苏州交响乐团“相约北京”

2022-01-10

中国热科院选育出4个木薯新品种

2022-01-10

北京疾控:12月9日以来途经或旅居天津市人员请立即报备

2022-01-10

河南安阳本轮疫情累计报告确诊病例26例

2022-01-10

许勤批示黑土地保护不力问题:加快形成黑土地保护长效机制

2022-01-10

【挑战365天正能量速写画】第041期:当警娃难,当双警家庭的警娃更难

2022-01-10

重庆姐弟坠亡案两被告人5个月间聊天记录曝光

2022-01-10

因疫情防控措施落实不力 江苏金湖一超市被红牌警告

2022-01-10

江歌案一审判决刘鑫赔偿近70万元 有何依据?专家解读

2022-01-10

广东肇庆“毒驾连撞5车致1死”肇事司机被批捕

2022-01-10

一线工作近22年的缉毒警:我知道坏的是毒品不是人性

2022-01-10

青海保障门源地震后生活必需品应急物资

2022-01-10

江西最大文物倒卖案宣判:倒卖国家二级文物 9人获刑

2022-01-10

呼和浩特:寒假期间有条件的学校要开展校内托管服务

2022-01-10

广西东兴口岸恢复通关 入境需网上预约

2022-01-10

天津米面油存量由20天提高至30天 超市菜市场进货量翻倍

2022-01-10

天津市委市政府致全市父老乡亲的慰问信:我们一定能够打赢

2022-01-10

北京市十五届人大五次会议胜利闭幕

2022-01-10

“中国最后一个原始部落”翁丁老寨火灾原因公布

2022-01-10

天津:划定封控区 全市开展全员核酸检测

2022-01-10

重庆姐弟被生父扔下坠亡案上诉期结束 一审法院暂未收到两被告人上诉状

2022-01-10

子夜直击,天津寒天战“疫”

2022-01-10

兰州名师话“美育”:“尚乐立人”分层培优 以“美”润教

2022-01-10