Ошибка типа: ожидаемая последовательность или подобная массиву, полученная оценщиком KNeighborsClassifier - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь реализовать алгоритм K-NN, используя scikit-learn.Вот как выглядит мой код:

X = df.drop(columns=['Purchased'])
y = df['Purchased'].values
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, 
test_size=0.3,stratify=y)
from sklearn.preprocessing import StandardScaler  
scaler = StandardScaler()  
scaler.fit(X_train)
X_train = scaler.transform(X_train)  
X_test = scaler.transform(X_test)  
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors = 3)
knn.fit(X_train,y_train)
knn.predict(X_test)
knn.score(X_test, y_test)
from sklearn.metrics import classification_report, confusion_matrix  
print(confusion_matrix(y_test, knn))  
print(classification_report(y_test, knn)) 

После запуска 2 последних выходных данных я получаю следующее сообщение:

TypeError: Expected sequence or array-like, got estimator KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
           metric_params=None, n_jobs=None, n_neighbors=3, p=2,
           weights='uniform')

Кто-нибудь знает, в чем проблема?Спасибо!

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Как показывает сообщение об ошибке, для функции confusion_matrix требуется последовательность или массивоподобный объект (например, список), вместо этого он получает объект KNeighborsClassifier, который в вашем случае равен knn.

Это можно исправить, сохранив выходные данные функции predict следующим образом:

my_result = knn.predict(X_test)

, затем вы можете использовать эту переменную в следующей строке как:

print(confusion_matrix(y_test, my_result))  
0 голосов
/ 17 февраля 2019
print(confusion_matrix(y_test, knn.predict(X_test))
print(classification_report(y_test, knn.predict(X_test))

В этом случае knn является объектом класса без str .Таким образом, вы должны заменить его перезапуском knn.predict.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...