文章目录

  • 一、直接调用xgb的库
    • 1.调用xgb的库
    • 2.xgb.cv(param1, dfull, num_round,n_fold)
    • 3.分类算法使用
    • 综合调参:使用 xgb.cv调参
      • xgb.CV输出的结果

一、直接调用xgb的库

1.调用xgb的库

导入数据

from sklearn.datasets import load_boston
from sklearn.model_selection import KFold,cross_val_score as CVS,train_test_split as TTS
from sklearn.metrics import mean_squared_error as MSE
import numpy as np
import matplotlib.pyplot as plt
import pandas as pddata=load_boston()X=data.data
y=data.targetXtrain,Xtest,Ytrain,Ytest=TTS(X,y,test_size=0.3,random_state=420)pd.DataFrame(Xtrain)

导入XGBoost库

#xgb实现法
import xgboost as xgb#使用类Dmatrix读取数据
dtrain = xgb.DMatrix(Xtrain,Ytrain)  #特征矩阵和标签都进行一个输入
dtest = xgb.DMatrix(Xtest,Ytest)
#非常遗憾无法打开来查看,所以通常都是先读到pandas里面查看之后再放到DMatrix中#写明参数,
param = {'verbosity':0  #2是输出,'objective':'reg:linear',"eta":0.1}num_round=180  #相当于 n_estimators#类train,可以直接导入的参数是训练数据,树的数量,其他参数都需要通过params来导入
bst = xgb.train(param, dtrain, num_round)#接口predict
preds=bst.predict(dtest)MSE(Ytest,preds)
#6.876827553497432from sklearn.metrics import r2_score
r2_score(Ytest,preds)  #输出的是r的平方,类似score(Xtest,ytest)的结果
#0.9260984369386971


2.xgb.cv(param1, dfull, num_round,n_fold)

有了xgboost.cv这个工具,我们的参数调整就容易多了。这个工具可以让我们直接看到参数如何影响了模型的泛化能
力。接下来,我们将重点讲解如何使用xgboost.cv这个类进行参数调整。

参数,数据,迭代次数,折数
看看类xgb.cv生成了什么结果?随着树不断增加,我们的模型效果如何增加
(训练后的,rmse的均值;训练后的,rmse的方差;测试均值,测试方差)
180次迭代,所以是180棵树

import xgboost as xgb#为了便捷,使用全数据
dfull = xgb.DMatrix(X,y)#设定参数
param1 = {'silent':True,'obj':'reg:linear',"gamma":0}
num_round = 180
n_fold=5  #相当于sklearn中的KFold,进行5折交叉验证#参数,数据,迭代次数,折数
cvresult1 = xgb.cv(param1, dfull, num_round,n_fold)#看看类xgb.cv生成了什么结果?随着树不断增加,我们的模型效果如何增加
#(训练后的,rmse的均值;训练后的,rmse的方差;测试均值,测试方差)
#180次迭代,所以是180棵树
cvresult1plt.figure(figsize=(20,5))
plt.grid()
plt.plot(range(1,181),cvresult1.iloc[:,0],c="red",label="train,gamma=0")
plt.plot(range(1,181),cvresult1.iloc[:,2],c="orange",label="test,gamma=0")
plt.legend()
plt.show()param1 = {'silent':True,'obj':'reg:linear',"gamma":0,"eval_metric":"mae"}
cvresult1 = xgb.cv(param1, dfull, num_round,n_fold)
plt.figure(figsize=(20,5))
plt.grid()
plt.plot(range(1,181),cvresult1.iloc[:,0],c="red",label="train,gamma=0")
plt.plot(range(1,181),cvresult1.iloc[:,2],c="orange",label="test,gamma=0")
plt.legend()
plt.show()
#从这个图中,我们可以看出什么?
#怎样从图中观察模型的泛化能力?
#从这个图的角度来说,模型的调参目标是什么?


3.分类算法使用

from sklearn.datasets import load_breast_cancer
#xgb实现法
import xgboost as xgbdata2 = load_breast_cancer()x2 = data2.data
y2 = data2.targetdfull2 = xgb.DMatrix(x2,y2)param1 = {'silent':True,'obj':'binary:logistic',"gamma":0,"nfold":5}
param2 = {'silent':True,'obj':'binary:logistic',"gamma":2,"nfold":5}
num_round = 100from time import time
import datetimetime0 = time()
cvresult1 = xgb.cv(param1, dfull2, num_round,metrics=("error"))
print(datetime.datetime.fromtimestamp(time()-time0).strftime("%M:%S:%f"))time0 = time()
cvresult2 = xgb.cv(param2, dfull2, num_round,metrics=("error"))
print(datetime.datetime.fromtimestamp(time()-time0).strftime("%M:%S:%f"))plt.figure(figsize=(20,5))
plt.grid()
plt.plot(range(1,101),cvresult1.iloc[:,0],c="red",label="train,gamma=0")
plt.plot(range(1,101),cvresult1.iloc[:,2],c="orange",label="test,gamma=0")
plt.plot(range(1,101),cvresult2.iloc[:,0],c="green",label="train,gamma=2")
plt.plot(range(1,101),cvresult2.iloc[:,2],c="blue",label="test,gamma=2")
plt.legend()
plt.show()


综合调参:使用 xgb.cv调参

#默认情况下的一组线
param1 = {'verbosity':0 #并非默认,'obj':'reg:linear'#并非默认,"subsample":1,"max_depth":6,"eta":0.3,"gamma":0,"lambda":1,"alpha":0,"colsample_bytree":1,"colsample_bylevel":1,"colsample_bynode":1,"nfold":5}
num_round = 300time0 = time()
cvresult1 = xgb.cv(param1, dfull, num_round)
print(datetime.datetime.fromtimestamp(time()-time0).strftime("%M:%S:%f"))fig,ax = plt.subplots(1,figsize=(15,8))
ax.set_ylim(top=5)
ax.grid()
ax.plot(range(1,301),cvresult1.iloc[:,0],c="red",label="train,original")
ax.plot(range(1,301),cvresult1.iloc[:,2],c="orange",label="test,original")
# ax.legend(fontsize="xx-large")
# plt.show()#先把不默认的先统一
param2 = {'verbosity':0 #并非默认,'obj':'reg:linear',"max_depth":2   #过拟合,调小2,"eta":0.05,"gamma":0     #等于5,没影响运行时间长,10也没影响,20,有一点,所以这个调没啥用,"lambda":1  #调小过拟合严重,调大也没啥用,"alpha":0   #调大没啥用,过大还影响,"colsample_bytree":1,"colsample_bylevel":1,"colsample_bynode":1,"nfold":5}param3 = {'verbosity':0 #并非默认,'obj':'reg:linear',"max_depth":2   #过拟合,调小3,与上面对比,看到没有2好,在换成1看看,不好,"eta":0.05,"gamma":0,"lambda":1,"alpha":1,"colsample_bytree":1,"colsample_bylevel":1,"colsample_bynode":0.5,"nfold":5}time0 = time()
cvresult2 = xgb.cv(param2, dfull, num_round)
print(datetime.datetime.fromtimestamp(time()-time0).strftime("%M:%S:%f"))
time0 = time()
cvresult3 = xgb.cv(param3, dfull, num_round)
print(datetime.datetime.fromtimestamp(time()-time0).strftime("%M:%S:%f"))
ax.plot(range(1,301),cvresult2.iloc[:,0],c="green",label="train,last")
ax.plot(range(1,301),cvresult2.iloc[:,2],c="blue",label="test,last")
ax.plot(range(1,301),cvresult3.iloc[:,0],c="gray",label="train,this")
ax.plot(range(1,301),cvresult3.iloc[:,2],c="pink",label="test,this")
ax.legend(fontsize="xx-large")
plt.show()



xgb.CV输出的结果

第十一章:XGBoost (1)直接调用xgb的库相关推荐

  1. java语言仅支持单重继承_java语言程序设计基础篇习题_复习题_第十一章

    java语言程序设计基础篇习题_复习题_第十一章 11.1 下面说法是真是假?一个子类是父类的子集. 11.2 使用什么关键字来定义一个子类 11.3 什么是单一继承?什么是多重继承?java支持多重 ...

  2. 《javascript设计模式》笔记之第十章 和 第十一章:门面模式和适配器模式

    第十章:门面模式 一:门面模式的作用 简化已有的api,使其更加容易使用 解决浏览器的兼容问题 二:门面模式的本质 门面模式的本质就是包装已有的api来简化操作   三:门面模式的两个简单例子 下面这 ...

  3. [转]Windows Shell 编程 第十一章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987992】...

    第十一章 探索Shell 我们现在将注意力从API转向Windows Shell本身.从这一章往后,我们的目标主要集中在清晰和全面的揭示探测器的工作原理和Shell 命名空间的构成对象上,最后给出客户 ...

  4. 《Deep Learning With Python second edition》英文版读书笔记:第十一章DL for text: NLP、Transformer、Seq2Seq

    文章目录 第十一章:Deep learning for text 11.1 Natural language processing: The bird's eye view 11.2 Preparin ...

  5. stm32看门狗_「正点原子NANO STM32开发板资料连载」第十一章 独立看门狗实验

    1)实验平台:ALIENTEK NANO STM32F411 V1开发板2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第十一章 独 ...

  6. 第十一章 异常,日志,断言和调试

    2019独角兽企业重金招聘Python工程师标准>>> 第十一章 异常,日志,断言,调试 由于程序的错误或一些外部环境的影响造成用户数据的丢失,用户就有可能不再使用这个程序了.为了避 ...

  7. 从零开始的linux 第十一章

    从零开始的linux 第十一章 同学们早上好~~已经要步入秋天了~~同学们要记得看天气的变化,适当的增加衣服哦~~没错~~适当的增加(害羞~) 这次小编的博客不出意外的话是周六更新一次~~这周小编推迟 ...

  8. 看门狗寄存器c语言代码_「正点原子NANO STM32F103开发板资料连载」第十一章 看门狗实验...

    1)实验平台:[正点原子] NANO STM32F103 开发板 2)摘自<正点原子STM32 F1 开发指南(NANO 板-HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 ...

  9. 第二十一章流 14临时文件

    //第二十一章流 14临时文件 /*#include <cstdio> #include <iostream> using namespace std; int main() ...

最新文章

  1. POJ - 1330 Nearest Common Ancestors tanjan_LCA
  2. python实训总结报告书_20172304 实验四python综合实践报告
  3. cocos 发布android 返回值2,cocos android编译出错
  4. 计算机跨专业专插本学音乐,欢迎投稿丨专插本可以跨专业考,只要肯坚持!
  5. 怎样打开mysql进程数_mysql查看最大打开进程数
  6. python科学计算_可视化图解Python科学计算包NumPy
  7. C++设计模式-策略模式(Strategy)基本轮廓
  8. Codeforces Beta Round #14 (Div. 2) D. Two Paths 树的直径
  9. 使用Chrome Frame,彻底解决浏览器兼容问题
  10. windows图标文件夹_如何在Windows 10中获取Windows 7的旧文件夹图标
  11. 台式计算机硬盘的尺寸通常为多少英寸,电脑硬件参数之硬盘
  12. 使用POI和EasyExcel实现Excel导入和导出功能
  13. 西工大PAMI论文:发布大规模人群计数/定位基准平台
  14. paperpass查重
  15. R语言|散点图 ———R语言数据可视化系列(一)
  16. PVZ的建国保龄球?
  17. SQL-DQL(数据库查询语言)
  18. linux下格式化apfs,APFS文件系统科普贴
  19. 带负荷测试要求二次最小电流_带负荷测向量简单分析方法
  20. 蓝桥杯 java 历届试题 对局匹配

热门文章

  1. Springboot整合MyBatis-plus:乐观锁和悲观锁
  2. 【正点原子STM32连载】 第二十六章 USMART调试组件实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
  3. 88e6321/88e6320 寄存器配置
  4. 通过RH_TYPE_STRUC_HELP构建搜索帮助返回多个值到屏幕select-option “部门”
  5. Pydroid3 离线安装第三方库
  6. 可以用计算机算出多少位,圆周率究竟可以精确到多少位?如今的超级计算机算到了亿万位...
  7. 【安装】CentOS安装zip unzip命令
  8. mysql setinc_thinkphp3.2.0 setInc方法
  9. npm ERR! code ELIFECYCLE报错解决
  10. android 扇形按钮,扇形按钮控制(PieControl Pro )