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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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