เหตุใด K ตัวเลือกจำนวนมากจึงลดคะแนนการตรวจสอบความถูกต้องไขว้ของฉัน


11

การเล่นกับBoston Housing DatasetและRandomForestRegressor(w / พารามิเตอร์เริ่มต้น) ใน scikit-Learn ฉันสังเกตเห็นบางสิ่งที่แปลก: ค่าเฉลี่ยการตรวจสอบความถูกต้องลดลงเมื่อฉันเพิ่มจำนวน folds เกิน 10 กลยุทธ์การตรวจสอบข้ามของฉันมีดังนี้:

cv_met = ShuffleSplit(n_splits=k, test_size=1/k)
scores = cross_val_score(est, X, y, cv=cv_met)

... ที่num_cvsหลากหลาย ฉันตั้งค่าtest_sizeเป็น1/num_cvsกระจกจำลองพฤติกรรมการแยกขนาดของรถไฟ / ทดสอบของ k-fold CV โดยทั่วไปฉันต้องการบางสิ่งบางอย่างเช่น k-fold CV แต่ฉันต้องการการสุ่มด้วย (เช่น ShuffleSplit)

การทดลองนี้ซ้ำหลายครั้งแล้วคะแนนเฉลี่ยและส่วนเบี่ยงเบนมาตรฐานถูกวางแผนแล้ว

พื้นที่ของวงกลม ~ K ในการตรวจสอบความถูกต้องข้ามแบบ K-fold

(โปรดทราบว่าขนาดของkถูกระบุโดยพื้นที่ของวงกลมโดยค่าเบี่ยงเบนมาตรฐานอยู่บนแกน Y)

การเพิ่มขึ้นอย่างต่อเนื่องk(จาก 2 เป็น 44) จะให้คะแนนเพิ่มขึ้นเล็กน้อยตามด้วยการลดลงอย่างต่อเนื่องเมื่อkเพิ่มขึ้นอีก (เกิน ~ 10 เท่า)! ถ้ามีอะไรฉันคาดหวังว่าข้อมูลการฝึกอบรมเพิ่มเติมจะนำไปสู่คะแนนเพิ่มขึ้นเล็กน้อย!

ปรับปรุง

การเปลี่ยนเกณฑ์การให้คะแนนหมายถึงผลลัพธ์ข้อผิดพลาดแบบสัมบูรณ์ในพฤติกรรมที่ฉันคาดไว้: การให้คะแนนดีขึ้นเมื่อเพิ่มจำนวนเท่าใน K-fold CV แทนที่จะเข้าใกล้ 0 (เช่นเดียวกับค่าเริ่มต้น ' r2 ') คำถามนี้ยังคงเป็นเหตุผลว่าทำไมตัวชี้วัดการให้คะแนนเริ่มต้นส่งผลให้เกิดประสิทธิภาพที่ไม่ดีในทั้งตัววัดค่าเฉลี่ยและตัวชี้วัด STDเพื่อเพิ่มจำนวนเท่า


มีการบันทึกซ้ำในส่วนของคุณหรือไม่ นี้อาจจะเป็นเพราะoverfitting
มี QUIT - Anony-Mousse

1
@ Anony-Mousse No เนื่องจากชุดข้อมูล Boston Housing ไม่มีระเบียนที่ซ้ำกันและการสุ่มตัวอย่างของ ShuffleSplit ไม่ทำให้เกิดระเบียนที่ซ้ำกัน
Brian Bien

4
ปรับปรุงการวางแผนของคุณด้วย ใช้แถบข้อผิดพลาดเพื่อแสดงค่าเฉลี่ย + - stddev และต่ำสุด / สูงสุด ใส่ k บนแกนอื่น ๆ
จบแล้ว - Anony-Mousse

1
ฉันไม่คิดว่าตัวอย่างการฝึกอบรมเพิ่มเติมจะเพิ่มโอกาสในการ overfitting ฉันวางแผนการเรียนรู้ด้วยชุดข้อมูลนี้อีกครั้งโดยใช้ ShuffleSplit (n_splits = 300 ที่มีขนาดการทดสอบที่หลากหลาย) และเห็นความแม่นยำที่เพิ่มขึ้นอย่างต่อเนื่องเนื่องจากมีตัวอย่างการฝึกอบรมมากขึ้น
Brian Bien

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

คำตอบ:


1

r ^ 2 คะแนนไม่ได้กำหนดไว้เมื่อนำไปใช้กับตัวอย่างเดียว (เช่น CV แบบปล่อยครั้งเดียว)

r ^ 2 ไม่ดีสำหรับการประเมินชุดทดสอบขนาดเล็ก: เมื่อใช้เพื่อประเมินชุดการทดสอบที่มีขนาดเล็กพอเพียงคะแนนสามารถอยู่ในเชิงลบได้แม้จะมีการคาดการณ์ที่ดี

จากตัวอย่างเดียวการคาดคะเนที่ดีสำหรับโดเมนที่ระบุอาจดูแย่มาก:

from sklearn.metrics import r2_score
true = [1]
predicted = [1.01] # prediction of a single value, off by 1%
print(r2_score(true, predicted))
# 0.0

เพิ่มขนาดของชุดทดสอบ (รักษาความถูกต้องของการทำนายไว้เหมือนเดิม) และทันใดนั้นคะแนน r ^ 2 จะปรากฏขึ้นใกล้สมบูรณ์:

true = [1, 2, 3]
predicted = [1.01, 2.02, 3.03]
print(r2_score(true, predicted))
# 0.9993

นำไปสู่สุดโต่งอื่น ๆ หากขนาดการทดสอบเป็น 2 ตัวอย่างและเราได้รับการประเมิน 2 ตัวอย่างที่ใกล้เคียงกันโดยบังเอิญนี่จะมีผลกระทบอย่างมากต่อคะแนน r ^ 2 แม้ว่าการคาดการณ์จะค่อนข้างดี :

true = [20.2, 20.1] # actual target values from the Boston Housing dataset
predicted = [19, 21]
print(r2_score(true, predicted))
# -449.0
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.