예. 일반적인 수신기 작동 곡선을 얻을 수없고 한 지점 만 존재하는 상황이 있습니다.
클래스 멤버쉽 확률을 출력하도록 SVM을 설정할 수 있습니다. 이것은 수신기 작동 곡선 을 생성하기 위해 임계 값이 변경되는 일반적인 값입니다 .
당신이 찾고있는 것입니까?
ROC의 단계는 일반적으로 공변량의 불연속 변화와 관련이있는 것이 아니라 적은 수의 테스트 사례에서 발생합니다 (특히, 새로운 점마다 하나의 샘플 만 변경되도록 불연속 임계 값을 선택하면 동일한 점으로 끝납니다) 할당).
코스 모델의 지속적으로 변하는 다른 (하이퍼) 파라미터는 FPR; TPR 좌표계에서 다른 곡선을 제공하는 특이성 / 감도 쌍 세트를 생성합니다.
곡선의 해석은 곡선을 생성 한 변형에 따라 다릅니다.
다음은 홍채 데이터 세트의 "versicolor"클래스에 대한 일반적인 ROC (즉, 출력으로 확률 요청)입니다.
- FPR; TPR (γ = 1, C = 1, 확률 임계 값) :
튜닝 매개 변수 γ 및 C의 함수와 동일한 유형의 좌표계이지만 TPR 및 FPR :
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)))