ความแตกต่างระหว่างการตรวจสอบความถูกต้องข้ามและความร่วมมือเพื่อประเมินข้อผิดพลาดในการทำนาย


102

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

ทำงานได้ดีกว่าสำหรับชุดข้อมูลขนาดเล็กหรือชุดข้อมูลขนาดใหญ่หรือไม่

คำตอบ:


88

มันแปรปรวนและมีอคติ (ตามปกติ) CV มีแนวโน้มที่จะเอนเอียงน้อยลง แต่ K-fold CV มีความแปรปรวนค่อนข้างมาก ในทางกลับกัน bootstrapping มีแนวโน้มที่จะลดความแปรปรวนอย่างมาก แต่ให้ผลลัพธ์ที่มีอคติมากขึ้น วิธีการบูตสแตรปอื่น ๆ ได้รับการปรับให้จัดการกับ bootstrap bias (เช่นกฎ 632 และ 632+)

อีกสองวิธีคือ "มอนติคาร์โล CV" หรือที่เรียกว่า "ออกจากกลุ่ม CV" ซึ่งแยกข้อมูลแบบสุ่มจำนวนมาก (เช่นการฝึกอบรมย่อยและการทดสอบย่อย) ความแปรปรวนต่ำมากสำหรับวิธีนี้และอคติไม่เลวร้ายเกินไปหากเปอร์เซ็นต์ของข้อมูลในการรออนุมัติอยู่ในระดับต่ำ นอกจากนี้ CV ซ้ำแล้วซ้ำอีกทำให้ K-fold หลายครั้งและค่าเฉลี่ยผลลัพธ์คล้ายกับ K-fold ปกติ ฉันเป็นส่วนใหญ่ของเรื่องนี้เพราะมันรักษาอคติต่ำและลดความแปรปรวน

แก้ไข

สำหรับกลุ่มตัวอย่างขนาดใหญ่ปัญหาความแปรปรวนมีความสำคัญน้อยกว่าและส่วนการคำนวณเป็นปัญหามากกว่า ฉันยังคงใช้ CV ซ้ำสำหรับตัวอย่างขนาดเล็กและใหญ่

งานวิจัยที่เกี่ยวข้องอยู่ด้านล่าง (โดยเฉพาะคิมและโมลินาโร)

อ้างอิง

Bengio, Y. , & Grandvalet, Y. (2005) อคติในการประเมินความแปรปรวนของการตรวจสอบความถูกต้องข้ามของ k-fold การสร้างแบบจำลองและวิเคราะห์ทางสถิติสำหรับปัญหาข้อมูลที่ซับซ้อนหน้า 75–95

Braga-Neto, UM (2004) การตรวจสอบความถูกต้องไขว้ใช้ได้สำหรับการจำแนกทางจุลชีววิทยาตัวอย่างเล็ก ๆ , 20 (3), 374–380 ดอย: 10.1093 / ชีวสารสนเทศ / btg419

Efron, B. (1983) การประมาณอัตราความผิดพลาดของกฎการทำนาย: การปรับปรุงการตรวจสอบข้าม วารสารสมาคมสถิติอเมริกัน, 316–331

Efron, B. , & Tibshirani, R. (1997) การปรับปรุงการตรวจสอบข้าม: 632+ วิธีบูตสแตรป วารสารสมาคมสถิติอเมริกัน, 548–560

Furlanello, C. , Merler, S. , Chemini, C. , & Rizzoli, A. (1997) แอปพลิเคชันของกฎ bootstrap 632+ กับข้อมูลระบบนิเวศ WIRN 97

Jiang, W. , & Simon, R. (2007) การเปรียบเทียบวิธีบูตสแตรปกับวิธีบูทสแตรปที่ปรับเพื่อประเมินข้อผิดพลาดการทำนายในการจำแนกประเภทไมโครเรย์ สถิติทางการแพทย์, 26 (29), 5320–5334

โจนาธาน, พี, Krzanowski, W. , & McCarthy, W. (2000) ในการใช้การตรวจสอบข้ามในการประเมินประสิทธิภาพในการทำนายหลายตัวแปร สถิติและคอมพิวเตอร์, 10 (3), 209–229

คิม, เจ - เอช (2009) การประมาณอัตราข้อผิดพลาดการจัดหมวดหมู่: การตรวจสอบความถูกต้องข้ามซ้ำการระงับซ้ำและการบูตซ้ำ สถิติการคำนวณและการวิเคราะห์ข้อมูล, 53 (11), 3735–3745 ดอย: 10.1016 / j.csda.2009.04.009

Kohavi, R. (1995) การศึกษาการตรวจสอบข้ามและการบูตเพื่อประเมินความถูกต้องและการเลือกแบบจำลอง การประชุมร่วมกันระหว่างประเทศเกี่ยวกับปัญญาประดิษฐ์, 14, 1137–1145

