如何仅使用所有功能进行训练,而仅使用 2 个功能进行 SciKit 学习测试?

How to only use all features for training, but only 2 features for testing with SciKit learn?

我正在构建一个机器学习模型,用于使用 this dataset 预测英超联赛 (football/soccer) 结果,该模型具有主场进球、客场进球、射正等功能。这是我的我加载数据集后的当前代码:

features = list(data.columns.values)
X, y = data[features], data.FTR     #FTR stands for Full Time Result
print(X.shape)
  -> (4940, 20)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=18)
nb = GaussianNB()
nb.fit(X_train, y_train)
y_nb = nb.predict(X_test)

这提供了非常好的准确率 (72%),但这是因为当我要求模型预测结果时,我让它可以访问我预测的比赛的统计数据(包括进球数)我试图预测。有没有办法 "hide" 除主队和客队之外的所有特征并以这种方式预测结果?

我试过这样做:

 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=18)
 X_test = X_test.iloc[:, [0, 1]] #this only keeps the column with home team name and away team name
 nb = GaussianNB()
 nb.fit(X_train, y_train)
 y_nb = nb.predict(X_test)

但是,这会产生以下错误:

ValueError: operands could not be broadcast together with shapes (988,2) (20,) 

如果您想保留您的特征提供给您的所有信息,请考虑在训练您的模型之前使用游戏内统计数据的平均值或某种历史度量。即,如果 A 队在您正在训练的比赛中进 5 球之前的最后三场比赛中进了 2、3 和 1 个球,则使用最后三场比赛的平均值而不是实际总进球数本身。您的训练误差可能更高,但是当您预测新游戏时,您仍然可以使用尽可能多的数据。

正如@desertnaut 所说,当您尝试将模型训练为预测器时,请仅使用在您进行 运行 预测时可用的变量。