kNN算法中的ValueError

我有一个项目,需要在csv文件中使用kNN算法并展示选定的指标。但当我尝试展示一些指标时,出现了几个错误。

当尝试使用以下指标时:

  1. 敏感度 – print(metrics.recall_score(y_test, y_pred_class))
  2. F1分数 – print(metrics.f1_score(y_test, y_pred_class))
  3. 精确度 – print(metrics.precision_score(y_test, y_pred_class))

Pycharm抛出了以下错误:

ValueError: Target is multiclass but average=’binary’. Please choose another average setting

尝试打印ROC曲线时,错误略有不同:

ValueError: multiclass format is not supported


数据集

数据集:

数据集链接: https://www.dropbox.com/s/yt3n1eqxlsb816n/Testfile%20-%20kNN.csv?dl=0

程序

import matplotlibimport pandas as pdimport numpy as npimport mathimport matplotlib.pyplot as pltfrom matplotlib.dviread import Textfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import StandardScalerfrom sklearn.neighbors import KNeighborsClassifier#测试工具from sklearn import metricsfrom sklearn.metrics import confusion_matrixfrom sklearn.metrics import f1_scorefrom sklearn.metrics import accuracy_scoredef main():    dataset = pd.read_csv('filetestKNN.csv')    X = dataset.drop(columns=['Label'])    y = dataset['Label'].values    X_train, X_test, y_train, y_test = train_test_split(X, y,     random_state=0, test_size=0.34)    Classifier = KNeighborsClassifier(n_neighbors=2, p=2, metric='euclidean')    Classifier.fit(X_train, y_train)    y_pred_class = Classifier.predict(X_test)    y_pred_prob = Classifier.predict_proba(X_test)[:, 1]    accuracy = Classifier.score(X_test, y_test)    confusion = metrics.confusion_matrix(y_test, y_pred_class)    print()    print("准确率")    print(metrics.accuracy_score(y_test, y_pred_class))    print()    print("分类错误率")    print(1 - metrics.accuracy_score(y_test, y_pred_class))    print()    print("混淆矩阵")    print(metrics.confusion_matrix(y_test, y_pred_class))    #错误    print(metrics.recall_score(y_test, y_pred_class))    #错误    print(metrics.roc_curve(y_test, y_pred_class))    #错误    print(metrics.f1_score(y_test, y_pred_class))    #错误    print(metrics.precision_score(y_test, y_pred_class))

我只是想在屏幕上显示算法的指标。


回答:

您需要为这些sklearn.metrics函数设置average关键字参数。例如,请查看f1_score文档。以下是关于average关键字参数的部分内容:

average : string, [None, ‘binary’ (default), ‘micro’, ‘macro’, ‘samples’, ‘weighted’]

对于多类/多标签目标,此参数是必需的。如果为None,则返回每个类的分数。否则,这决定了对数据执行的平均类型:

'binary': 仅报告由pos_label指定的类的结果。这仅适用于目标(y_{true,pred})为二元的情况。'micro': 通过计算总的真阳性、假阴性和假阳性来全局计算指标。'macro': 为每个标签计算指标,并找到它们的非加权平均值。这不考虑标签不平衡。'weighted': 为每个标签计算指标,并找到它们的平均值,按支持(每个标签的真实实例数)加权。这会调整'macro'以考虑标签不平衡;它可能导致F分数不在精确度和召回率之间。'samples': 为每个实例计算指标,并找到它们的平均值(仅在多标签分类中与accuracy_score不同时有意义)。

我们可以看到,这描述了如何在您的多类任务中对不同标签的结果进行聚合。我不确定您想使用哪一个,但micro看起来不错。以下是您对f1_score的调用在选择此选项时的样子:

print(metrics.f1_score(y_test, y_pred_class, average='micro'))

您可以类似地调整其他指标。希望这对您有帮助。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注