首页 > 解决方案 > 样本数不一致 K 最近邻 sklearn

问题描述

我正在对 guidetodatamining.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 工具有几个类似的主题,但我无法获得任何适合我的解决方案。我尝试过重塑我的数据,并且我尝试过只做身高或体重,但这给了我一维数组而不是二维数组的错误。

即使只是朝着正确的方向轻推也会非常有帮助,因为我已经盯着这个 2 天了,现在没有解决方案。谢谢你。

标签: pythonpython-3.xscikit-learnnearest-neighbor

解决方案


您的问题在于您的 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"})

推荐阅读