本文是中国大学慕课《机器学习》的“集成学习”章节的课后代码。
课程地址:
(相关资料图)
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,加入微信群请扫码
标签:
-
【机器学习】集成学习代码练习(随机森林、GBDT、XGBoost、LightGBM等) 世界即时
本文是中国大学慕课《机器学习》的“集成学习”章节的课后代码。课程地址:https: www icourse163 org course WZU-1464096
-
关注:益方生物: 益方生物2022年限制性股票激励计划首次授予激励对象名单
益方生物科技(上海)股份有限公司 2022 年限制性股票激励计划首次授予激励对象名单 益方生物科技(上海)股份有限公司
-
粤宏远A(000573.SZ)子公司宏远投资放弃参股公司股权优先购买权 天天快播报
智通财经APP讯,粤宏远A发布公告,公司全资子公司广东宏远投资有限公司(宏远投资)持有参股公司东莞市中天荟景实业投资有限公司(中天荟景)的股
-
为何需要“二次加强”?“阳过”后能接种第二剂“加强针”吗?|今日最新
为何需要“二次加强”?“阳过”后能接种第二剂“加强针”吗?2022年12月23日10:25工人日报近日,北京市多个区启动新冠病毒疫苗第二剂次加...
-
当前动态:湖北省肿瘤医院肿瘤内科副主任医师杨彬:肿瘤患者感染新冠退热用药需谨慎 暂缓抗肿瘤治疗
湖北省肿瘤医院肿瘤内科副主任医师杨彬:肿瘤患者感染新冠退热用药需谨慎暂缓抗肿瘤治疗---肿瘤患者如何保护自己免于感染新冠病毒。肿瘤患者感
-
长春新区以高质量就业夯实民生之本 焦点热门
开发就业岗位7888个,城镇新(增)就业5459人帮助就业困难人员就业557人,城镇零就业家庭援助率100%,新引进高校毕业生6219名……就业是最大的
-
挖金客:12月21日获融资买入309.71万元
同花顺数据中心显示,挖金客12月21日获融资买入309 71万元,占当日买入金额的12 02%,当前融资余额3527 21万元,占流通市值的5 78%,超过历史9
-
实朴检测: 海通证券股份有限公司关于实朴检测技术(上海)股份有限公司2022年度持续督导的培训情况报告
海通证券股份有限公司 关于实朴检测技术(上海)股份有限公司 根据《深圳证券交易所上市公司信息披露指引第 6 号——保荐业务...
-
量能萎缩 资金无心恋战 焦点速看
从周三来看,我们看到市场是一个到达制衡区间后,走势有一个止跌尝试,不过重新构筑平台,以及量能恢复等,都需要时间。包括热点,金融还是护
-
环球今亮点!请注意!监管部门提醒:这样转贷有风险!
请注意!监管部门提醒:这样转贷有风险!
-
快讯:MI能源(01555.HK)进一步延长出售Palaeontol B .V .股份第二阶段最后截止日期
格隆汇12月20日丨MI能源公告,就出售PalaeontolB V 40%股权事项,于2022年12月20日,公司、卖方和MIEMaple与买方达成协议,将第二阶段最后截止
-
新消息丨长城科技:公司扁线产品的绝缘漆是对外采购的
同花顺(300033)金融研究中心12月20日讯,有投资者向长城科技(603897)提问,董秘,您好,贵公司有扁线产品应用于新能源中大型客车和新能源
-
【天天速看料】海正药业(600267)12月19日主力资金净卖出2960.60万元
截至2022年12月19日收盘,海正药业(600267)报收于11 1元,下跌5 93%,换手率2 85%,成交量31 61万手,成交额3 57亿元。
-
最资讯丨上海:全市各类社区卫生服务机构2594间发热诊间全部启用
上海:全市各类社区卫生服务机构2594间发热诊间全部启用中新网上海12月19日电(记者殷立勤)12月19日,市民在上海市长宁区虹桥社区卫生服务中
-
三夺世杯梅西圆球王梦,阿根廷举国欢腾 焦点快看
世界杯决赛,阿根廷力战法国,战况峰回路转,阿根廷上半场领先2比0,但下半场法国绝地反击入两球追和,加时各入一球仍未能分胜负,最终阿根廷
-
焦点!Polkadot 能否达到与 L2 解决方案相当的出块时间?| W3F 12 月 AMA
加入PolkaWorld社区,共建Web3 0!Web3基金会技术教育和Grant负责人Bill在Reddit上举办了2022年最后一
-
上海中小学校下周一起线上教学 初三、高三年级除外
(记者陈静)上海市教委17日表示,自19日起,除初三、高三年级外,中小学校全部调整为线上教学。根据上海市教委的决定,居家照护存在困难的学生
-
天天新消息丨首届两岸乡村融合发展论坛福州举行
12月17日,由福建闽江学院主办,海峡两岸乡建乡创发展研究院、闽江学院乡村振兴研究院承办,中评智库基金会等协办的“首届海峡两岸乡村融合发
-
最新资讯:神仙价!OLED屏双雷电4轻薄本只要3099元
现如今,拥有一台实力均衡的笔记本电脑相当重要,它不仅彰显独特品位,更为职场表现轻松加分。今天,特别介绍这款华硕破晓Pro1313 3英寸轻薄商
-
【全球速看料】建设银行: 建设银行境内优先股股息派发实施公告
股票代码:601939 股票简称:建设银行 公告编号:临 2022-046 中国建设银行股份有限公司 境内
-
天天滚动:下午该如何操作?午后三大看点
[01导读][第02页][第03页]>>下一页导读:1盘之感:午后大盘行情提示2梦若神机V:坚定持有大金融3张春林:跌到位再下狠手1盘之感:午后大盘行情
-
临港区:“黑色黄金”向民用版图浸润 消息
临港区:“黑色黄金”向民用版图浸润
-
焦点报道:泽璟制药: 君合律师事务所上海分所关于苏州泽璟生物制药股份有限公司2022年第二次临时股东大会的法律意见书
查看原文公告
-
IDC:预计明年中国手机出货量同比降0.9% 折叠屏仍会快速增长
例如:新形态的折叠屏手机仍将保持快速增长
-
18岁碧梨穿吊带出门被羞辱!音乐天才又怎么样,身材肥的像大妈! 今日热讯
18岁碧梨被身材羞辱,她不是勇敢她只是正常!不正常的是我们!看到碧梨因为身材被嘲的事,很是感慨,不吐不快。碧梨中国网友给起的中文名。她
-
潮州电信高效完成农村5G“点亮”专项工作-当前热文
为落实工信部关于精准掌握农村地区5G网络覆盖进展情况的要求,强化农村区域5G网络质量,做好农村区域的基站设备维护和5G业务体验优化,中国电
-
连央视都力捧的新剧,5位一线演员联合出演,今年的“剧王”出现
因为去年疫情的原因,所以导致了很多的剧组停工;以至于去年当中的没有多少,让观众们可以认可的作品。而随着全面复工复产的进行;在今年便有
-
山西欲借力“两节”促消费复苏
【山西欲借力“两节”促消费复苏】山西省文旅、商务等多部门13日联合发布系列措施,促进消费复苏。山西省商务厅副厅长梁志勇介绍,山西今年...
-
合兴包装董秘回复:朋友,公司会在定期报告中披露报告期末的股东人数情况,具体请您关注公司披露的定期报告
合兴包装(002228)12月13日在投资者关系平台上答复了投资者关心的问题。
-
12月19日24时 油价有望迎来“第十跌”
中国网是国务院新闻办公室领导,中国外文出版发行事业局管理的国家重点新闻网站。本网通过10个语种11个文版,24小时对外发布信息,是中国进行
广告
X 关闭
- 【机器学习】集成学习代码练习(随机森林、GBDT、XGBoost、LightGBM等) 世界即时
- 关注:益方生物: 益方生物2022年限制性股票激励计划首次授予激励对象名单
- 粤宏远A(000573.SZ)子公司宏远投资放弃参股公司股权优先购买权 天天快播报
- 为何需要“二次加强”?“阳过”后能接种第二剂“加强针”吗?|今日最新
- 当前动态:湖北省肿瘤医院肿瘤内科副主任医师杨彬:肿瘤患者感染新冠退热用药需谨慎 暂缓抗肿瘤治疗
- 长春新区以高质量就业夯实民生之本 焦点热门
- 挖金客:12月21日获融资买入309.71万元
- 实朴检测: 海通证券股份有限公司关于实朴检测技术(上海)股份有限公司2022年度持续督导的培训情况报告
- 量能萎缩 资金无心恋战 焦点速看
- 粤宏远A(000573.SZ)子公司宏远投资放弃参股公司股权优先购买权 天天快播报
- 为何需要“二次加强”?“阳过”后能接种第二剂“加强针”吗?|今日最新
- 当前动态:湖北省肿瘤医院肿瘤内科副主任医师杨彬:肿瘤患者感染新冠退热用药需谨慎 暂缓抗肿瘤治疗
- 长春新区以高质量就业夯实民生之本 焦点热门
- 挖金客:12月21日获融资买入309.71万元
- 实朴检测: 海通证券股份有限公司关于实朴检测技术(上海)股份有限公司2022年度持续督导的培训情况报告
- 量能萎缩 资金无心恋战 焦点速看
- 环球今亮点!请注意!监管部门提醒:这样转贷有风险!
- 快讯:MI能源(01555.HK)进一步延长出售Palaeontol B .V .股份第二阶段最后截止日期
广告
X 关闭
-
【机器学习】集成学习代码练习(随机森林、GBDT、XGBoost、LightGBM等) 世界即时
-
关注:益方生物: 益方生物2022年限制性股票激励计划首次授予激励对象名单
-
粤宏远A(000573.SZ)子公司宏远投资放弃参股公司股权优先购买权 天天快播报
-
为何需要“二次加强”?“阳过”后能接种第二剂“加强针”吗?|今日最新