pyhton XGBoost交叉验证的两种方法——极简源码


前言

交叉验证其实就是对数据集进行了训练集与验证集的一个划分,一般来说对于自己写的一些算法,我们可以用sklearn的KFold方法进行数据集划分。而像XGBoost和LGBM这类工具都是大佬写的,自然顺带也给你封装了一个交叉验证方法。中本文将会介绍基于XGBoost自带的交叉验证方法和通过sklearn的划分数据集的交叉验证方法。

一、XGBoost.cv源码

XGBoost.cv,其中cv是cross validtion的缩写,即交叉验证。

import pandas as pd
import xgboost as xgb
from sklearn.metrics import f1_score


def myFeval(preds, dtrain): # 定义你自己的评价标准
	labels = dtrain.get_label()
    return 'Score', f1_score(labels , preds, average='macro')  

# 读取data和label
traindata = pd.read_csv('data/Train.csv')
trainlabel = traindata.pop('价格')

xgtrain = xgb.DMatrix(traindata, label=trainlabel)
temp = xgtrain.get_label()
param = {'max_depth': 9, 'learning_rate': 0.15, 'objective': 'reg:squarederror'}
xgb.cv(param, xgtrain, 150, nfold=5, seed=2022,callbacks=[xgb.callback.print_evaluation(show_stdv=True)],
       feval=myFeval, maximize=True) # 注意这里设置了自定义评价标准是越大越好

二、sklearn

from sklearn.model_selection import KFold
import pandas as pd
import numpy as np
import xgboost as xgb
from sklearn.metrics import f1_score


def myFeval(preds, dtrain): # 定义你自己的评价标准
	labels = dtrain.get_label()
    return 'Score', f1_score(labels , preds, average='macro')  

# 读取数据
traindata = pd.read_csv('data/Train.csv')
trainlabel = pd.DataFrame(traindata['价格'])

modelres1 = []
kf = KFold(n_splits=10, random_state=2022, shuffle=True) # 10折交叉验证
for index, (train_index, test_index) in enumerate(kf.split(traindata, trainlabel)):
	# 通过train_index 和 test_index 分别取原始数据中对应的行作为训练集以及测试集
    X_train, X_test = traindata.iloc[train_index][:].values, traindata.iloc[test_index][:].values
    y_train, y_test = trainlabel.iloc[train_index][:].values, trainlabel.iloc[test_index][:].values

    Model1 = xgb.XGBRegressor(max_depth=12, learning_rate=0.05, n_estimators=150)
    Model1.fit(X_train, y_train.ravel())

    t = Model1.predict(X_test).tolist()
    modelres1.append(myFeval(t, y_test).item()) # 单次交叉验证的得分结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是狮子搏兔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值