วิธีการกำหนดคุณภาพของตัวแยกประเภทมัลติคลาส


30

ป.ร. ให้ไว้

  • ชุดข้อมูลที่มีอินสแตนซ์xผมพร้อมกับคลาสที่ทุกอินสแตนซ์เป็นของคลาสหนึ่งยังไม่มีข้อความxผมYผม
  • ตัวแยกประเภทมัลติคลาส

หลังจากการฝึกอบรมและการทดสอบผมโดยทั่วไปมีตารางที่มีที่จริงชั้นและคาดการณ์ระดับเช่นทุกอยู่ในชุดทดสอบ ดังนั้นทุกครั้งที่ฉันมีการแข่งขัน ( ) หรือ miss ( )Yผมx i y i = a i y ia iaผมxผมYผม=aผมYผมaผม

ฉันจะประเมินคุณภาพของการแข่งขันได้อย่างไร ปัญหาคือบางคลาสสามารถมีสมาชิกจำนวนมากได้เช่นหลายอินสแตนซ์เป็นสมาชิก เห็นได้ชัดว่าถ้า 50% ของจุดข้อมูลทั้งหมดอยู่ในชั้นหนึ่งและตัวจําแนกสุดท้ายของฉันนั้นถูกต้อง 50% โดยรวมแล้วฉันก็ไม่ได้อะไรเลย ฉันสามารถสร้างลักษณนามเล็กน้อยที่เอาท์พุทว่าคลาสที่ใหญ่ที่สุดไม่ว่าอินพุตจะเป็นเช่นไร

มีวิธีมาตรฐานในการประมาณคุณภาพของตัวจําแนกตามการทดสอบที่ทราบชุดผลลัพธ์ของการจับคู่และการเข้าชมสำหรับแต่ละคลาสหรือไม่? อาจเป็นสิ่งสำคัญยิ่งที่จะแยกแยะอัตราการจับคู่สำหรับแต่ละชั้นเรียนหรือไม่

วิธีที่ง่ายที่สุดที่ฉันคิดได้คือยกเว้นการแข่งขันที่ถูกต้องของคลาสที่ใหญ่ที่สุด มีอะไรอีกบ้าง?


ฉันไม่แน่ใจว่าฉันเข้าใจคำถามถูกต้องหรือไม่ คุณรู้หรือไม่ว่าConfusion Matrix และมาตรการที่ได้รับมา ? นี่เป็นคำตอบสำหรับคำถามของคุณหรือไม่ หรือคุณอ้างถึงสิ่งที่ซับซ้อนมากขึ้น?
steffen

ฉันคิดว่านี่เป็นที่มาของความสับสนของฉัน: ในย่อหน้าแรกคุณระบุว่า.. ทุกที่ yi เป็นคลาสจริงและ ... : คุณหมายถึงอินสแตนซ์สามารถเป็น / มีมากกว่าหนึ่งคลาสหรือไม่ หรือทุกๆx ฉันเป็นสมาชิก / มีคลาสหนึ่งชั้นหรือไม่ คุณช่วยอธิบายได้ไหม? xixผม
steffen

@steffen: ฉันเคยเห็นเมทริกซ์ความสับสน ในกรณีของฉันโดยเฉพาะฉันมี 4 ชั้น ดังนั้นฉันไม่แน่ใจว่าสามารถใช้มาตรการใดที่ได้มาและสมเหตุสมผล แต่ละอยู่ในชั้นเดียวเท่านั้น อย่างไรก็ตามมีมากกว่าสองชั้นที่เป็นไปได้โดยรวมฉัน[ 1 , , N ] xii[1,,N]
Gerenuk

@steffen มาตรการที่ได้รับมานั้นใช้กับการจำแนกไบนารีเป็นหลักในขณะที่คำถามนี้ชัดเจนว่าจะจัดการกับมากกว่าสองชั้นเรียน สิ่งนี้ต้องใช้ความเข้าใจที่ถูกต้องของคำเช่น "จริงบวก"
Michael McGowan

@MichaelMcGowan ฉันขอ OP เพื่อความกระจ่างและหลังจากนั้นทำการแก้ไขเพื่อสะท้อนปัญหาหลายคลาสอย่างชัดเจนซึ่งไม่ชัดเจนก่อนการแก้ไข (IMHO)
steffen

คำตอบ:


16

