Несоответствующее количество образцов K Ближайший сосед Sklearn - PullRequest
0 голосов
/ 11 октября 2018

Я занимаюсь самообучением с сайта guidetodatamining.com и работаю над некоторыми вещами из K Nearest Neightbor, используя sklearn.Я получаю сообщение об ошибке: 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-массива.

Даже очень полезный толчок в правильном направлении был бы невероятно полезен, так как я смотрю на это уже 2 дня без решения.Спасибо.

1 Ответ

0 голосов
/ 12 октября 2018

Ваша проблема в создании 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"})
...