มาร์ติน, J. , & Hirschberg, D. (1996) สถิติตัวอย่างเล็กน้อยสำหรับการจำแนกอัตราความผิดพลาด I: การวัดอัตราความผิดพลาด

Molinaro, AM (2005) การประมาณค่าข้อผิดพลาดการทำนาย: การเปรียบเทียบวิธีการสุ่มตัวอย่างใหม่ ชีวสารสนเทศศาสตร์, 21 (15), 3301–3307 ดอย: 10.1093 / ชีวสารสนเทศ / bti499

Sauerbrei, W. , & Schumacher 1, M. (2000) Bootstrap และการตรวจสอบความถูกต้องข้ามเพื่อประเมินความซับซ้อนของตัวแบบการถดถอยแบบขับเคลื่อนด้วยข้อมูล การวิเคราะห์ข้อมูลทางการแพทย์, 26–28

Tibshirani, RJ, & Tibshirani, R. (2009) การแก้ไขค่าไบอัสสำหรับอัตราข้อผิดพลาดขั้นต่ำในการตรวจสอบข้าม Arxiv preprint arXiv: 0908.2904


2
Bootstrap bias ไม่ใช่เชิงลบ แต่เป็นในแง่ดี (Simple Bootstrap ไม่ใช่. 0632) นี่เป็นเพราะ Bootstrap ใช้องค์ประกอบการฝึกอบรมจำนวนมากเพื่อทดสอบแบบจำลองที่นำไปสู่น้ำหนักจำนวนมากสำหรับข้อผิดพลาดตัวอย่าง
D1X

33

@ Frank Harrell ทำงานหลายอย่างกับคำถามนี้ ฉันไม่รู้การอ้างอิงเฉพาะ

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

เมื่อแบบจำลองของคุณได้รับการแก้ไขจากนั้นใช้ bootstrap ทำให้รู้สึกมากขึ้น (กับฉันอย่างน้อย)

มีการแนะนำแนวคิดเหล่านี้ (รวมถึงการทดสอบการเปลี่ยนรูป) โดยใช้ R ที่http://www.burns-stat.com/pages/Tutor/bootstrap_resampling.html


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

9

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


ขอบคุณมากสำหรับคำตอบ ฉันคิดว่าการเริ่มต้นระบบจะดีกว่าเมื่อคุณมีชุดข้อมูลขนาดเล็ก (<30 obs) ไม่มี?
อนุญาต

ฉันจะคิดอย่างนั้น การตรวจสอบความถูกต้องไขว้อาจไม่สมเหตุสมผลเมื่อคุณมีตัวอย่างขนาดเล็ก คุณสามารถออกจากการตรวจสอบข้ามหนึ่งออก แต่ที่มีแนวโน้มที่จะเกิน
เกลน

นอกจากนี้ให้สังเกตว่าการทำ bootstrapping ด้วยตัวอย่างขนาดเล็กจะนำไปสู่การประมาณค่าแบบเอนเอียงบางอย่างดังที่ระบุไว้ในกระดาษต้นฉบับของ Efron
เกลน

การวัดความแม่นยำเชิงทำนายไม่ได้เป็นวิธีในการวัดความไม่แน่นอนหรือไม่ ฉันเข้าใจว่า CV เป็นเรื่องธรรมดามากสำหรับการเลือกรูปแบบ แต่สมมติว่าฉันต้องการประมาณ AUC สำหรับ LASSO, CV หรือ bootstrapping ดีกว่าหรือไม่
Max Ghenis

9

ข้อแตกต่างประการหนึ่งคือการตรวจสอบข้ามเช่น Jackknife ใช้จุดข้อมูลทั้งหมดของคุณในขณะที่การบูตสแตรปปิ้งซึ่งสุ่มข้อมูลของคุณแบบสุ่มอาจไม่ได้คะแนนทั้งหมด

คุณสามารถ bootstrap ได้ตราบใดที่คุณต้องการหมายถึง resample ที่มีขนาดใหญ่ขึ้นซึ่งจะช่วยให้มีตัวอย่างน้อยลง

cross-validation หรือ jackknife เฉลี่ยจะเหมือนกับค่าเฉลี่ยตัวอย่างในขณะที่ค่าเฉลี่ย bootstrap นั้นไม่น่าจะเหมือนกันกับค่าเฉลี่ยตัวอย่าง

เนื่องจากการตรวจสอบความถูกต้องไขว้และน้ำหนักของแม่แรงทั้งหมดจุดตัวอย่างเดียวกันพวกเขาควรมีช่วงความเชื่อมั่นที่น้อยกว่า (แม้ว่าอาจจะไม่ถูกต้อง) กว่า bootstrap


