อะไรคือ“ พื้นฐาน” ในกราฟการเรียกคืนที่แม่นยำ


15

ฉันพยายามเข้าใจเส้นโค้งการเรียกคืนที่แม่นยำฉันเข้าใจว่าความแม่นยำและการเรียกคืนคืออะไร แต่สิ่งที่ฉันไม่เข้าใจคือค่า "พื้นฐาน" ฉันอ่านลิงค์นี้ https://classeval.wordpress.com/introduction/introduction-to-the-precision-recall-plot/

และฉันไม่เข้าใจส่วนพื้นฐานดังที่แสดงใน "เส้นโค้งความแม่นยำ - การเรียกคืนของตัวจําแนกที่สมบูรณ์แบบ" มันทําอะไรได้บ้าง และเราจะคำนวณได้อย่างไร มันเป็นเพียงพื้นฐานแบบสุ่มที่เราเลือก? ตัวอย่างเช่นฉันมีข้อมูลตัวสั่นด้วยความตื่นเต้นเช่นคุณลักษณะretweet,status_countและอื่น ๆ และป้ายกำกับคลาสของฉันคือFavorited1 หากรายการโปรดและ 0 หากไม่ได้รับความโปรดปรานและฉันใช้ช่องทางที่ไร้เดียงสาและตอนนี้ฉันต้องการวาดเส้นโค้งการจำคืนความแม่นยำ ?

คำตอบ:


13

"เส้นโค้งพื้นฐาน" ในพล็อตกราฟโค้ง PR เป็นเส้นแนวนอนที่มีความสูงเท่ากับจำนวนตัวอย่างบวกในจำนวนข้อมูลการฝึกอบรมทั้งหมดNเช่น สัดส่วนของตัวอย่างที่เป็นบวกในข้อมูลของเรา ( PPN )PN

