【问题标题】:how to measure the accuracy of knn classifier in python如何在python中测量knn分类器的准确性
【发布时间】:2013-03-27 02:41:39
【问题描述】:

我使用 knn 对我的数据集进行分类。但我不知道如何衡量训练好的分类器的准确性。 scikit 是否有任何内置函数来检查 knn 分类器的准确性?

from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier()
knn.fit(training, train_label)    
predicted = knn.predict(testing)

感谢所有帮助。谢谢

【问题讨论】:

    标签: python python-2.7 machine-learning scikit-learn knn


    【解决方案1】:

    使用sklearn.metrics.accuracy_score:

    acc = accuracy_score(test_label, predicted)
    

    【讨论】:

    • 甚至:knn.score(testing, test_label)
    • 我认为,在设计上,评估器应该与分类器分开。
    • knn.score(X, y)
    【解决方案2】:

    您可以使用此代码直接开始。它使用 IRIS 数据集。 iris 数据集中有 3 个类,Iris-Setosa, Iris-Virginica, and Iris-Versicolor

    使用此代码。这给了我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))
    

    【讨论】:

      【解决方案3】:

      另一种选择是计算混淆矩阵,它会告诉您两个类的准确性以及 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)))
      

      【讨论】:

        猜你喜欢
        • 2016-06-16
        • 2021-07-25
        • 2015-04-14
        • 2020-09-08
        • 2020-01-13
        • 2014-11-24
        • 2017-08-09
        • 2012-02-14
        • 2017-09-17
        相关资源
        最近更新 更多