我用knn来分类我的数据集。但我不知道如何衡量训练分类器的准确性。 scikit是否有任何内置函数来检查knn分类器的准确性?
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier()
knn.fit(training, train_label)
predicted = knn.predict(testing)
感谢所有帮助。感谢
答案 0 :(得分:11)
使用sklearn.metrics.accuracy_score
:
acc = accuracy_score(test_label, predicted)
答案 1 :(得分:4)
另一种选择是计算混淆矩阵,它告诉你两个类的准确性以及alpha和beta错误:
from sklearn.metrics import confusion_matrix
con_mat = confusion_matrix(true_values, pred_values, [0, 1])
如果您的标签是0和1。 如果您想要一个不错的输出,可以添加以下代码:
from numpy import np
import math
total_accuracy = (con_mat[0, 0] + con_mat[1, 1]) / float(np.sum(con_mat))
class1_accuracy = (con_mat[0, 0] / float(np.sum(con_mat[0, :])))
class2_accuracy = (con_mat[1, 1] / float(np.sum(con_mat[1, :])))
print(con_mat)
print('Total accuracy: %.5f' % total_accuracy)
print('Class1 accuracy: %.5f' % class1_accuracy)
print('Class2 accuracy: %.5f' % class2_accuracy)
print('Geometric mean accuracy: %.5f' % math.sqrt((class1_accuracy * class2_accuracy)))
答案 2 :(得分:2)
您可以使用此代码直接入门。它使用IRIS数据集。
虹膜数据集Iris-Setosa, Iris-Virginica, and Iris-Versicolor
中有3个类。
使用此代码。这使我97.78%
的准确性
from sklearn import neighbors, datasets, preprocessing
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
iris = datasets.load_iris()
X, y = iris.data[:, :], iris.target
Xtrain, Xtest, y_train, y_test = train_test_split(X, y, stratify = y, random_state = 0, train_size = 0.7)
scaler = preprocessing.StandardScaler().fit(Xtrain)
Xtrain = scaler.transform(Xtrain)
Xtest = scaler.transform(Xtest)
knn = neighbors.KNeighborsClassifier(n_neighbors=3)
knn.fit(Xtrain, y_train)
y_pred = knn.predict(Xtest)
print(accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred))
print(confusion_matrix(y_test, y_pred))