2
นีลดูเหมือนว่าอย่างน้อย 2 ใน 4 ข้อความของคุณผิด 1. แม้ว่าตัวอย่าง Boostrap เฉพาะแต่ละอันครอบคลุม ~ 63% ของดาต้าพอยน์ดั้งเดิมถ้าเราสุ่มตัวอย่างบูทสแตรปจำนวนมาก (เช่น 10k) ตามที่เรามักจะทำโอกาสที่แต่ละจุดจะครอบคลุมอย่างน้อยหนึ่งอันนั้นเป็น 100% 2. ฉันเพิ่งตรวจสอบตัวเลขอย่างรวดเร็ว - ค่าเฉลี่ยของตัวอย่าง bootstrap และ out-of-bootstrap นั้นใกล้เคียงกับค่าเฉลี่ยของข้อมูลทั้งหมดมาก คุณสามารถตรวจสอบตัวเองได้
Kochede

นี่คือรหัส (คลิก "แก้ไข" เพื่อดูรูปแบบ): นำเข้า numpy เป็น np, pandas as pd n = 1,000 B = 1,000 y = np.random.randn (n) meanb, meanoob = [], [] สำหรับ b ใน range (B): ib = np.random.choice (n, n, แทนที่ = True) meanb = y [ib] .mean () meanb.append (meanb) indoob = np.ones (n, dtype = bool) indoob [ib] = เท็จ meanoob = y [indoob] .mean () meanoob.append (meanoob) pd.Series (meanb) .hist (histtype = 'ขั้นตอน') pd.Series (meanoob) .hist (histtype = 'ขั้นตอน' ) พิมพ์ np.mean (meanb), np.mean (meanoob), pd.Series (y) .mean ()
Kochede

@ Kochede "เป็นหลัก 100%" ไม่ใช่ 100% "ใกล้เคียงกับค่าเฉลี่ย" ไม่เหมือนกันมากกับค่าเฉลี่ย คุณกำลังใช้คำพังพอน ฉันไม่ผิด
Neil McGuigan

ดังนั้นคุณไม่เพียง แต่ให้คำตอบที่ไม่ถูกต้อง แต่คุณยังต้องยืนยันด้วยการลงโทษ การครอบคลุมข้อมูลที่คาดไว้โดยตัวอย่างบูตสแตรปมารวมกันอย่างรวดเร็วเป็น 100% ด้วยจำนวนตัวอย่างที่เพิ่มขึ้น ในการทดลองข้างต้นหลังจากตัวอย่าง bootstrap น้อยกว่า 10 ดาต้าพอยน์ทั้งหมดจะถูก bootstrap เข้าชม ในทำนองเดียวกันความคาดหวังของค่าเฉลี่ยของตัวอย่าง bootstrap เท่ากับค่าเฉลี่ยตัวอย่าง และในการทดลองด้านบนหลังจาก 1,000 ตัวอย่าง bootstrap ต่างกันน้อยกว่า 0.1% (ใช้ np.random.rand แทน randn เพราะ randn เฉลี่ยคือ 0)
Kochede

นี่คือรหัสที่อัพเดทสำหรับการอ้างอิงของคุณ: import numpy as np, pandas as pd; n = 1000; B = 1000; y = np.random.rand (n); meanb = []; covered = np.zeros (n, dtype = bool); ความคุ้มครอง = []; #begin วนซ้ำสำหรับ b ในช่วง (B): ib = np.random.choice (n, n, แทนที่ = True); covered [ib] = True; ครอบคลุม. append (covered.sum () * 1.0 / n); meanb = y [ib] .mean (); meanb.append (meanb); #end การพิมพ์แบบวนรอบ [: 10]; พิมพ์ np.mean (meanb), pd.Series (y) .mean (); พิมพ์ (np.mean (meanb) - pd.Series (y) .mean ()) / pd.Series (y) .mean ();
Kochede

2

นี่เป็นเทคนิคสองวิธีในการ resampling:

ในการตรวจสอบข้ามเราแบ่งข้อมูลแบบสุ่มเป็น kfold และช่วยในการ overfitting แต่วิธีการนี้มีข้อเสียเปรียบ เนื่องจากมันใช้ตัวอย่างแบบสุ่มดังนั้นบางตัวอย่างจึงเกิดข้อผิดพลาดที่สำคัญ เพื่อที่จะย่อขนาด CV ให้มีเทคนิค แต่มันก็ไม่ได้ทรงพลังอะไรกับปัญหาการจำแนก Bootstrap ช่วยในเรื่องนี้มันช่วยปรับปรุงข้อผิดพลาดจากการตรวจสอบตัวอย่างของตัวเอง .. สำหรับรายละเอียดโปรดดู ..

https://lagunita.stanford.edu/c4x/HumanitiesScience/StatLearning/asset/cv_boot.pdf

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