全球要闻:【机器学习】集成学习代码练习(随机森林、GBDT、XGBoost、LightGBM等)
本文是中国大学慕课《机器学习》的“集成学习”章节的课后代码。
课程地址:
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.936LIghtGBM的使用 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.6640002.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-02-07 14:57:45
奇迹!绝杀!女足亚洲杯逆转夺冠!<
刚刚,中国女足上演逆转绝杀奇迹!她们在亚洲杯决赛中3:2力克韩国队,时隔16年再夺亚洲杯冠军!
-
2022-02-07 14:57:45
中国政府与阿根廷共和国政府签署共建“一带一路”谅解备忘录<
新华社北京2月6日电(记者安蓓)国家发展改革委6日称,国家发展改革委主任何立峰与阿根廷外交、国际贸易和宗教事
-
2022-02-07 14:57:43
中华人民共和国和阿根廷共和国关于深化中阿全面战略伙伴关系的联合声明(全文)<
新华社北京2月6日电中华人民共和国和阿根廷共和国关于深化中阿全面战略伙伴关系的联合声明一、应中方邀请,阿根廷
-
2022-02-07 14:57:40
春节假期国内旅游出游2.51亿人次<
春节遇冬奥,旅游年味浓。根据文化和旅游部数据中心测算,2022年春节假期7天,全国国内旅游出游2 51亿人次,同比
-
2022-02-07 14:57:40
中吉签署关于经典著作互译出版的备忘录 开启两国人文交流互鉴新阶段<
新华社北京2月6日电(记者史竞男)国家主席习近平6日会见来华出席北京2022年冬奥会开幕式的吉尔吉斯斯坦总统扎帕
-
2022-12-23 04:42:01
全球要闻:【机器学习】集成学习代码练习(随机森林、GBDT、XGBoost、LightGBM等)
本文是中国大学慕课《机器学习》的“集成学习”章节的课后代码。课程地址:https: www icourse163 org course WZU-1464096
-
2022-12-22 16:56:29
焦点资讯:创益通(300991.SZ):拟出资2550万元设立合资公司柳州鹏威
格隆汇12月22日丨创益通公布,2022年12月22日,公司与东莞鹏威能源、自然人夏友规三方在深圳市签订《合资协议书》,三方同意共同出资设立柳州
-
2022-12-22 11:01:33
快资讯丨涨停雷达:ST个股异动 *ST瑞德触及涨停
今日走势:*ST瑞德(600666)今日触及涨停板,该股近一年涨停29次。异动原因揭秘:1、公司主营业务为蓝宝石晶体材料,蓝宝石制品的研发,生产和
-
2022-12-22 00:08:17
天天动态:首架国产S-300C直升机成功交付客户
12月20日,由航空工业昌飞生产制造的首架国产S-300C直升机正式交付客户,主要应用于飞行员培训、低空旅游观光等领域。交付仪式的圆满落幕,标
-
2022-12-21 15:37:28
观热点:中国石化青海石油国六B汽油今起上市供应
12月21日零时起,青海省所有中国石化加油站车用汽油质量标准全部升级为国六B车用汽油,较国家成品油质量升级总体要求,提前完成在营加油站车用
-
2022-12-21 09:29:10
天天微头条丨新开源:公司2万吨NVP新生产线预计明年二季度初可以供货
同花顺(300033)金融研究中心12月21日讯,有投资者向新开源(300109)提问,请问公司2万吨NVP生产线预计明年2月份安装结束,预计二季度初开始
-
2022-12-20 21:34:00
全球快资讯:布洛芬一片难求,这家公司趁势涨了184亿
布洛芬一片难求,这家公司趁势涨了184亿
-
2022-12-20 14:37:40
今日关注:恒星科技董秘回复:截止2022年12月9日,公司股东人数为7.2万余户
恒星科技(002132)12月20日在投资者关系平台上答复了投资者关心的问题。
-
2022-12-20 08:27:33
当前热点-赵露思P图撞脸“4千年一遇”美女,真实状态曝光
女星赵露思近年搭档杨洋、吴磊等陆剧男神,出道不久就受到制作人青睐,陆续出演大制作剧集,人气扶摇直上,资源也一飞冲天,罕见出道5年就成
-
2022-12-19 19:26:57
环球看点!*ST天马: 关于2020年股票期权与限制性股票激励计划首次授予股票期权第二个行权期自主行权的提示性公告
证券代码:002122 证券简称:*ST天马 公告编号:2022-104 天马轴承集团股份有
-
2022-12-19 14:58:52
天天滚动:12000个金蛋砸出奔驰车?帅丰集成灶这波福利比双十一还刺激!
帅丰超级焕新节宅家云逛街12月17日-18日9:00起直播狂欢嗨不停没什么别的目的,就是想给你送礼!就在今天!明天!百万豪礼等你来01 砸金蛋,赢
-
2022-12-19 08:39:59
环球报道:房屋合同法律案件费用主要有哪些?
1、离婚案件每件交纳50元至300元。涉及财产分割,财产总额不超过20万元的,不另行交纳;超过20万元的部分,按照0。5%交纳。2、侵害姓名权、名
-
2022-12-18 22:43:07
全球观焦点:2022年漳州开发区(深圳)招商引资推介会顺利举行
2022年漳州开发区(深圳)招商引资推介会顺利举行
-
2022-12-18 06:08:23
实时:潮玩之都引领时尚
王东东,一位30多年的机甲“骨灰级玩家”,2013年从沈阳南下东莞创办了东秀文化,想要圆自己的“机甲梦”。面对企业的呼声,东莞市正不遗余...
-
2022-12-17 11:34:01
今日热议:故意杀人未遂潜逃判多少年
《刑法》第二百三十二条规定:故意杀人的,处死刑、无期徒刑或者十年以上有期徒刑;情节较轻的,处三年以上十年以下有期徒刑。《刑法》第二十
-
2022-12-16 19:38:25
头条焦点:中国诚通发展集团(00217.HK)斥1.5亿元购买用于页岩气开发的一套钻机及11套顶驱机
格隆汇12月16日丨中国诚通发展集团公告,于2022年12月16日,诚通融资租赁(公司间接全资附属公司)与卖方订立购买合约,据此,诚通融资租赁已同
-
2022-12-16 14:19:47
环球聚焦:上海金属网SHMET基本金属价格、指数、溢价;稀贵金属及其他金属价格
上海金属网SHMET基本金属价格、指数、溢价;稀贵金属及其他金属价格
-
2022-12-16 08:02:39
环球快看:丰田汽车(TM):将研究电动汽车向电网反向输电的技术
丰田汽车北美分公司宣布,该公司正与美国得克萨斯州电力分配公司OncorElectricDelivery组团,将共同探索一个关于车辆到电网(VTG)的项目,这
-
2022-12-15 19:23:04
环球通讯!警察故事|王洁:刑侦战线的铿锵玫瑰
在刑侦领域,女民警相对少。说起王洁,濮阳县公安局刑警大队的老民警总是会竖起大拇哥点个赞说:“这个女孩子不简单,细心又勇敢,是把干刑...
-
2022-12-15 14:07:18
当前讯息:组织出卖人体器官罪追诉时效是多长时间
本罪是指组织他人出卖人体器官的行为。所谓组织,是指经营人体器官的出卖或者以招募、雇佣(供养器官提供者)介绍、利诱等手段,使他人出卖人
-
2022-12-15 07:40:24
世界热点评!穿帮镜头:死尸玩手机我忍了,李溪芮的衣服过分了吧
穿帮镜头一:这个就很值得吐槽了,难怪这几年出的抗战剧全部都被人吐槽为“神剧”。难怪这位小哥也只是上来领盒饭的,这种专业精神让别人怎...
-
2022-12-14 17:20:43
观察:金发科技: 金发科技独立董事关于第七届董事会第十六次(临时)会议审议相关事项的独立意见
金发科技:金发科技独立董事关于第七届董事会第十六次(临时)会议审议相关事项的独立意见
-
2022-12-14 12:50:23
速讯:院墙多少钱一米(围墙造价清单报价)
造价约107元 米。来个砧板,刷中场内外,包括顶包,少付一米。有1 8米高吗?2?木柱铁刺网造价107元 m左右,还有其他。如果把材料算一米的话,
-
2022-12-14 01:49:24
速看:12月13日基金净值:恒越核心精选混合A最新净值2.0459,跌1.8%
12月13日,恒越核心精选混合A最新单位净值为2 0459元,累计净值为2 0459元,较前一交易日下跌1 8%。历史数据显示该基金近1个月下跌7 97%,近3
-
2022-12-13 15:14:55
【全球新视野】同力日升(605286)12月13日主力资金净卖出1055.28万元
截至2022年12月13日收盘,同力日升(605286)报收于41 96元,下跌6 09%,换手率4 56%,成交量2 19万手,成交额9383 07万元。
-
2022-12-13 08:25:48
世界焦点!湖北国资国企减免房租逾10亿元 前11个月惠及3.34万小微企业和个体户
湖北国资国企减免房租逾10亿元前11个月惠及3 34万小微企业和个体户---湖北日报讯(记者左晨、通讯员郭之)今年以来,省政府国资委认真落实保市
-
2022-12-12 18:06:53
当前热点-太阳电缆: 监事会会议决议公告
证券代码:002300 证券简称:太阳电缆 公告编号:2022-066 福建南平太阳电缆
-
2022-12-12 13:34:38
速讯:盆栽榴莲种植方法 榴莲盆栽种植方法
1、种植榴莲最合适的时间是在春季,若是家中盆栽对时间没有太严格的要求,但是它喜温度的环境,且对光照的要求较高,所以在春季或者夏季种植最
-
2022-12-09 21:08:25
热门:若羽臣: 广州若羽臣科技股份有限公司未来三年(2022-2024 年)股东回报规划
广州若羽臣科技股份有限公司 未来三年(2022-2024 年)股东回报规划 为健全和完善广州若羽臣科技股份有限公司(以下简称“
-
2022-12-08 18:56:55
当前热门:奥园美谷: 关于2022年第四次临时股东大会增加临时提案暨2022年第四次临时股东大会补充通知的公告
证券代码:000615 证券简称:奥园美谷 公告编号:2022-091 奥园美谷科技股份有限