我想训练一个 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}')