1. 模型评估的方法

    留出法
    留出法是将原数据集分成互斥的两组,一组作为训练集,另一组作为测试集
    交叉验证发
    交叉验证(cross-validation 简称cv)将数据集分为k等份,对于每一份数据集,其中k-1份用作训练集,单独的那一份用作验证集。
    通常情况下,留一法对模型的评估可能会不准确,一般采用xgboost.cv可以进行交叉验证

以下基于kaggle的heart-disease数据进行交叉验证

import numpy as np
import pandas as pdfrom sklearn.model_selection import train_test_split,StratifiedKFold,train_test_split,GridSearchCV
from sklearn.metrics import accuracy_score, confusion_matrix, mean_squared_error,roc_auc_score
from xgboost import plot_importance
from matplotlib import pyplot as plt
import xgboost as xgbdataset=pd.read_csv('heart.csv')
dataset.head(5)

数据前五行如下:

利用straightkfold做交叉验证输出混淆矩阵
StratifiedKFold用法类似Kfold,但是他是分层采样,确保训练集,测试集中各类别样本的比例与原始数据集中相同

rng=np.random.RandomState(31337)
kf=StratifiedKFold(n_splits=3,shuffle=True,random_state=rng)#采用三折交叉验证
for train_index,test_index in kf.split(X,Y):xgb_model = xgb.XGBClassifier().fit(X.iloc[train_index], Y.iloc[train_index])predictions = xgb_model.predict(X.iloc[test_index])actuals = Y.iloc[test_index]print(confusion_matrix(actuals, predictions))

输出混淆矩阵
[[36 10]
[ 3 52]]
[[33 13]
[13 42]]
[[35 11]
[10 45]]

利用xgb.cv找出最优的树

#利用train_test_split方法,将X,y随机划分问,训练集(X_train),训练集标签(X_test),测试卷(y_train),
#测试集标签(y_test),训练集:测试集=7:3的X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.3, random_state=42)
#xgboost可以加载libsvm格式的文本数据,加载的数据格式可以为numpy的二维数组和xgboost的二进制的缓存文件。加载的数据存储在对象dmatrix中。
xgtrain = xgb.DMatrix(X_train, label=y_train)clf = xgb.XGBClassifier(missing=9999999999,max_depth = 7,n_estimators=80,learning_rate=0.1, nthread=4,subsample=1.0,colsample_bytree=0.5,min_child_weight = 3,seed=1301)
xgb_param = clf.get_xgb_params()#do cross validation
print ('Start cross validation')
cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=5000, nfold=5, metrics=['auc'],early_stopping_rounds=50, stratified=True, seed=1301)
#交叉验证后最好的树
print('Best number of trees = {}'.format(cvresult.shape[0]))
clf.set_params(n_estimators=cvresult.shape[0])#把clf的参数设置成最好的树对应的参数
print('Fit on the trainingsdata')
clf.fit(X_train, y_train, eval_metric='auc')#训练clf
print('Overall AUC:', roc_auc_score(y_train, clf.predict_proba(X_train)[:,1]))#训练auc
print('Predict the probabilities based on features in the test set')
pred = clf.predict_proba(X_test, ntree_limit=cvresult.shape[0])
print('Fit on the testingsdata')
print('Overall AUC:', roc_auc_score(y_test, clf.predict_proba(X_test)[:,1]))#测试auc
#测试集上的概率
submission= pd.DataFrame({"ID":X_test.index, "TARGET":pred[:,1]})
submission.to_csv("submission.csv", index=False)
#测试集分类结果的预测
print('Fit on the testingsdata')
print('Overall AUC:', roc_auc_score(y_test, clf.predict(X_test)))#测试auc

其中cvresult的结果为

输出的结果如下
Start cross validation
Best number of trees = 22
Fit on the trainingsdata
Overall AUC: 0.9752577319587629
Predict the probabilities based on features in the test set
Fit on the testingsdata using predict_proba
Overall AUC: 0.888780487804878
Fit on the testingsdata using predict
Overall AUC: 0.8102439024390243