เช่นเดียวกับการจำแนกประเภทไบนารีคุณสามารถใช้อัตราข้อผิดพลาดเชิงประจักษ์ในการประเมินคุณภาพของตัวจําแนกของคุณ ให้เป็นลักษณนามและx iและy iเป็นตัวอย่างในฐานข้อมูลและคลาส e r r ( g ) = 1gxiyi ตามที่คุณพูดเมื่อชั้นไม่สมดุลพื้นฐานไม่ได้ 50% แต่สัดส่วนของชั้นที่ใหญ่กว่า คุณสามารถเพิ่มน้ำหนักในแต่ละชั้นเรียนเพื่อปรับสมดุลของข้อผิดพลาด LetWYเป็นน้ำหนักของชั้นปี ตั้งค่าตุ้มน้ำหนักเช่น1

err(g)=1nin1g(xi)yi
Wyyและกำหนดข้อผิดพลาดเชิงประจักษ์ถ่วงน้ำหนักerrW(g)=11Wy1nin1yi=y
errW(g)=1ninWyi1g(xi)yi

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

เส้นโค้ง ROC สามารถขยายได้สำหรับปัญหามัลติคลาสของคุณ ฉันแนะนำให้คุณอ่านคำตอบของกระทู้นี้


1
ไม่จำเป็นต้องแบ่งข้อผิดพลาดเชิงน้ำหนักด้วยจำนวนชั้นเรียนเพื่อให้อยู่ในระดับเดียวกับข้อผิดพลาดเชิงประจักษ์หรือไม่? มิฉะนั้นมันจะใหญ่กว่านี้มาก ...
PhilippPro

17

ในการประเมินระบบการจำแนกข้อความแบบหลายทางฉันใช้ F1 และ micro-averaged F1 (การวัดแบบ F) การวัดค่า F คือการรวมกันอย่างแม่นยำของน้ำหนักและจำได้ว่า สำหรับการจำแนกเลขฐานสองวิธีไมโครและมาโครเหมือนกัน แต่สำหรับกรณีแบบหลายทางฉันคิดว่าพวกเขาอาจช่วยคุณได้ คุณสามารถนึกถึง Micro F1 เป็นส่วนผสมของความแม่นยำและการเรียกคืนที่ให้น้ำหนักที่เท่าเทียมกันสำหรับเอกสารทุกชิ้นในขณะที่ Macro F1 ให้น้ำหนักที่เท่าเทียมกันสำหรับทุกชั้นเรียน สำหรับแต่ละสมการ F- การวัดเหมือนกัน แต่คุณคำนวณความแม่นยำและการเรียกคืนที่แตกต่างกัน:

F=(β2+1)PRβ2P+R,

β

Pmicro=i=1|C|TPii=1|C|TPi+FPi,Rmicro=i=1|C|TPii=1|C|TPi+FNi

Pmacro=1|C|i=1|C|TPผมTPผม+FPผม,Rม.aRโอ=1|C|Σผม=1|C|TPผมTPผม+Fยังไม่มีข้อความผม

ที่ไหน TP เป็นบวกที่แท้จริง FP เป็นเท็จบวก Fยังไม่มีข้อความ เป็นค่าลบเท็จและ C เป็นคลาส


1
# Function in R, using precision, recall and F statistics

check.model.accuracy <- function(predicted.class, actual.class){

  result.tbl <- as.data.frame(table(predicted.class,actual.class ) ) 

  result.tbl$Var1 <- as.character(result.tbl$predicted.class)
  result.tbl$Var2 <- as.character(result.tbl$actual.class)

  colnames(result.tbl)[1:2] <- c("Pred","Act")

  cntr <- 0  
  for (pred.class in unique(result.tbl$Pred) ){
    cntr <- cntr+ 1
    tp <- sum(result.tbl[result.tbl$Pred==pred.class & result.tbl$Act==pred.class, "Freq"])
    tp.fp <- sum(result.tbl[result.tbl$Pred == pred.class , "Freq" ])
    tp.fn <- sum(result.tbl[result.tbl$Act == pred.class , "Freq" ])
    presi <- tp/tp.fp 
    rec <- tp/tp.fn
    F.score <- 2*presi*rec/(presi+rec)
    if (cntr == 1 ) F.score.row <- cbind(pred.class, presi,rec,F.score)
    if (cntr > 1 ) F.score.row <- rbind(F.score.row,cbind(pred.class,presi,rec,F.score))
  }

  F.score.row <- as.data.frame(F.score.row) 
  return(F.score.row)
}

check.model.accuracy(predicted.df,actual.df) 
# For multiclass, average across all classes 

5
คุณสามารถเพิ่มข้อความเพื่ออธิบายสิ่งนี้ได้ไหม?
gung - Reinstate Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.