我正在使用Scikit-Learn的 KNeighborsClassifier()库来使用团队名称预测足球结果。我的训练数据有18个比赛统计数据,例如进球数和犯规次数,对于我的测试组,我只能使用2个球队名称。
问题是培训功能的数量必须与测试功能的数量相匹配,否则我得到
ValueError: query data dimension must match training data dimension
我如何克服这一点,同时保持我的训练集与过去的统计数据和测试集只有团队名称?
代码
df = pd.read_csv('2013p.csv') # Training data
dftest= pd.read_csv('2014p.csv') # Test Data
X = np.array(df.drop(['FTR','BbAvH','BbAvD','BbAvA'],1)) #features
y = np.array(df['FTR']) #labels classes
Xtest = np.array(dftest.drop(['FTHG','FTAG','FTR','HTHG','HTAG','HS','AS','HST','AST','HF','AF','HC','AC','HY','AY','HR','AR','BbAvH','BbAvD','BbAvA'],1))#features
ytest = np.array(dftest['FTR']) #labels classes
clf= neighbors.KNeighborsClassifier(n_neighbors =19)#New Classifier
clf.fit(X, y)#Fit on train data
results = clf.predict(Xtest)
数据
HomeTeam, AwayTeam, FTHG, FTAG, FTR, HTHG, HTAG, HS, AS, HST, AST, HF, AF
401, 301, 2 , 3 , -1 , 1 , 1 , 5 , 7 , 3 , 5 , 2 , 4
答案 0 :(得分:1)
有趣的问题,我不是专家,但我认为您需要做以下其中一项
答案 1 :(得分:0)
训练集的形状必须与测试集的形状相同,因此请使用SelectKBest对其进行转换。
答案 2 :(得分:0)
您所拥有的功能似乎不适用于您尝试预测的问题。 (足球比赛结果)
这就是所谓的数据泄漏,即从未来到过去的信息泄露。
以下功能不适用于尚未播放的匹配项:
FTHG = Full Time Home Team Goals
FTAG = Full Time Away Team Goals
FTR = Full Time Result
HTHG = Half Time Home Team Goals
HTAG = Half Time Away Team Goals
HS = Home Team Shots
AS = Away Team Shots
HST = Home Team Shots on Target
AST = Away Team Shots on Target
HF = Home Team Fouls Committed
AF = Away Team Fouls Committed
使用它们训练模型会产生不切实际的好预测。这是因为该模型基本上将学习当FTHG> FTAG然后结果是主场胜利。
问题在于,只有在事件结束后才知道全职家庭目标,因此你没有预测能力。
您需要重新设计功能,以便仅在实际启动之前使用可用于事件的信息。
我开发了免费提供的足球预测API,并且必须仔细选择功能以避免数据泄漏。
例如,一些好的功能将是:
在实际事件发生之前,可以了解这些功能。