TypeError:预期序列或类似数组,得到估计器KNeighborsClassifier

问题描述 投票:0回答:2

我正在尝试使用scikit-learn实现K-NN算法。这是我的代码的样子:

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)) 

运行最后两个输出后,我收到此消息:

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')

有谁知道这是什么问题?谢谢!

python scikit-learn knn nearest-neighbor
2个回答
0
投票

正如错误提示所示,confusion_matrix函数需要一个序列或类似数组的对象(例如列表),而是获取一个KNeighborsClassifier对象,在您的情况下是knn

您可以通过保存predict函数的输出来解决此问题,如下所示:

my_result = knn.predict(X_test)

然后你可以在下一行使用这个变量:

print(confusion_matrix(y_test, my_result))  

1
投票
print(confusion_matrix(y_test, knn.predict(X_test))
print(classification_report(y_test, knn.predict(X_test))

在这种情况下,knn是类的对象,没有str实现。所以你必须用knn.predict的resault替换它。

© www.soinside.com 2019 - 2024. All rights reserved.