我们如何使用 k 折交叉验证预测测试样本的目标?

How do we predict target for the test sample using k-fold cross-validation?

我正在尝试使用 Spaceship Titanic 在 Python 中学习 ML 技术。

我想做的是执行 3 折交叉验证并使用 test.csv 中的特征预测目标变量 (Transported)。我唯一能做的就是在我的训练集上教授一个模型,因为它包含我的特征和我的反应。我想做什么:

from sklearn.model_selection import train_test_split, cross_val_score, cross_val_predict, KFold
from sklearn.neighbors import KNeighborsClassifier

X, y = train_ready.drop('Transported', axis=1), train_ready['Transported']

# 3-Fold Cross-Validation -----

cross_validation = KFold(n_splits=3, random_state=2022, shuffle=True)

classifier = KNeighborsClassifier(n_neighbors=10)

scores = cross_val_score(classifier, X, y, cv=cross_validation)
y_pred = cross_val_predict(classifier, X, y, cv=cross_validation)

y_test_predictions = cross_val_predict(classifier, test_ready, cv=cross_validation)

> TypeError: fit() missing 1 required positional argument: 'y'

而且,显然,我无法从 test.csv 数据集中预测我的目标,因为它没有此列。这项任务的正确算法是什么?我做错了什么?

P.S。感谢您的耐心等待,因为我是 Python 中的 ML 及其语法的新手;以前的经验主要是在 R.

你可以这样想,交叉验证用于确定最佳模型和优化超参数。一旦确定了哪个模型和超参数,就可以使用完整数据集再次训练模型并对未知数据进行预测。因此,在进行最终预测时,您不应尝试使用任何交叉验证函数。相反,你应该做这样的事情

classifier = KNeighborsClassifier(n_neighbors=10)

classifier.fit(X,y)

y_test_predictions = classifier.predict(test_ready)

在对未知数据集做出最终预测之前,您当然可以保留一些训练数据作为健全性检查以确保模型没有过度拟合,尽管交叉验证应该让您确信情况不会如此。