[英]What is the difference between a “normal” k-fold cross-validation using shuffle=True and a repeated k-fold cross-validation?
[英]How do we predict target for the test sample using k-fold cross-validation?
我正在尝试使用Spaceship Titanic在 Python 中学习 ML 技术。
我想要做的是执行 3 折交叉验证并使用来自test.csv
的功能预测目标变量( Transported
)。 我唯一能做的就是在我的训练集上教一个 model,因为它包含我的特征和我的反应。 我想做什么:
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
数据集中预测我的目标,因为它没有此列。 这项任务的正确算法是什么,我做错了什么?
PS 感谢您的耐心等待,因为我是 Python 中的 ML 及其语法的新手; 之前的经验主要是在R。
你可以这样想,交叉验证用于确定最好的 model 和优化超参数。 一旦确定了哪些 model 和超参数,您就可以使用完整数据集再次训练 model 并对未知数据进行预测。 因此,在进行最终预测时,您不应尝试使用任何交叉验证 function。相反,您应该这样做
classifier = KNeighborsClassifier(n_neighbors=10)
classifier.fit(X,y)
y_test_predictions = classifier.predict(test_ready)
在对未知数据集做出最终预测之前,您当然可以保留一些训练数据作为健全性检查 model 不会过度拟合,尽管交叉验证应该让您确信情况不会如此。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.