ตกลงทำไมเป็นเช่นนี้ สมมติว่าเรามี "ลักษณนามขยะ" J C Jส่งกลับสุ่มความน่าจะเป็นหน้าฉันไป -th เช่นตัวอย่างที่จะอยู่ในระดับ เพื่ออำนวยความสะดวกพูด[0,1] ความหมายโดยตรงของการมอบหมายคลาสแบบสุ่มนี้คือจะมีความแม่นยำ (คาดหวัง) เท่ากับสัดส่วนของตัวอย่างเชิงบวกในข้อมูลของเรา มันเป็นธรรมชาติเท่านั้น ตัวอย่างย่อยของข้อมูลทั้งหมดของเราจะมีตัวอย่างที่ถูกจัดประเภทอย่างถูกต้อง นี้จะเป็นจริงสำหรับการใด ๆ เกณฑ์ความน่าจะเป็นCJCJpiy i A p iU [ 0 , 1 ] C J E { PiyiApiU[0,1]CJqCJq[0,1]qACJqpiU[0,1E{PN}qเราอาจจะใช้เป็นขอบเขตการตัดสินใจสำหรับความน่าจะเป็นของการเป็นสมาชิกระดับที่ส่งกลับโดยC_J(หมายถึงค่าในโดยที่ความน่าจะเป็นค่าที่มากกว่าหรือเท่ากับถูกจัดประเภทในคลาส ) ในทางกลับกันประสิทธิภาพการเรียกคืนของคือ (โดยคาดหวัง) เท่ากับถ้า . ในเกณฑ์ใดก็ตามเราจะเลือก (โดยประมาณ)ของข้อมูลทั้งหมดของเราซึ่งต่อมาจะมี (โดยประมาณ)ของจำนวนเสียงทั้งหมดของอินสแตนซ์ของคลาสCJq[0,1]qACJqq ( 100 ( 1 - q ) ) % ( 100 ( 1 - q ) ) % A x y PpiU[0,1]q(100(1q))%(100(1q))%Aในตัวอย่าง ดังนั้นเส้นแนวนอนที่เราพูดถึงตอนแรก! สำหรับค่าทุกการเรียกคืน (ค่าในการประชาสัมพันธ์กราฟ) ค่าความแม่นยำที่สอดคล้องกัน (ค่าในกราฟประชาสัมพันธ์) เท่ากับ{N}xyPN

รวดเร็วด้านหมายเหตุ: เกณฑ์คือไม่ได้โดยทั่วไปเท่ากับ 1 ลบที่คาดว่าจะเรียกคืน สิ่งนี้เกิดขึ้นในกรณีของC J ที่กล่าวถึงข้างต้นเท่านั้นเนื่องจากการกระจายแบบสุ่มของผลลัพธ์ของC J สำหรับการแจกแจงแบบต่าง ๆ (เช่นp iB ( 2 , 5 ) ) ความสัมพันธ์ที่เป็นตัวตนโดยประมาณนี้ระหว่างqและการเรียกคืนไม่ได้เก็บไว้; ใช้[ 0 , 1 ]เพราะง่ายที่สุดในการทำความเข้าใจและมองเห็นภาพทางจิตใจ สำหรับการแจกแจงแบบสุ่มที่แตกต่างกันใน[ 0qCJCJpiB(2,5)qU[0,1]โปรไฟล์ประชาสัมพันธ์ของ C Jจะไม่เปลี่ยนแปลงแม้ว่า เพียงตำแหน่งของค่า PR สำหรับค่า q ที่กำหนดจะเปลี่ยนไป[0,1]CJq

ตอนนี้เกี่ยวกับการจําแนกที่สมบูรณ์แบบหนึ่งจะหมายถึงลักษณนามว่าผลตอบแทนที่น่าจะเป็น1ตัวอย่างตัวอย่างY ฉันเป็นของชั้นถ้าY ฉันเป็นจริงในชั้นเรียนและนอกจากนี้ซีพีส่งกลับน่าจะเป็น0ถ้าy ที่ฉันไม่ได้เป็นสมาชิกของชั้นเรียน . นี่ก็หมายความว่าสำหรับเกณฑ์ใด ๆqเราจะมีความแม่นยำ100 % (เช่นในคำศัพท์กราฟเราจะได้รับบรรทัดเริ่มต้นที่ความแม่นยำ100 % ) จุดเดียวที่เราไม่ได้รับ100CP1yiAyiACP0yiAq100%100%ความแม่นยำที่ Q = 0 สำหรับ q = 0ความแม่นยำจะลดลงตามสัดส่วนของตัวอย่างที่เป็นบวกในข้อมูลของเรา ( P100%q=0q=0 ) เช่น (เมามัน?) เราจัดจุดแม้จะมี0ความน่าจะเป็นของการเป็นของชั้นว่าอยู่ในระดับ กราฟ PR ของCPมีเพียงสองค่าที่เป็นไปได้สำหรับความแม่นยำ1และPPN0AACP1 .PN

ตกลงและรหัส R เพื่อดูตัวอย่างแรกที่ส่งค่าที่ตรงกับของตัวอย่างของเรา ขอให้สังเกตว่าที่เราทำ "อ่อนมอบหมาย" ของหมวดหมู่ชั้นในแง่ที่ว่าค่าความน่าจะเป็นที่เกี่ยวข้องกับแต่ละประเมินชี้ไปที่ความเชื่อมั่นของเราที่จุดนี้เป็นของชั้น40%A

  rm(list= ls())
  library(PRROC)
  N = 40000
  set.seed(444)
  propOfPos = 0.40
  trueLabels = rbinom(N,1,propOfPos)
  randomProbsB = rbeta(n = N, 2, 5) 
  randomProbsU = runif(n = N)  

  # Junk classifier with beta distribution random results
  pr1B <- pr.curve(scores.class0 = randomProbsB[trueLabels == 1], 
                   scores.class1 = randomProbsB[trueLabels == 0], curve = TRUE) 
  # Junk classifier with uniformly distribution random results
  pr1U <- pr.curve(scores.class0 = randomProbsU[trueLabels == 1], 
                   scores.class1 = randomProbsU[trueLabels == 0], curve = TRUE) 
  # Perfect classifier with prob. 1 for positives and prob. 0 for negatives.
  pr2 <- pr.curve(scores.class0 = rep(1, times= N*propOfPos), 
                  scores.class1 = rep(0, times = N*(1-propOfPos)), curve = TRUE)

  par(mfrow=c(1,3))
  plot(pr1U, main ='"Junk" classifier (Unif(0,1))', auc.main= FALSE, 
       legend=FALSE, col='red', panel.first= grid(), cex.main = 1.5);
  pcord = pr1U$curve[ which.min( abs(pr1U$curve[,3]- 0.50)),c(1,2)];
  points( pcord[1], pcord[2], col='black', cex= 2, pch = 1)
  pcord = pr1U$curve[ which.min( abs(pr1U$curve[,3]- 0.20)),c(1,2)]; 
  points( pcord[1], pcord[2], col='black', cex= 2, pch = 17)
  plot(pr1B, main ='"Junk" classifier (Beta(2,5))', auc.main= FALSE,
       legend=FALSE, col='red', panel.first= grid(), cex.main = 1.5);
  pcord = pr1B$curve[ which.min( abs(pr1B$curve[,3]- 0.50)),c(1,2)]; 
  points( pcord[1], pcord[2], col='black', cex= 2, pch = 1)
  pcord = pr1B$curve[ which.min( abs(pr1B$curve[,3]- 0.20)),c(1,2)]; 
  points( pcord[1], pcord[2], col='black', cex= 2, pch = 17)
  plot(pr2, main = '"Perfect" classifier', auc.main= FALSE, 
       legend=FALSE, col='red', panel.first= grid(), cex.main = 1.5);  

ป้อนคำอธิบายรูปภาพที่นี่

โดยที่วงกลมสีดำและสามเหลี่ยมแสดงถึงและq = 0.20ตามลำดับในสองแปลงแรก เราจะเห็นทันทีว่าตัวแยกประเภท "ขยะ" จะไปที่ความแม่นยำเท่ากับPอย่างรวดเร็วq=0.50q=0.20PN10.401

0

สำหรับบันทึกที่มีอยู่แล้วมีบางคำตอบที่ดีมากในการ CV เกี่ยวกับประโยชน์ของเส้นโค้งประชาสัมพันธ์: ที่นี่ , ที่นี่และที่นี่ เพียงแค่อ่านผ่านพวกเขาอย่างระมัดระวังควรให้ความเข้าใจทั่วไปที่ดีเกี่ยวกับเส้นโค้งการประชาสัมพันธ์


1
เข้าร่วมชุมชนนี้ดังนั้นฉันจึงสามารถลงคะแนนได้ นี่เป็นคำอธิบายที่ยอดเยี่ยมเกี่ยวกับแนวคิดพื้นฐานในการระลึกถึงความแม่นยำ ในฐานะนักชีวสารสนเทศฉันพบว่ามันมีประโยชน์มาก
jimh

1
@jimh: ขอบคุณมันเป็นสิ่งที่ดีมากที่ได้ยินเช่นนั้น ฉันดีใจที่โพสต์นั้นมีประโยชน์
usεr11852

ฉันรู้ว่ามันไม่ใช่ความคิดเห็นที่นำข้อมูลที่มีประโยชน์มาใช้ แต่ฉันอยากจะขอบคุณมากสำหรับคำอธิบายที่ละเอียดอ่อนและชัดเจน
Ric S

0

คำตอบที่ดีข้างต้น นี่คือวิธีคิดที่เป็นธรรมชาติของฉันเกี่ยวกับมัน ลองจินตนาการว่าคุณมีลูกบอลสีแดง = บวกและเหลือง = ลบและคุณโยนมันลงในถัง = ส่วนที่เป็นบวก จากนั้นถ้าคุณมีลูกบอลสีแดงและสีเหลืองจำนวนเท่ากันเมื่อคุณคำนวณ PREC = tp / tp + fp = 100/100 + 100 จากถังสีแดงของคุณ (บวก) = เหลือง (ลบ) ดังนั้น PREC = 0.5 อย่างไรก็ตามถ้าฉันมีลูกบอลสีแดง 1,000 ลูกและลูกบอลสีเหลือง 100 ลูกจากนั้นในถังฉันคาดว่าจะสุ่ม PREC = tp / tp + fp = 1000/1000 + 100 = 0.91 เพราะนั่นคือโอกาสพื้นฐานในส่วนบวกซึ่งก็คือ RP / RP + RN โดยที่ RP = บวกจริงและ RN = ลบจริง

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