繁体   English   中英

如何在 python 中计算一类 SVM 的准确度、F1 分数、召回率、精度和 EER?

[英]How to compute accuracy, F1-score, recall, precision and EER for one-class SVM in python?

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

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

首先,通过找出这 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM