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