![](/img/trans.png)
[英]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.