Несоответствующий образец по оси Y для knn - PullRequest
1 голос
/ 19 февраля 2020

Я пытаюсь найти более гибкий сценарий ввода knn, чем учебники, основанные на наборе данных iris, но у меня возникли некоторые проблемы (я думаю), чтобы добавить соответствующее 2-е измерение в массив numpy в # 6 и когда я приду к # 11. примерка.

Файл "G: \ PROGRAMMERING \ Anaconda \ lib \ site-packages \ sklearn \ utils \ validation.py", строка 212, в check_consistent_length "samples:% r"% [int (l) для l в длинах]) ValueError: Найдены входные переменные с непоследовательным количеством выборок: [150, 1]

x равно (150,5) и y равно (150,1). 150 - это количество выборок в обоих, но они различаются по количеству полей, это проблема, и если да, то как мне это исправить?

#1. Loading the Pandas libraries as pd
import pandas as pd
import numpy as np

#2. Read data from the file 'custom.csv' placed in your code directory
data = pd.read_csv("custom.csv") 

#3. Preview the first 5 lines of the loaded data 
print(data.head())
print(type(data))

#4.Test the shape of the data
print(data.shape)
df = pd.DataFrame(data)
print(df)

#5. Convert non-numericals to numericals
print(df.dtypes)
# Any object should be converted to numerical
df['species'] = pd.Categorical(df['species'])
df['species'] = df.species.cat.codes
print("outcome:")
print(df.dtypes)

#6.Convert df to numpy.ndarray
np = df.to_numpy()
print(type(np)) #this should state <class 'numpy.ndarray'>
print(data.shape) 
print(np)
x = np.data
y = [df['species']]
print(y)

#K-nearest neighbor (find closest) - searach for the K nearest observations in the dataset
#The model calculates the distance to all, and selects the K nearest ones.
#8. Import the class you plan to use
from sklearn.neighbors import (KNeighborsClassifier)
#9. Pick a value for K
k = 2
#10. Instantiate the "estimator" (make an instance of the model)
knn  = KNeighborsClassifier(n_neighbors=k)
print(knn)
#11. fit the model with data/model training
knn.fit(x, y)
#12. Predict the response for a new observation
print(knn.predict([[3, 5, 4, 2]]))```

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

Вот как я использовал scikit-learn KNeighborsClassifier, чтобы соответствовать модели knn:

import numpy as np    
import pandas as pd
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier

df = datasets.load_iris()
X = pd.DataFrame(df.data)
y = df.target
knn = KNeighborsClassifier(n_neighbors = 2)
knn.fit(X,y)
print(knn.predict([[6, 3, 5, 2]]))
#prints output class [2]
print(knn.predict([[3, 5, 4, 2]]))
#prints output class [1]

С DataFrame вам не нужно конвертировать в numpy array, вы можете напрямую соответствовать модель на DataFrame, также при преобразовании DataFrame в numpy array вы назвали это np, которое также используется для импорта numpy вверху import numpy as np

0 голосов
/ 19 февраля 2020

Входные данные прогноза - 4 столбца, оставляя пятый «вид» без прогноза. Кроме того, если целью является «разновидность», он не может одновременно использоваться в качестве входных данных для knn. Pop удаляет этот конкретный столбец из dataFrame df.

#npdf = df.to_numpy()
df = df.apply(lambda x:pd.Series(x))
y = np.asarray(df['species'])
#removes the target from the sample
df.pop('species')
x = df.to_numpy()


...