xgb.cv进行交叉验证相关推荐

  1. R语言构建xgboost文本分类模型(bag of words):xgb.cv函数交叉验证确定xgboost模型的最优子树个数、交叉验证获取最优子树之后构建最优xgboost模型并评估模型文本分类效能

    R语言构建xgboost文本分类模型(bag of words):xgb.cv函数交叉验证确定xgboost模型的最优子树个数.交叉验证获取最优子树之后构建最优xgboost模型并评估模型文本分类效能 ...

  2. R语言构建xgboost模型:xgb.cv函数交叉验证确定模型的最优子树个数(可视化交叉验证对数损失函数与xgboost模型子树个数的关系)、交叉验证获取最优子树之后构建最优xgboost模型

    R语言构建xgboost模型:xgb.cv函数交叉验证确定模型的最优子树个数(可视化交叉验证对数损失函数与xgboost模型子树个数的关系).交叉验证获取最优子树之后构建最优xgboost模型 目录

  3. 交叉验证(s折、分层、留一法)

    目录 交叉验证原理 交叉验证分类 1.标准交叉验证(s折交叉验证) 代码实现 2.分层交叉验证 代码实现 StratifiedKFold参数 3.留一法交叉验证 代码实现 代码说明 交叉验证原理 交叉 ...

  4. (python基础)交叉验证

    K折验证交叉验证 总的来说,交叉验证既可以解决数据集的数据量不够大问题,也可以解决参数调优的问题.这块主要有三种方式:简单交叉验证(HoldOut检验).k折交叉验证(k-fold交叉验证).自助法. ...

  5. sklearn学习-SVM例程总结3(网格搜索+交叉验证——寻找最优超参数)

    网格搜索+交叉验证--寻找最优超参数 1548962898@qq.com 连续三天写了三篇博客,主要是为了尽快了解机器学习中算法以外的重要知识,这些知识可以迁移到每一个算法中,或许说,这些知识是学习并 ...

  6. python交叉验证结合线性回归_Python机器学习之交叉验证

    交叉验证是一种非常常用的对于模型泛化能力进行评估 方法,交叉验证既可以解决数据集的数据量不够大问题,也可以解决参数调优的问题.常用的交叉验证方法有:简单交叉验证(HoldOut检验,例如train_t ...

  7. 文本分类 - 样本不平衡的解决思路与交叉验证CV的有效性

    现实情况中,很多机器学习训练集会遇到样本不均衡的情况,应对的方案也有很多种. 笔者把看到的一些内容进行简单罗列,此处还想分享的是交叉验证对不平衡数据训练极为重要. 文章目录 1 样本不平衡的解决思路 ...

  8. 交叉验证中cv=? 与 cv=KFold(n_splits=?)的区别

    这几天复习交叉验证的时候发现一个问题,学习资料中有些地方用的函数中cv=?,有些地方则用的cv=KFold(n_splits=?) 这个函数,就比如我用KNN模型做十折交叉验证: model = sk ...

  9. sklearn多分类任务自定义cv交叉验证scoring

    最近做了一个随机森林的多分类multiclass任务,要在sklearn中使用make_scorer自定义一个评价指标scoring,发现网上没有太多相关经验贴,走了很多弯路,最终还是在官方文档中找到 ...

最新文章

  1. 泛型java 代码讲解_Java泛型详解
  2. 阿里三面,P9面试官是如何360°无死角考察候选人的?
  3. docker 删除容器_Docker (二) Windows10专业版安装教程
  4. Sundown EK:漏洞利用工具中的抄袭大师
  5. centos7.6+vim8.1
  6. Grunt 常用插件
  7. 被骂十几年,躺赚上千亿!这个“土匪”行业,还能浪多久?
  8. JMH 性能测试框架
  9. linux下浏览器如何登录微信,js判断手机浏览器操作系统和微信浏览器的方法
  10. 域名和IP地址并用的理由
  11. java.util.List 的大小
  12. GHOSTXPSP3电脑爱好者V9.9美化版
  13. windows server 2016 安装有线网卡驱动
  14. html中禁止网页另存为、查看源文件、屏蔽鼠标右键
  15. MATLAB学习笔记 plotyy双y轴
  16. Video.js的简单使用介绍
  17. h5微信f分享链接给对方获取对方手机号_企业微信可以搜索微信号添加好友/客户吗?怎样主动添加通过率高?...
  18. 基于cc2530超声波测距报警系统
  19. Ubuntu|Vmware导入导出虚拟机步骤以及Ubuntu修改用户名、组名
  20. 从原始文档到KNN分类算法实现(一)

热门文章

  1. 如何使用pr的超级键效果-达到蒙版的效果
  2. VS code C语言输出位数
  3. cad线性标注命令_CAD尺寸标注命令
  4. Mac电脑下载的google chrome无法使用解决方法?
  5. word公式和图片显示不完全
  6. zzulioj1197 考试排名(一)(结构体专题)
  7. run fsck manually
  8. 最全的静态网站生成器(开源项目)
  9. Python通过MQTT协议上传物联网数据给ThingsBoard
  10. SpringSecurity(安全)