【问题标题】:How to compute accuracy, F1-score, recall, precision and EER for one-class SVM in python?如何在 python 中计算一类 SVM 的准确率、F1 分数、召回率、精度和 EER?
【发布时间】:2019-11-23 20:42:30
【问题描述】:

我有一个用户收集的触摸数据集,这个数据集是 1000x31 的浮点数矩阵。如何应用一类 SVM 分类器来检测异常检测?我如何在 python 中实现这一点并计算准确率、召回率、精度、F1 分数和 EER?

我从这个链接开始,但我无法计算上述性能指标!! https://scikit-learn.org/stable/auto_examples/svm/plot_oneclass.html#sphx-glr-auto-examples-svm-plot-oneclass-py

【问题讨论】:

  • Paper Published in IEEE One-Class-Classification 请通过以上链接获取有关如何解决上述问题的参考。还要查看 SVM 分类器、准确率、召回率、精度、F1 分数和 EER 的官方文档。
  • 我检查了你的链接,发现 python 代码对计算准确率、召回率、精度、F1 分数和 EER 指标没有任何好处(你链接中的所有代码只显示了如何构建一个我已经知道的类 SVM 分类器)。所以问题还是没有解决!

标签: python


【解决方案1】:

首先,通过找出这 1000 个示例中的哪些来自将由 OCSVM 训练的类来构建您的数据。然后将 OCSVM 分成训练和测试,使用训练集进行训练,使用测试集进行验证(生成准确度、召回率、F1、准确度等指标)。

如果所有 1000 个示例都属于感兴趣的类别,您将只能找到召回率 (TP/(TP+FN)),因为您只有可以归类为真阳性的阳性文档(TP,即OCSVM 正确)或假阴性(FN,即 OCSVM 错误)。

要生成精度(TP/(TP+FP))、F1和精度(TP+TN/(TP+TN+FP+FN)),需要创建一些不属于该类的示例有趣的是,通过这些相反的例子,OCSVM 可以生成真阴性 (TN) 和假阳性 (FP)。

这是一个代码,它返回给定一组用于训练和测试的感兴趣类的文档以及一组用于测试的非感兴趣类的文档。

from sklearn.model_selection import train_test_split
from sklearn.svm import OneClassSVM
from sklearn.metrics import classification_report

def evaluation_one_class(preds_interest, preds_outliers):
  y_true = [1]*len(preds_interest) + [-1]*len(preds_outliers)
  y_pred = list(preds_interest)+list(preds_outliers)
  return classification_report(y_true, y_pred, output_dict=False)

def evaluate_model(X_train, X_test, X_outlier, model):
  
  one_class_classifier = model.fit(X_train)

  Y_pred_interest = one_class_classifier.predict(X_test)
  
  Y_pred_ruido = one_class_classifier.predict(X_outlier)

  print(evaluation_one_class(Y_pred_interest, Y_pred_ruido))


class_of_interest = ''

df_interest = df[df['target'] == class_of_interest]
df_outlier = df[df['target'] != class_of_interest]

df_train_int, df_test_int = train_test_split(df_interest,test_size=0.30, random_state=25) 

clf = OneClassSVM(gamma='auto')

evaluate_model(df_train_int, df_test_int, df_outlier, clf)

【讨论】:

    猜你喜欢
    • 2021-09-01
    • 2015-12-05
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    • 2023-03-29
    • 1970-01-01
    • 2019-09-06
    相关资源
    最近更新 更多