【问题标题】:How to only use all features for training, but only 2 features for testing with SciKit learn?如何仅使用所有功能进行训练,而仅使用 SciKit 学习测试 2 个功能?
【发布时间】:2018-11-22 20:39:43
【问题描述】:

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

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%),但这是因为当我要求模型预测结果时,我让它可以访问我正在尝试的比赛的统计数据(包括进球数)预测。有没有办法“隐藏”除主队和客队之外的所有功能并以这种方式预测结果?

我试过这样做:

 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,) 

【问题讨论】:

  • 绝对没有理由(事实上,它甚至没有意义)使用预测时不可用的特征来训练你的分类器;仅保留可用的功能并仅将它们用于您的培训...
  • @desertnaut 我理解,但是我将如何使用统计数据来创建模型,因为显然游戏内统计数据在比赛之前是不可用的。我在想要么用它们来量化一支球队相对于另一支球队有多好,要么只使用赛前可用的功能,并且基本上使用基于球队之间过去比赛的线性回归来单独预测每个统计数据......

标签: python machine-learning scikit-learn training-data


【解决方案1】:

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

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

【讨论】:

  • @rbabaghanoush 谢谢,我会尝试这样做。不使用平均值,是否可以使用线性回归预测游戏内统计数据,然后根据预测的统计数据得出匹配结果?
  • @IvanNovikov 是的,这绝对是一个选择。您必须为每个不同的游戏内变量建立一个线性回归模型,并且您必须再次将自己限制在游戏时间之前可用的变量。
猜你喜欢
  • 1970-01-01
  • 2020-05-28
  • 1970-01-01
  • 1970-01-01
  • 2017-02-04
  • 2017-04-12
  • 2016-03-16
  • 2019-02-08
  • 1970-01-01
相关资源
最近更新 更多