簡體   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