ROC curve สำหรับตัวแยกประเภทอย่างต่อเนื่องเช่น SVM: ทำไมเราถึงเรียกมันว่า“ เส้นโค้ง”, ไม่ใช่แค่“ จุด” หรือไม่?


25

ในการอภิปราย: วิธีสร้างเส้นโค้ง roc สำหรับการจำแนกเลขฐานสองฉันคิดว่าความสับสนคือ "ตัวจําแนกแบบไบนารี" (ซึ่งเป็นลักษณนามใด ๆ ที่แยก 2 คลาส) สำหรับหยางสิ่งที่เรียกว่า "ตัวจําแนกแบบแยก" (ซึ่งผลิต ผลลัพธ์ที่ไม่ต่อเนื่อง 0/1 เหมือน SVM) และไม่ใช่เอาต์พุตต่อเนื่องเช่นตัวแยกประเภท ANN หรือ Bayes ... ฯลฯ ดังนั้นการอภิปรายเกี่ยวกับวิธีการที่ ROC ถูกพล็อตสำหรับ "ตัวแยกประเภทไบนารีต่อเนื่อง" และคำตอบก็คือเรียงลำดับผลลัพธ์ ด้วยคะแนนของพวกเขาเนื่องจากผลลัพธ์เป็นแบบต่อเนื่องและมีการใช้เกณฑ์เพื่อสร้างจุดแต่ละจุดบนกราฟ ROC

คำถามของฉันสำหรับ "ตัวแยกประเภทไบนารีไม่ต่อเนื่อง" เช่น SVM ค่าเอาต์พุตเป็น 0 หรือ 1 ดังนั้น ROC จะสร้างเพียงจุดเดียวและไม่ใช่เส้นโค้ง ฉันงงว่าทำไมเราถึงเรียกมันว่าเป็นเส้นโค้ง !! เรายังพูดถึงเกณฑ์ได้หรือไม่? หนึ่งสามารถใช้ thresholds ใน SVM โดยเฉพาะได้อย่างไร คนเราสามารถคำนวณ AUC ได้อย่างไรการตรวจสอบข้ามบทบาทมีบทบาทในที่นี้หรือไม่?


10
SVM ส่งออกมูลค่าการตัดสินใจจริงคือระยะทางที่ลงนามแล้วเพื่อแยกไฮเปอร์เพลนในพื้นที่คุณลักษณะ ในการจำแนกประเภทฉลากจะถูกกำหนดตามเครื่องหมายของมูลค่าการตัดสินใจนี้ ด้วยเหตุนี้ SVM จึงทำการส่งออกมากกว่าเพียงแค่ค่าไบนารี่เอาต์พุตของพวกเขาจะถูกนำไปประกอบเป็นขั้นตอนหลังการประมวลผลในการจำแนกประเภท
Marc Claesen

คำตอบ:


15
  • ใช่มีสถานการณ์ที่ไม่สามารถรับเส้นโค้งการทำงานของเครื่องรับตามปกติและมีเพียงจุดเดียวเท่านั้น

  • สามารถตั้งค่า SVM เพื่อให้สามารถส่งออกความน่าจะเป็นสมาชิกคลาสได้ เหล่านี้จะเป็นค่าปกติซึ่งเกณฑ์ที่จะมีการเปลี่ยนแปลงในการผลิตการดำเนินงานรับโค้ง
    นั่นคือสิ่งที่คุณกำลังมองหา?

  • ขั้นตอนใน ROC มักจะเกิดขึ้นกับกรณีทดสอบจำนวนน้อยมากกว่าที่จะทำอะไรกับความแปรผันที่ไม่ต่อเนื่องใน covariate (โดยเฉพาะคุณจบลงด้วยคะแนนเดียวกันถ้าคุณเลือกเกณฑ์ที่ไม่ต่อเนื่องดังนั้นสำหรับแต่ละจุดใหม่เพียงการเปลี่ยนแปลงตัวอย่างเดียว การมอบหมายงาน)

  • การเปลี่ยนแปลงพารามิเตอร์อื่น ๆ (ไฮเปอร์) อย่างต่อเนื่องของรูปแบบของหลักสูตรสร้างชุดของคู่ความจำเพาะ / ความไวที่ให้เส้นโค้งอื่น ๆ ใน FPR ระบบพิกัด TPR
    แน่นอนว่าการตีความเส้นโค้งขึ้นอยู่กับความผันแปรใดที่ทำให้เกิดเส้นโค้ง

นี่คือ ROC ปกติ (เช่นการร้องขอความน่าจะเป็นผลลัพธ์) สำหรับคลาส "versicolor" ของชุดข้อมูล iris:

  • FPR; TPR (γ = 1, C = 1, เกณฑ์ความน่าจะเป็น):
    ร็อค

