像SVM这样的离散分类器的ROC曲线:为什么我们仍称其为“曲线”?它不只是一个“点”吗?


25

在讨论中:如何为二进制分类生成roc曲线,我认为混淆是,“二进制分类器”(可以将2个类分开的任何分类器)对于Yang来说是所谓的“离散分类器”(产生离散输出0/1,例如SVM),而不是连续输出,例如ANN或贝叶斯分类器...等。因此,讨论的是如何为“二进制连续分类器”绘制ROC,答案是对输出进行排序因为输出是连续的,所以使用它们的分数,并使用阈值在ROC曲线上产生每个点。

我的问题是针对“二进制离散分类器”,例如SVM,输出值为0或1。因此,ROC仅生成一个点,而不生成曲线。我对为什么我们仍然称其为曲线感到困惑?!我们还能谈阈值吗?特别是如何在SVM中使用阈值?如何计算AUC?交叉验证在这里起什么作用?


10
SVM输出实际决策值,即到特征空间中到分离超平面的有符号距离。在分类中,根据该决策值的符号分配标签。这样,支持向量机输出不仅仅是一个二进制值,它们的输出被二值化的只是作为分类的后处理步骤。
马克·克莱森

Answers:


15
  • 是的,在某些情况下无法获得通常的接收器工作曲线,并且仅存在一个点。

  • 可以设置SVM,以便它们输出类成员资格概率。这些将是通常的值,可以改变阈值以产生接收器工作曲线
    那是您要找的东西吗?

  • ROC中的步骤通常发生在少量测试用例中,而不是与协变量中的离散变化有任何关系(特别是,如果选择离散阈值,最终会得到相同的点,因此对于每个新点,只有一个样本发生变化其分配)。

  • 当然,连续改变模型的其他(超)参数会生成一组特异性/敏感性对,这些对将在FPR; TPR坐标系中给出其他曲线。
    曲线的解释当然取决于产生曲线的变化。

这是虹膜数据集的“ versicolor”类的常规ROC(即,请求概率作为输出):

  • FPR; TPR(γ= 1,C = 1,概率阈值):
    鹏

坐标系统类型相同,但TPR和FPR是调整参数γ和C的函数:

  • FPR; TPR(γ,C = 1,概率阈值= 0.5):
    伽玛

  • FPR; TPR(γ= 1,C,概率阈值= 0.5):
    成本

这些图确实具有含义,但是含义与通常的ROC完全不同!

这是我使用的R代码:

svmperf <- function (cost = 1, gamma = 1) {
    model <- svm (Species ~ ., data = iris, probability=TRUE, 
                  cost = cost, gamma = gamma)
    pred <- predict (model, iris, probability=TRUE, decision.values=TRUE)
    prob.versicolor <- attr (pred, "probabilities")[, "versicolor"]

    roc.pred <- prediction (prob.versicolor, iris$Species == "versicolor")
    perf <- performance (roc.pred, "tpr", "fpr")

    data.frame (fpr = perf@x.values [[1]], tpr = perf@y.values [[1]], 
                threshold = perf@alpha.values [[1]], 
                cost = cost, gamma = gamma)
}

df <- data.frame ()
for (cost in -10:10)
  df <- rbind (df, svmperf (cost = 2^cost))
head (df)
plot (df$fpr, df$tpr)

cost.df <- split (df, df$cost)

cost.df <- sapply (cost.df, function (x) {
    i <- approx (x$threshold, seq (nrow (x)), 0.5, method="constant")$y 
    x [i,]
})

cost.df <- as.data.frame (t (cost.df))
plot (cost.df$fpr, cost.df$tpr, type = "l", xlim = 0:1, ylim = 0:1)
points (cost.df$fpr, cost.df$tpr, pch = 20, 
        col = rev(rainbow(nrow (cost.df),start=0, end=4/6)))

df <- data.frame ()
for (gamma in -10:10)
  df <- rbind (df, svmperf (gamma = 2^gamma))
head (df)
plot (df$fpr, df$tpr)

gamma.df <- split (df, df$gamma)

