【机器学习】集成学习代码练习(随机森林、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-30 18:04:46
湘园新材客户与供应商重叠,经营活动现金流净额大幅下滑
乐居财经兰兰12月30日,苏州湘园新材料股份有限公司(以下简称“湘园新材”)发布首次公开发行股票并在创业板上市招股说明书(申报稿),拟...
-
2022-12-30 15:14:20
环球讯息:12月29日特钢行业十大熊股一览
12月29日,沪指报收3073 7,较前一交易日下跌0 44%。特钢行业整体表现较弱,较前一交易日下跌0 74%,3只个股上涨,10只个股下跌。
-
2022-12-30 09:36:41
钢价大涨183!产量创新低!22家钢厂调价!2022年钢价如何收尾? 世界快消息
据市场反馈数据显示,本周主流品种钢材产量小幅下降321万吨至91727万吨,创4个月新低,表观需求降29万吨至87438万吨,创3月份以来新低,目前在
-
2022-12-30 01:58:45
环球最资讯丨机器学习数据不满足同分布,怎么整?
机器学习作为一门科学,不可避免的是,科学本身是基于归纳得到经验总结,必然存在历史经验不适用未来的情况(科学必可证伪)。这里很应景地讲
-
2022-12-29 19:32:51
沈腾妻子离婚风波后露面!42岁身材发福肥肉抢镜,被嘲胖过贾玲
12月27日,沈腾的妻子王琦在电影“绝望主夫”的首映礼上现身,她本次受邀来到首映礼上观看电影被媒体拍下,但她的身体状态引发网友的担忧。...
-
2022-12-29 17:26:03
环球资讯:新华全媒+|2022,致人海中的那个你
2022这一年,你我也许曾在人海相遇,却又不止于擦肩;2022这一年,奔波的路上不只有辛苦,沿途也有美景;2022年的旅途上,曾有他们送过我们一
-
2022-12-29 15:45:23
凯莱英涨6.85%,华西证券二个月前给出“买入”评级_前沿热点
今日凯莱英(002821)涨6 85%,收盘报148 12元。2022年10月28日,华西证券研究员崔文亮,徐顺利发布了对凯莱英的研报《业绩延续高速增长,高强度
-
2022-12-29 13:15:18
微博借钱借款逾期14天多久会上征信 世界微资讯
网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天后上报给征信机构,因为有些借贷机构可
-
2022-12-29 11:20:24
丰乐种业董秘回复:截至2022年12月20日,公司股东人数为100124人
丰乐种业(000713)12月29日在投资者关系平台上答复了投资者关心的问题。投资者:董秘您好,请问丰乐种业最新股东人数是多少?谢谢丰乐种业董秘
-
2022-12-29 09:28:52
中央财政下达2022年第二笔农业保险保费补贴
中新网12月28日电题:中央财政下达2022年第二笔农业保险保费补贴中新财经记者赵建华财政部近日向有关省、自治区、直辖市、计划单列市及新疆生
-
2022-12-28 16:59:26
整根鹿茸怎样分辨好坏 整根鹿茸如何分辨好坏呢-天天观热点
1、挑选整根鹿茸的秘诀就是以毛孔嫩细,红色小片为佳。原只鹿茸以茸体饱满、挺圆、质嫩、毛细、皮色红棕、体轻,底部无棱角都为佳,而细、瘦、
-
2022-12-28 14:06:03
女儿遭拍不雅视频,印士兵讨说法被打死,已逮捕7名嫌疑人
据《印度时报》26日报道,11月24日晚,一名边境安全部队士兵在古吉拉特邦纳迪亚德市科达县恰克拉西村被殴打致死,起因是他抗议其女儿不雅视频
-
2022-12-28 10:34:23
2022高明区新冠疫苗接种门诊开放情况(每日更新) 最新资讯
根据工作安排,12月28日区内新冠疫苗接种门诊开诊信息如下:60周岁及以上人员已接种三针灭活疫苗(即科兴 生物)或已接种两针灭活疫苗及一针智飞
-
2022-12-28 03:45:45
环球快资讯丨广发银行财富管理及私人银行部总经理陈若鹏:向“未老群体”讲养老是未来趋势
12月22日,第十七届亚洲金融年会“养老金融新动力”主题论坛召开。广发银行财富管理及私人银行部总经理陈若鹏应邀出席论坛并作主旨演讲时表...
-
2022-12-27 18:45:27
全球短讯!长沙鼎好医院核酸检测结果多久出
为了保障安全的医疗环境,防止院内交叉感染,长沙鼎好医院核酸检测仅限绿码人员,只进行单采,收费16元 人。出结果时间:检测结果出具时间为24
-
2022-12-27 14:53:58
各地推出优惠政策 激发消费市场活力
近日,各地推出一系列优惠政策,加快推动服务业有序恢复。活跃市场,提振消费。这两天在河北保定太行水镇,开启了欢乐冰雪季。在上万平米超大
-
2022-12-27 09:34:39
豆瓣公布2022年电影榜单:好多都没看过_环球热点
豆瓣公布了2022年电影榜单,你看看有你感兴趣的电影么,除了下列榜单外,具体的榜单排名,大家可以去豆瓣官网查看。“评分最高华语电影”中...
-
2022-12-26 22:23:59
不愧是李敏镐!出道16年,非女神级不撩
说到李敏镐的各个角色,最深入人心的就是《继承者们》中的金叹。剧中是学校中的风云人物,李敏镐私下也是从小帅到大的母胎美男,出众颜值搭上1
-
2022-12-26 16:08:20
当前关注:[快讯]锦盛新材:关于公司股东减持计划期限届满
CFi CN讯:一、股东减持情况1、股东减持股份情况截至本公告披露日,上海科丰具体减持情况如下:股东名称减持方式减持期间减持均价区间(元 股
-
2022-12-26 10:23:13
焦点资讯:中海达董秘回复:公司在收到德清联创的告知函后,已就相关问题召开会议讨论并初步了解情况
中海达(300177)12月26日在投资者关系平台上答复了投资者关心的问题。投资者:请问浙江中海达的纠纷自查目前是否有进展,预计何时披露?中海达
-
2022-12-25 22:56:41
【机器学习】集成学习代码练习(随机森林、GBDT、XGBoost、LightGBM等)|世界看热讯
本文是中国大学慕课《机器学习》的“集成学习”章节的课后代码。课程地址:https: www icourse163 org course WZU-1464096
-
2022-12-25 07:44:41
最大CLIP!LAION发布CLIP的扩增定律|世界滚动
点蓝色字关注“机器学习算法工程师”设为星标,干货直达!近日,LAION等机构在Reproduciblescalinglawsforcontrastive
-
2022-12-24 09:44:00
天天最资讯丨任天堂 Switch 独占像素游戏《运动物语》现已发售
IT之家12月24日消息,任天堂官方宣布,像素风RPG《运动物语》现已正式上线eShop登陆Switch平台。 IT之家了解到,《运动物语》是一款像素体
-
2022-12-23 18:54:13
草原铁路2023年春运车票24日起售 内蒙古中西部客流预计上涨
中新网呼和浩特12月23日电(记者李爱平)中国铁路呼和浩特局集团有限公司23日消息称,24日起,铁路部门开始发售2023年春运首日车票。进入12月份
-
2022-12-23 14:41:52
婚前夫妻一方的财产有哪些 环球新消息
1、个人所有的财产,如工资、奖金,从事生产、经营取得的收益,知识产权的收益,因继承或赠与所得的财产、资本收益以及其他合法收入。2、一方
-
2022-12-23 08:48:58
每日热闻!中京电子(002579)12月22日主力资金净买入1.65亿元
截至2022年12月22日收盘,中京电子(002579)报收于12 89元,上涨6 44%,换手率30 34%,成交量179 47万手,成交额22 43亿元。1
-
2022-12-22 19:26:31
逸豪新材: 第二届董事会第十一次会议决议公告
逸豪新材:第二届董事会第十一次会议决议公告
-
2022-12-22 14:01:49
金蝶国际(00268.HK)盘中涨超8%,截至发稿,涨6.45%,报16.18港元,成交额2.29亿港元
金蝶国际(00268 HK)盘中涨超8%,截至发稿,涨6 45%,报16 18港元,成交额2 29亿港元。
-
2022-12-22 07:49:06
明微电子(688699)12月21日主力资金净卖出716.01万元
截至2022年12月21日收盘,明微电子(688699)报收于49 88元,下跌2 71%,换手率2 76%,成交量1 44万手,成交额7255 92万元。12
-
2022-12-21 17:49:00
西青区债务纠纷起诉律师收多少钱
(一)不涉及财产关系的:2000元-30000元 件。上下浮动幅度:20%但收费额不足2000元的按2000元收取。(二)涉及财产关系的,按争议标的额的以下费
【资料图】