[英]How to compute precision, recall, accuracy and f1-score for the multiclass case with scikit learn?
[英]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.