gamma.df <- sapply (gamma.df, function (x) {
     i <- approx (x$threshold, seq (nrow (x)), 0.5, method="constant")$y
     x [i,]
})

gamma.df <- as.data.frame (t (gamma.df))
plot (gamma.df$fpr, gamma.df$tpr, type = "l", xlim = 0:1, ylim = 0:1, lty = 2)
points (gamma.df$fpr, gamma.df$tpr, pch = 20, 
        col = rev(rainbow(nrow (gamma.df),start=0, end=4/6)))

roc.df <- subset (df, cost == 1 & gamma == 1)
plot (roc.df$fpr, roc.df$tpr, type = "l", xlim = 0:1, ylim = 0:1)
points (roc.df$fpr, roc.df$tpr, pch = 20, 
        col = rev(rainbow(nrow (roc.df),start=0, end=4/6)))

1
这很清楚,谢谢。我的想法是,改变b就像移动超平面,因此具有不同的(TPR,FPR)!但是使用SVM分类器,可以得知偏差b,因此似乎是最佳参数?否?如果是这种情况,则无需执行ROC分析?
Abdelhak Mahmoudi 2012年

@AbdelhakMahmoudi:我想模型学到的参数不是您想要改变的参数。但是,由于可以得到概率输出(我没有深入研究代码,所以我不知道概率SVM是否真的等同于“硬”概率),为什么不使用它呢?这是生成ROC的非常普遍的结果。R的svm函数是广泛使用的libsvm的接口,因此不限于使用R来执行此操作。
cbeleites支持Monica 2012年

these plots do have a meaning-这些情节是什么意思?
古尔扎

8

ÿ^ÿ^=标志wŤX+bwb

ÿ^={0如果  wŤX+b<01个除此以外

ηη

ÿ^={0如果  wŤX+b<η1个除此以外

η

wbη

>>> from sklearn.svm import SVC
>>> model = SVC(kernel='linear', C=0.001, probability=False, class_weight='balanced')
>>> model.fit(X, y)
>>> # The coefficients w are given by
>>> w = list(model.coef_)
>>> # The intercept b is given by
>>> b = model.intercept_[0]
>>> y_hat = X.apply(lambda s: np.sum(np.array(s)*np.array(w))+b, axis=1)
>>> y_hat = (y_hat > eta).astype(float)

3

ROC曲线绘制的特异性与灵敏度随协变量阈值(可以是连续的或离散的)而变化。我认为您将协变量与响应混淆了,也许还没有完全理解ROC曲线是什么。如果协变量是连续的,那肯定是一条曲线,我们看一下协变量连续变化的阈值。如果协变量是离散的,您仍然可以绘制连续阈值的函数。然后,曲线将是平坦的,并且在对应于协变量离散值的阈值处向上(或向下)步进。因此,这将适用于SVM和任何其他离散分类器。

关于AUC,因为我们仍然有一个ROC(估计一个ROC),所以我们仍然可以计算其下的面积。我不确定您对交叉验证的想法有何想法。在分类问题中,使用交叉验证来获得分类器错误率的无偏或几乎无偏估计。因此,它可以进入我们如何估计ROC上的点。


1
好的,svm分类器的阈值是多少?
Abdelhak Mahmoudi 2012年

我不知道。什么是协变量?如果您有一个协变量,则任何值都可以作为阈值。如果您有多个协变量,则分类器性能取决于多个值的选择,而不是单个阈值,但是它在协变量的空间中仍会变化。
Michael R. Chernick 2012年

例如,线性SVM基于分离的超平面,该平面取决于所选的C值(低C容忍更多的训练误差),一组C值可以作为阈值集吗?
Abdelhak Mahmoudi 2012年

是的,C值不只是协变量的线性组合吗?
Michael R. Chernick 2012年

2
C是为了控制超平面复杂度和训练误差之间的权衡而引入的惩罚因子。另一种选择是使用偏差b作为阈值,因为b是从特征空间中心到分离超平面的距离。因此,改变b就像移动超平面,因此具有不同的TP和FP!这是我的理解!
Abdelhak Mahmoudi 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.