如何使用 kfold cv 训练模型

问题描述 投票:0回答:1

我想训练一个 xgboost 二元分类器。我的带有标签的训练数据位于一个 txt 文件中,其中包含 libsvms。我正在处理一个极其不平衡的数据集,其中一类大约有 200 个,另一类有 66,000 个。因此,一位顾问告诉我不要参加标准的火车测试分组。相反,他们告诉我做“一些 k 折简历”。我很困惑,因为我最后只使用 kfold 来提高模型性能,而且我不明白如何使用它来替换训练测试分割。我尝试使用 xgb.cv 和 cross_val_score 但我想要一个可以预测的模型,并且(除非我误解)这些模型不会输出我可以用来预测新点标签的模型。有人可以帮助我吗?我觉得这很简单,但也许如果我能看到一些代码,它真的会有帮助吗?我应该手动进行 k 折训练吗?我什至不知道要在这里寻找什么。我还被告知不要尝试在此分类器数据上进行分类平衡,因为我们需要基线。预先感谢!

这是我到目前为止所拥有的,但这只是给了我分数,而不是我可以用来预测的模型。我还有另一个版本的代码,其中使用 dmatrix,但这本质上是相同的事情。

from numpy import mean
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from xgboost import XGBClassifier
# generate dataset
X, y = load_svmlight_file(file_path)
# define model
model = XGBClassifier()
# define evaluation procedure
cv = RepeatedStratifiedKFold(n_splits=5, n_repeats=3, random_state=1)
# evaluate model
scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1)
mean_accuracy = scores.mean()
print(f'Mean Accuracy: {mean_accuracy}')
python xgboost k-fold xgbclassifier
1个回答
0
投票

我不确定您是否得到了不正确的建议或误解了您的顾问,但交叉验证仅用于评估模型性能,其本身不能处理不平衡的数据集。 您需要对数据进行上/下采样,或者通过相应地缩放不平衡数据集来更新损失函数。

对于 xgboost,您可能会对参数“scale_pos_weight”感兴趣。您还可以查看这篇博客文章。希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.