【问题标题】:Evaluating the performance of one class SVM评估一类 SVM 的性能
【发布时间】:2016-11-02 19:56:21
【问题描述】:

我一直在尝试评估我的一类 SVM 的性能。我曾尝试使用 scikit-learn 绘制 ROC 曲线,结果有点奇怪。

X_train, X_test = train_test_split(compressed_dataset,test_size = 0.5,random_state = 42)

clf = OneClassSVM(nu=0.1,kernel = "rbf", gamma =0.1)
y_score = clf.fit(X_train).decision_function(X_test)

pred = clf.predict(X_train)

fpr,tpr,thresholds = roc_curve(pred,y_score)

#绘制roc曲线

plt.figure()
plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], 'k--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.legend(loc="lower right")
plt.show()

我得到的ROC曲线:

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: scikit-learn svm


    【解决方案1】:

    这个情节有什么奇怪的地方?您修复了一组 nu 和 gamma,因此您的模型既不会过拟合也不会欠拟合。移动阈值(这是一个 ROC 变量)不会导致 100% TPR。尝试高 gamma 和非常小的 nu(训练错误的上限),你会得到更“典型”的图。

    【讨论】:

    • 相关问题:如果我绘制不同 gamma 的 OCSVM 分类器的真阳性率和假阳性率,那是 RoC 吗? IE 我有一个数据集,我通过更改超参数使用 OCSVM 对其进行分类。分类结果会产生TPR和FPR,对吧?绘制它们会给出 RoC 曲线?
    【解决方案2】:

    在我看来,得到分数:

    pred_scores = clf.score_samples(X_train)
    

    那么,pred_scores 需要在 min-max normalize 之前进行 min-max normalize

    【讨论】:

      猜你喜欢
      • 2014-03-03
      • 1970-01-01
      • 2013-12-20
      • 2020-01-13
      • 1970-01-01
      • 1970-01-01
      • 2021-06-10
      • 2022-08-19
      • 2011-12-04
      相关资源
      最近更新 更多