样本数不一致K最近邻sklearn

时间:2018-10-11 20:08:00

标签: python python-3.x scikit-learn nearest-neighbor

我正在guide.datamining.com上做一些关于东西的自我训练,并且正在使用sklearn来做一些K Nearest Neightbor的东西。我收到错误消息:ValueError:找到输入样本数量不一致的输入变量:[2,20]

当我运行此代码时:

import pandas as pd
from sklearn.neighbors import KNeighborsClassifier
cols= ['Name', 'Sport', 'Height', 'Weight']
df = pd.read_table("https://raw.githubusercontent.com/zacharski/pg2dm-python/master/data/ch4/athletesTrainingSet.txt",  names = cols, index_col='Name')
df = df[1:]
df = df[ ['Height', 'Weight','Sport'] ]
knn = KNeighborsClassifier(n_neighbors=2)
X= df.Height, df.Weight
y = df.Sport
knn.fit(X, y)
knn.predict(X)

在数据集中,三行中的每一行都有20个,所以我不知道发生了什么。 我正在尝试使用身高和体重的朋友来帮助训练“运动”领域,以便如果您在其中输入一些数据,则“推荐”一个人将从事的运动。我知道关于LinearRegression工具也有几个类似的话题,但是我找不到任何适用于我的解决方案。我尝试重塑数据,尝试仅做身高或体重,但这在1D而不是2D数组上给我一个错误。

即使我只是朝着正确的方向轻轻地推一下,对我来说也已经非常有用了,因为我已经盯着这两天了,没有解决办法。谢谢。

1 个答案:

答案 0 :(得分:0)

您的问题出在您的x,y创作中。 x是两个熊猫数据系列,y只是一个系列。创建两个新的数据框可以解决您的问题。您可以逐行运行代码以找到它。

x= df[["Height","Weight"]]
y = df[["Sport"]]

您可以尝试将数据集拆分为集合。您可以在一组模型上训练模型,而在另一组模型上进行验证。

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(x,y,test_size=0.2)
knn.fit(X_train, y_train)
knn.predict(X_test)

您可以将目标值和预测值保存到数据框中并进行检查。

comp_results=pd.concat([y_test,pd.DataFrame(data=knn.predict(X_test),index=y_test.index.values.tolist())],axis =1).rename(columns={"Sport":"Target",0:"Prediction"})