ระบบพิกัดประเภทเดียวกัน แต่ TPR และ FPR เป็นฟังก์ชั่นของการปรับค่าพารามิเตอร์γและ C:

  • FPR; TPR (γ, C = 1, เกณฑ์ความน่าจะเป็น = 0.5):
    แกมมา

  • FPR; TPR (γ = 1, C, threshold ความน่าจะเป็น = 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

@AbdelhakMahmoudi: ฉันเดาว่าพารามิเตอร์ที่เรียนรู้จากแบบจำลองไม่ใช่สิ่งที่คุณต้องการเปลี่ยนแปลง แต่เนื่องจากคุณสามารถเอาท์พุทความน่าจะเป็นได้ (ฉันไม่ได้ขุดลงในโค้ดดังนั้นฉันไม่รู้ว่าความน่าจะเป็น SVM นั้นเทียบเท่ากับ "ยาก" จริง ๆ หรือไม่) ทำไมไม่ใช้มัน? นี่เป็นผลลัพธ์ที่พบได้ทั่วไปซึ่ง ROC ถูกสร้างขึ้น ฟังก์ชัน svm ของ R เป็นอินเทอร์เฟซสำหรับ libsvm ที่ใช้กันอย่างแพร่หลายดังนั้นคุณจึงไม่ถูก จำกัด ให้ใช้ R เพื่อทำสิ่งนี้
cbeleites รองรับโมนิก้า

these plots do have a meaning- ความหมายของแปลงเหล่านั้นคืออะไร?
Gulzar

8

Y^Y^=สัญญาณ(WTx+)W

Y^={0ถ้า  WTx+<01มิฉะนั้น

ηη

Y^={0ถ้า  WTx+<η1มิฉะนั้น

η

Wη

>>> 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 มีความเฉพาะเจาะจงกับความไวซึ่งแตกต่างกันไปตามเกณฑ์ของ covariate (ซึ่งอาจจะต่อเนื่องหรือไม่ต่อเนื่อง) ฉันคิดว่าคุณกำลังสับสนกับความแปรปรวนร่วมกับการตอบสนองและอาจไม่เข้าใจว่าโค้ง ROC คืออะไร แน่นอนว่ามันเป็นเส้นโค้งหากค่าโควาเรียตเป็นแบบต่อเนื่องและเรามองไปที่เกณฑ์สำหรับค่าความแปรปรวนร่วมที่เปลี่ยนแปลงอย่างต่อเนื่อง หากค่าความแปรปรวนร่วมไม่ต่อเนื่องคุณสามารถพล็อตได้ว่าเป็นฟังก์ชันของเกณฑ์ต่อเนื่อง จากนั้นเส้นโค้งจะแบนโดยมีขั้นตอนขึ้น (หรือลง) ที่จุดเปลี่ยนที่สอดคล้องกับค่าแยกของ covariate ดังนั้นนี่จะใช้กับ SVM และตัวแยกประเภทอื่น ๆ

เกี่ยวกับ AUC เนื่องจากเรายังมี ROC (ประมาณหนึ่ง) เรายังสามารถคำนวณพื้นที่ใต้ ฉันไม่แน่ใจว่าคุณทราบเรื่องของคุณเกี่ยวกับการตรวจสอบข้าม ในบริบทของปัญหาการจำแนกประเภทการตรวจสอบความถูกต้องของข้อมูลถูกนำมาใช้เพื่อประเมินค่าความผิดพลาดของตัวจำแนกประเภท ดังนั้นมันจึงเป็นวิธีที่เราประเมินคะแนนของ ROC


1
ตกลงอะไรคือเกณฑ์สำหรับ svm ลักษณนาม?
Abdelhak Mahmoudi

ฉันไม่รู้ โควาเรียคืออะไร? หากคุณมี covariate หนึ่งค่าใด ๆ ที่อาจเป็นเกณฑ์ หากคุณมี covariate มากกว่าหนึ่งตัวประสิทธิภาพการแยกประเภทจะขึ้นอยู่กับการเลือกค่าหลายค่าแทนที่จะเป็นขีด จำกัด เดียว แต่ก็ยังคงแตกต่างกันไปในพื้นที่ของ covariates
Michael R. Chernick

ตัวอย่างเช่น SVM เชิงเส้นจะขึ้นอยู่กับการแยกไฮเปอร์เพลนซึ่งขึ้นอยู่กับค่า C ที่เลือก (C ต่ำยอมรับข้อผิดพลาดในการฝึกอบรมเพิ่มเติม) ชุดของค่า C อาจเป็นชุดของเกณฑ์หรือไม่
Abdelhak Mahmoudi

ใช่และไม่ใช่ค่า C เพียงแค่การผสมเชิงเส้นของ covariates?
Michael R. Chernick

2
C เป็นปัจจัยการลงโทษที่นำมาใช้เพื่อควบคุมการแลกเปลี่ยนระหว่างความซับซ้อนของไฮเปอร์เพลนและข้อผิดพลาดในการฝึกอบรม อีกทางเลือกหนึ่งคือการใช้อคติ b เป็นเกณฑ์เนื่องจาก b คือระยะทางจากศูนย์กลางของพื้นที่คุณลักษณะไปยังไฮเปอร์เพลนที่แยก ดังนั้น b ที่แตกต่างกันก็เหมือนกับการเคลื่อนไฮเปอร์เพลนและมี TP และ FP ที่แตกต่างกัน! นี่คือความเข้าใจของฉัน!
Abdelhak Mahmoudi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.