ฉันจะช่วยให้มั่นใจได้อย่างไรว่าข้อมูลการทดสอบไม่รั่วไหลไปสู่ข้อมูลการฝึกอบรม?


60

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

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

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

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

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


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

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

คำตอบ:


50

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

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

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

ฉันได้พบว่าการเลือกรุ่นที่เหมาะสมกว่านี้เป็นปัญหามากกว่าที่นิยมโดยเฉพาะอย่างยิ่งในเรื่องการประเมินประสิทธิภาพดู

GC Cawley และ NLC Talbot, การเลือกรุ่นที่มากเกินไปและความลำเอียงในการเลือกการประเมินผลการปฏิบัติงาน, วารสารการวิจัยการเรียนรู้ของเครื่องจักร, การวิจัย 2010, บทที่ 11, pp. 2079-2107, กรกฎาคม 2010 (www)

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

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

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


1
+1 ฉันรู้สึกประทับใจกับคำตอบที่ได้รับจากประสบการณ์และความสามารถในการตอบคำถาม
whuber

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

น่าสนใจมาก. (ฉันได้อัปเดตคำถามด้วยตัวเองเพราะคำตอบของคุณทำให้ฉันขอบคุณมากขึ้น)
whuber

2
(+1) การตอบสนองที่ดี การใช้งานของหลายลักษณนามในชุดเดียวกันกับที่อัตราผลตอบแทนเกินมองโลกในแง่ของความถูกต้องวัดการทดสอบได้รับการกล่าวถึงในการเลือกลักษณนามที่ดีที่สุดและมีอคติเชิงลบในการประมาณค่าอัตราความผิดพลาด: การศึกษาเชิงประจักษ์ในการทำนายมิติสูง , BMC MRM 2009 9:85 (ที่มีสไลด์ PDF บางส่วนที่นี่ ) พร้อมการอภิปรายอื่น ๆ ในหลายกฎอคติในการเปรียบเทียบกฎการจัดประเภท (Yousefi et al., Bioinformatics 2011, 27 (12): 1675)
chl

ขอบคุณสำหรับลิงค์ไปยังเอกสารพวกเขาดูน่าสนใจ
Dikran Marsupial

15

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

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

ตามกฎทั่วไปให้หลีกเลี่ยงขั้นตอนการติดตั้งแบบจำลองที่ซับซ้อนเว้นแต่ (i) คุณรู้ว่าคุณกำลังทำอะไรและ (ii) คุณลองใช้วิธีที่ง่ายกว่าและพบว่ามันไม่ทำงานและวิธีการที่ซับซ้อนแก้ไข ปัญหาด้วยวิธีการง่าย ๆ "ง่าย" และ "ซับซ้อน" มีความหมายในแง่ของ "ง่าย" หรือ "ซับซ้อน" กับคนที่ทำข้อต่อ เหตุผลนี้สำคัญมากเพราะช่วยให้คุณสามารถใช้สิ่งที่ฉันต้องการเรียกว่า "การทดสอบการสูดดม" กับผลลัพธ์ ผลลัพธ์ดูถูกต้องไหม? คุณไม่สามารถ "ดม" ผลลัพธ์จากกระบวนการที่คุณไม่เข้าใจ

หมายเหตุ: ต่อไปส่วนที่ค่อนข้างยาวของคำตอบของฉันจะขึ้นอยู่กับประสบการณ์ของผมซึ่งอยู่ใน พื้นที่กับขนาดใหญ่อาจจะเป็น ผมเกือบจะแน่ใจว่าสิ่งที่ตามมาด้านล่างจะไม่นำไปใช้กับหรือกรณีN>>p p Np N<p

เมื่อคุณมีตัวอย่างจำนวนมากความแตกต่างระหว่างการใช้งานและไม่ใช้การสังเกตที่ให้นั้นมีขนาดเล็กมากหากการสร้างแบบจำลองของคุณไม่ได้ "ท้องถิ่น" มากเกินไป นี้เป็นเพราะอิทธิพลของจุดข้อมูลที่กำหนดโดยทั่วไปคำสั่งของ{N} ดังนั้นในชุดข้อมูลขนาดใหญ่ส่วนที่เหลือที่คุณได้รับจาก "การจับ" ชุดข้อมูลการทดสอบนั้นจะเหมือนกับชุดที่เหลือที่คุณได้รับจากการใช้ในชุดข้อมูลการฝึกอบรม คุณสามารถแสดงสิ่งนี้ได้โดยใช้กำลังสองน้อยสุดธรรมดา ส่วนที่เหลือที่คุณได้รับจากการยกเว้นการสังเกตที่ (เช่นข้อผิดพลาดของชุดทดสอบจะเป็นอย่างไรถ้าเราให้การสังเกตในชุดทดสอบ) คือโดยที่คือการฝึกอบรมที่เหลือและ1Nieitest=(1hii)1eitraineitrainhiiเป็นประโยชน์ของจุดข้อมูลที่ตอนนี้เรามีแล้วโดยที่คือจำนวนของตัวแปรในการถดถอย ตอนนี้ถ้าดังนั้นจะยากมากสำหรับจะมีขนาดใหญ่พอที่จะสร้างความแตกต่างที่เห็นได้ระหว่างชุดทดสอบและข้อผิดพลาดของชุดการฝึกอบรม เราสามารถนำตัวอย่างที่เข้าใจง่ายสมมติว่า (สกัดกั้นและตัวแปร),เมทริกซ์การออกแบบคือ (ทั้งชุดฝึกอบรมและทดสอบ) และยกระดับคือiihii=ppN>>phiip=21N×pX

hii=xiT(XTX)1xi=1Nsx2(1xi)(x2¯x¯x¯1)(1xi)=1+x~i2N

โดยที่ ,และ 2 ในที่สุดเป็นตัวแปรทำนายมาตรฐานและวัดว่าค่าเบี่ยงเบนมาตรฐานมาจากค่าเฉลี่ยเท่าใด ดังนั้นเรารู้ตั้งแต่เริ่มต้นว่าข้อผิดพลาดของชุดทดสอบจะใหญ่กว่าข้อผิดพลาดของชุดการฝึกอบรมสำหรับการสังเกต "ที่ขอบ" ของชุดการฝึกอบรม แต่นี่เป็นเรื่องที่ตัวแทนออกมาอีกครั้ง - การสังเกต "ที่ขอบ" นั้นน้อยกว่าการสังเกต "ที่อยู่ตรงกลาง" นอกจากนี้คือการสั่งซื้อ{N} ดังนั้นหากคุณมีการสังเกตครั้งแม้ว่าx¯=N1ixix2¯=N1ixi2sx2=x2¯x¯2x~i=xix¯sxxi1N100x~i=5 (ค่าที่มากกว่าใน x-space ตามคำจำกัดความส่วนใหญ่) ซึ่งหมายความว่าและข้อผิดพลาดในการทดสอบนั้นมีเพียงแค่{100} หากคุณมีชุดข้อมูลขนาดใหญ่บอกว่าก็ยังมีขนาดเล็กซึ่งน้อยกว่า{%} ในความเป็นจริงสำหรับการสังเกตครั้งคุณจะต้องมีการสังเกตเพื่อสร้างต่ำกว่าการประมาณข้อผิดพลาดของชุดทดสอบโดยใช้ข้อผิดพลาดชุดการฝึกอบรมhii=26100126100=7410010000126100001%10000x~=5025%

ดังนั้นสำหรับชุดข้อมูลขนาดใหญ่โดยใช้ชุดทดสอบไม่ได้เป็นเพียงที่ไม่มีประสิทธิภาพก็ยังเป็นที่ไม่จำเป็นตราบใดที่พี สิ่งนี้ใช้สำหรับ OLS และยังใช้กับ GLM โดยประมาณ (รายละเอียดแตกต่างกันสำหรับ GLM แต่ข้อสรุปทั่วไปเหมือนกัน) ในมากกว่ามิติ "ค่าผิดพลาด" ถูกกำหนดโดยการสังเกตด้วยคะแนน "องค์ประกอบหลัก" ขนาดใหญ่ นี้สามารถแสดงให้เห็นโดยการเขียนไหนเป็น (มุมฉาก) วิคเตอร์เมทริกซ์สำหรับกับเมทริกซ์ eigenvalue \เราได้รับโดยที่N>>p2hii=xiTEET(XTX)1EETxiEXTXΛhii=ziTΛ1zi=j=1pzji2Λjjzi=ETxiเป็นคะแนนองค์ประกอบหลักสำหรับx_ixi

หากชุดทดสอบของคุณมีการสังเกตคุณจะได้รับรุ่นเมทริกซ์โดยที่และเป็นแถวของเมทริกซ์การออกแบบในชุดทดสอบ ดังนั้นสำหรับการถดถอย OLS คุณรู้อยู่แล้วว่าข้อผิดพลาด "ชุดทดสอบ" จะเป็นอย่างไรสำหรับการแยกข้อมูลที่เป็นไปได้ทั้งหมดในชุดการฝึกอบรมและการทดสอบ ในกรณีนี้ ( ) ไม่จำเป็นต้องแยกข้อมูลเลย คุณสามารถรายงานข้อผิดพลาดในการตั้งค่าชุด "กรณีที่ดีที่สุด" และ "กรณีที่แย่ที่สุด" เกือบทุกขนาดโดยไม่ต้องแยกข้อมูล สิ่งนี้สามารถประหยัดเวลาและทรัพยากรของพีซีได้มากke{k}test=(IkH{k})1e{k}trainH{k}=X{k}(XTX)1X{k}TX{k}N>>p

โดยทั่วไปสิ่งนี้จะลดการใช้คำสั่งลงโทษเพื่อพิจารณาความแตกต่างระหว่างข้อผิดพลาดในการฝึกอบรมและการทดสอบเช่น BIC หรือ AIC สิ่งนี้จะบรรลุผลเช่นเดียวกับที่ใช้ในชุดทดสอบอย่างมีประสิทธิภาพอย่างไรก็ตามคุณไม่ได้ถูกบังคับให้ทิ้งข้อมูลที่อาจเป็นประโยชน์ ด้วย BIC คุณกำลังประมาณหลักฐานสำหรับโมเดลซึ่งมีลักษณะทางคณิตศาสตร์เช่น:

p(D|MiI)=p(y1y2yN|MiI)

โปรดทราบว่าในขั้นตอนนี้เราไม่สามารถประมาณพารามิเตอร์ภายใน - แต่ละรุ่นจะต้องระบุอย่างสมบูรณ์หรือรวมพารามิเตอร์ภายใน อย่างไรก็ตามเราสามารถทำให้ดูเหมือนการตรวจสอบไขว้ (โดยใช้ฟังก์ชั่นการสูญเสียที่เฉพาะเจาะจง) โดยใช้กฎผลิตภัณฑ์ซ้ำแล้วซ้ำอีกจากนั้นจึงบันทึกผลลัพธ์:Mi

p(D|MiI)=p(y1|MiI)p(y2yN|y1MiI)
=p(y1|MiI)p(y2|y1MiI)p(y3yN|y1y2MiI)
==i=1Np(yi|y1yi1MiI)
log[p(D|MiI)]=i=1Nlog[p(yi|y1yi1MiI)]

สิ่งนี้ชี้ให้เห็นรูปแบบของการตรวจสอบความถูกต้องไขว้ แต่เมื่อชุดการฝึกอบรมได้รับการปรับปรุงอย่างต่อเนื่องการสังเกตครั้งละหนึ่งครั้งจากชุดทดสอบ - คล้ายกับตัวกรองคาลมาน เราทำนายการสังเกตครั้งต่อไปจากชุดทดสอบโดยใช้ชุดการฝึกปัจจุบันวัดความเบี่ยงเบนจากค่าที่สังเกตได้โดยใช้บันทึกความน่าจะเป็นแบบมีเงื่อนไขจากนั้นอัปเดตชุดการฝึกอบรมเพื่อรวมการสังเกตใหม่ แต่โปรดทราบว่าขั้นตอนนี้จะทำการย่อยข้อมูลทั้งหมดที่มีอยู่อย่างครบถ้วนในขณะเดียวกันก็ต้องแน่ใจว่าการทดสอบทุกครั้งนั้นถูกทดสอบว่าเป็นกรณีที่ "ไม่อยู่ในกลุ่มตัวอย่าง" นอกจากนี้ยังเป็นค่าคงที่ซึ่งไม่สำคัญว่าคุณจะเรียกว่า "การสังเกต 1" หรือ "การสังเกต 10" ผลลัพธ์จะเหมือนกัน (การคำนวณอาจจะง่ายกว่าสำหรับวิธีเรียงสับเปลี่ยนมากกว่าแบบอื่น) ฟังก์ชั่นการสูญเสียยังเป็น "ปรับตัว" ในที่ถ้าเรากำหนดLi=log[p(yi|y1yi1MiI)]จากนั้นความคมชัดของขึ้นอยู่กับเนื่องจากฟังก์ชั่นการสูญเสียถูกอัปเดตด้วยข้อมูลใหม่อยู่เสมอLii

ฉันขอแนะนำให้ประเมินแบบจำลองการทำนายด้วยวิธีนี้จะทำงานได้ค่อนข้างดี


4
+1 - คำแนะนำที่ดีและการอภิปรายเกี่ยวกับการใช้ประโยชน์ที่น่าสนใจ (สำหรับชุดข้อมูลขนาดใหญ่) ฉันมักจะใช้ชุดข้อมูลที่มีขนาดเล็กซึ่งมีความเหมาะสมมากเกินไปและในสถานการณ์เช่นนี้มันมักจะง่ายต่อการปรับความเป็นไปได้ที่ขอบ ("หลักฐาน") และจบลงด้วยแบบจำลองที่แย่กว่าที่คุณเริ่มด้วย ฉันสงสัยว่า AIC และ BIC คล้ายกัน "เปราะ" การเพิ่มประสิทธิภาพที่สำคัญคือรากเหง้าของความชั่วร้ายทั้งหมดในสถิติเนื่องจากตัวเลือกใด ๆ ที่คุณเลือกหรือพารามิเตอร์ที่คุณปรับแต่งตามตัวอย่าง จำกัด นำเสนอความเป็นไปได้ของการปรับให้เหมาะสมมากเกินไป การทำให้ชายขอบมีความปลอดภัยมากขึ้น แต่โดยทั่วไปมีราคาแพงในการคำนวณ
Dikran Marsupial

2
+1 - โดยเฉพาะในย่อหน้าที่สาม (ใช้วิธีการง่าย ๆ ก่อน) เตือนความทรงจำอันดีของเฒ่า หากผู้เรียนเครื่องจะเก็บที่ในใจก่อนที่จะเผยแพร่ความพยายามของพวกเขาไม่เพียงพอที่จะพิสูจน์ความเหนือกว่าของอัลกอริทึมพันธุ์ใหม่ของพวกเขา ...
Steffen

8

ผมคิดว่าวิธีเดียวที่จะรับประกันนี้คือการที่คนอื่นมีข้อมูลการทดสอบ ในความสัมพันธ์กับลูกค้าที่ปรึกษาสามารถจัดการได้อย่างง่ายดาย: ลูกค้าให้ที่ปรึกษาในการฝึกอบรมเพื่อสร้างแบบจำลองและในการฝึกอบรมนี้ผู้ให้คำปรึกษาสามารถแยกข้อมูลในลักษณะใด ๆ ที่จำเป็นเพื่อให้แน่ใจว่า เกิดขึ้น; ต่อมาโมเดลจะถูกส่งกลับไปยังไคลเอนต์เพื่อใช้กับข้อมูลการทดสอบของพวกเขา

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

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

มีปัญหาด้านซึ่งผมคิดว่าผมควรจะพูดถึงซึ่งเป็นว่าแม้ถ้าคุณทำตามทุกขั้นตอนอย่างถูกต้องคุณยังสามารถจบลงด้วยรุ่นที่ overfitted เนื่องจากข้อมูลไม่ได้ถูกอย่างแท้จริงคือIID ตัวอย่างเช่นหากมีความสัมพันธ์ชั่วคราวในข้อมูลจากนั้นถ้าคุณนำข้อมูลการฝึกอบรมทั้งหมดของคุณจากเวลา 1-3 และทดสอบในเวลา 4 คุณอาจพบว่าข้อผิดพลาดในการทำนายนั้นใหญ่กว่าที่คาดไว้ อีกทางหนึ่งอาจมีสิ่งประดิษฐ์เฉพาะการทดลองเช่นอุปกรณ์วัดที่ใช้หรือกลุ่มของวัตถุในการทดลองของมนุษย์ซึ่งทำให้รูปแบบทั่วไปของแบบจำลองแย่ลงกว่าที่คาดไว้


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

1
บาง บริษัท ทำสิ่งนี้ตามนโยบายนำไปใช้เช่นโดยให้มีการviewกำหนดสิทธิ์ของฐานข้อมูลตามที่ทีมงานบางแห่งทำการทดสอบข้อมูลและอื่น ๆ คือการทดสอบข้อมูล
ijoseph

6

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

ให้ฉันเขียนหลักปฏิบัติที่ดีในการปฏิบัติงาน พวกเขาทั้งหมดเกิดจากข้อผิดพลาดที่ซื่อสัตย์ฉันได้ทำบางจุด:

  • แยกข้อมูลของคุณออกเป็นสามกลุ่ม: ฝึกอบรมตรวจสอบและทดสอบ
  • ทำความเข้าใจกับการตั้งค่าปัญหาเพื่อให้สามารถโต้แย้งสิ่งที่สมเหตุสมผลและไม่ได้ ทำความเข้าใจกับปัญหาหลายครั้งที่เข้าใจผิดอย่างลึกซึ้งในสิ่งที่ข้อมูลหมายถึงสามารถนำไปสู่การรั่วไหล ตัวอย่างเช่นในขณะที่ไม่มีใครจะฝึกอบรมและทดสอบในเฟรมเดียวกันของวิดีโอหนึ่งมันจะลึกซึ้งยิ่งขึ้นเมื่อสองเฟรมของวิดีโอเดียวกันตกอยู่ในรอยพับที่แตกต่างกันสองเฟรมของวิดีโอเดียวกันอาจแบ่งปันบุคคลเดียวกันกับแสงเดียวกันและอื่น ๆ .
  • ใช้ความระมัดระวังอย่างยิ่งกับขั้นตอนการตรวจสอบความถูกต้องของข้อมูล ยิ่งกว่านั้นกับสิ่งที่คุณไม่ได้เขียน (LIBSVM เป็นผู้กระทำความผิดใหญ่ที่นี่)
  • ทำซ้ำการทดสอบทุกครั้งอย่างน้อยสองครั้งก่อนที่จะรายงานสิ่งใด ๆ แม้ว่าจะรายงานไปยังเพื่อนร่วมงานของคุณก็ตาม การควบคุมเวอร์ชันคือเพื่อนของคุณก่อนที่จะทำการทดสอบยอมรับและจดบันทึกรหัสที่คุณกำลังใช้งานอยู่
  • ใช้ความระมัดระวังเป็นอย่างมากในการทำให้ข้อมูลของคุณเป็นปกติ หลายครั้งที่สิ่งนี้นำไปสู่การคิดว่าคุณจะมีชุดข้อมูลแบบเต็มที่คุณต้องการทดสอบในเวลาเดียวกันซึ่งอีกครั้งมักไม่เหมือนจริง

มีคำถามเกี่ยวกับชุดฝึกอบรม / การประเมินผลและฉันได้ให้ภาพรวมเชิงทฤษฎีเกี่ยวกับเรื่องนั้นที่machinelearning.stackexchange.com/a/196/114 - อธิบายการแบ่งชั้นแบบแบ่งชั้นการตรวจสอบความถูกต้องแบบครอส k-fold และการทดลองซ้ำ สำหรับใจของฉันที่ไม่มีการศึกษาวิธีการเหล่านั้นตอบคำถามข้างต้นอย่างสมบูรณ์และส่วนที่เหลือเป็นเพียง "ปัญหาของครู" นอกจากนี้วิธีปฏิบัติทั้งหมดในรายการของคุณดูเหมือนจะแก้ไข "ข้อผิดพลาดที่เลอะเทอะไม่สามารถยอมรับได้" และฉันไม่เห็นรายละเอียดปลีกย่อยใด ๆ ฉันกระตือรือร้นที่จะเข้าใจสิ่งที่ฉันหายไป - คุณสามารถแสดงความคิดเห็น?
andreister

ฉันยอมรับว่าพวกเขาทั้งหมดมาจากความเลอะเทอะ ฉันยังได้กล่าวว่าพวกเขาไม่ได้เป็นทฤษฎีเลย (ต้องบอกว่าพวกเขากำลังทำงาน) ฉันแก้ไขโพสต์ของฉันเล็กน้อย
carlosdc

5

ประเด็นสำคัญหลายข้อได้รับการครอบคลุมในคำตอบที่ยอดเยี่ยมที่ได้รับแล้ว

เมื่อเร็ว ๆ นี้ฉันได้พัฒนารายการตรวจสอบส่วนบุคคลนี้เพื่อความเป็นอิสระทางสถิติของข้อมูลการทดสอบ:

  • แบ่งข้อมูลที่ระดับสูงสุดของลำดับชั้นข้อมูล (เช่นการแยกผู้ป่วยที่ฉลาด)
  • แยกยังเป็นอิสระสำหรับคนที่รู้จักหรือสงสัยว่าจะสับสนเช่นการเปลี่ยนแปลงในแต่ละวันในเครื่องมือ ฯลฯ
  • (DoE ควรดูแลลำดับการวัดแบบสุ่ม **)
  • ขั้นตอนการคำนวณทั้งหมดที่เริ่มต้นด้วยขั้นตอนแรก (โดยปกติแล้วการประมวลผลล่วงหน้า) ที่เกี่ยวข้องกับผู้ป่วยมากกว่าหนึ่งราย * จะต้องทำการทำซ้ำสำหรับแต่ละตัวแทนจำลองในการตรวจสอบความถูกต้อง resampling อีกครั้ง สำหรับการทดสอบความผิดปกติของชุดโฮลด์เอ้าท์ / อิสระผู้ป่วยทดสอบจะต้องแยกก่อนขั้นตอนนี้
    • สิ่งนี้ไม่ว่าการคำนวณนั้นจะเรียกว่าการประมวลผลล่วงหน้าหรือถือเป็นส่วนหนึ่งของโมเดลจริง
    • ผู้ร้ายทั่วไป: หมายถึงการอยู่ตรงกลางการปรับขนาดความแปรปรวน (โดยทั่วไปจะมีอิทธิพลเพียงเล็กน้อย) การลดขนาดเช่น PCA หรือ PLS (อาจทำให้เกิดอคติอย่างหนัก
  • การเพิ่มประสิทธิภาพที่ขับเคลื่อนด้วยข้อมูลหรือการเลือกรูปแบบใด ๆ จำเป็นต้องมีการทดสอบอื่น (ภายนอก) เพื่อตรวจสอบความถูกต้องของรูปแบบสุดท้าย
  • มีประสิทธิภาพการวางนัยทั่วไปบางประเภทที่สามารถวัดได้โดยชุดการทดสอบอิสระเฉพาะเท่านั้นเช่นประสิทธิภาพการทำนายลดลงสำหรับกรณีที่วัดได้ในอนาคต (ฉันไม่ได้เกี่ยวข้องกับการคาดการณ์อนุกรมเวลา แต่สิ่งนี้ต้องการการศึกษาตรวจสอบความถูกต้องที่ออกแบบมาอย่างเหมาะสม
  • มีการรั่วไหลของข้อมูลอีกประเภทหนึ่งในสาขาของฉัน: เราทำการตรวจสอบสเปคโทรสของเนื้อเยื่อชีวภาพ การติดฉลากอ้างอิงของสเปกตรัมทดสอบนั้นจะต้องมองไม่เห็นกับข้อมูลทางสเปกโทรสโกปีแม้ว่ามันจะเป็นการล่อลวงให้ใช้การวิเคราะห์กลุ่มแล้วก็หาว่ากลุ่มใดเป็นกลุ่มของกลุ่มใด (ซึ่งจะเป็นข้อมูลทดสอบแบบกึ่งกำกับดูแล อิสระเลย)

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

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

* ฉันใช้ผู้ป่วยเป็นลำดับชั้นสูงสุดในข้อมูลเพื่อความสะดวกในการอธิบาย
** ฉันเป็นนักเคมีวิเคราะห์: ปัญหาเรื่องดริฟท์เป็นเรื่องที่รู้กันดี ในความเป็นจริงส่วนหนึ่งของการตรวจสอบความถูกต้องของวิธีการวิเคราะห์ทางเคมีคือการกำหนดความถี่ที่ต้องมีการตรวจสอบเทียบกับตัวอย่างการตรวจสอบความถูกต้องและความถี่ในการสอบเทียบที่จำเป็นต้องทำซ้ำ


FWIW: ในทางปฏิบัติฉันจัดการกับแอปพลิเคชันที่

  • pอยู่ในลำดับความสำคัญของ ,102103
  • pnrowsใหญ่กว่าแต่p
  • n P ทีฉันE n T s « หน้า10 0 - 10 1 10 2nbiol.replicatesหรือคือ (ลำดับความสำคัญ: , ไม่ค่อย )npatientsp100101102
  • ขึ้นอยู่กับวิธีการวัดสเปกโทรสโกทุกแถวของหนึ่งพูดว่าผู้ป่วยอาจจะคล้ายกันมากหรือค่อนข้างแตกต่างกันเพราะสเปกตรัมประเภทต่าง ๆ มีอัตราส่วนสัญญาณต่อเสียงรบกวน (เครื่องมือผิดพลาด) ก็แตกต่างกันตามลำดับความสำคัญหรือดังนั้น

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


2

หากฉันจำได้อย่างถูกต้องการแข่งขันการคาดการณ์บางอย่าง (เช่น Netflix หรือคนใน Kaggle) ใช้รูปแบบนี้:

มีชุดฝึกอบรมพร้อม "คำตอบ" มีชุดทดสอบ # 1 ซึ่งผู้วิจัยให้คำตอบ ผู้วิจัยพบคะแนนของพวกเขา มีชุดทดสอบ # 2 ซึ่งผู้วิจัยให้คำตอบ แต่ผู้วิจัยไม่สามารถหาคะแนนได้ นักวิจัยไม่ทราบว่ากรณีการทำนายใดอยู่ใน # 1 และ # 2

ในบางจุดชุดที่ 2 จะต้องปรากฏให้เห็น แต่คุณได้ จำกัด การปนเปื้อนอย่างน้อย


2

ในบางกรณีเช่นตัวทำนายตามลำดับทางชีวภาพมันไม่เพียงพอที่จะทำให้แน่ใจว่ากรณีไม่ปรากฏในมากกว่าหนึ่งชุด คุณยังต้องกังวลเกี่ยวกับการพึ่งพาระหว่างชุด

ตัวอย่างเช่นสำหรับตัวทำนายตามลำดับเราจำเป็นต้องลบความซ้ำซ้อนโดยตรวจสอบให้แน่ใจว่าลำดับในชุดต่าง ๆ (รวมถึงชุดการตรวจสอบความถูกต้องข้ามที่แตกต่างกัน) ไม่ได้แชร์ความคล้ายคลึงกันของลำดับขั้นสูง


2

ฉันว่า "การตรวจสอบความถูกต้องข้าม k-fold" เป็นคำตอบที่ถูกต้องจากมุมมองเชิงทฤษฎี แต่คำถามของคุณดูเหมือนจะเกี่ยวกับการจัดระเบียบและการสอนสิ่งต่าง ๆ ดังนั้นฉันจะตอบแตกต่างกัน


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

นี่เป็นสิ่งที่ผิดอย่างสิ้นเชิง

  1. ถ้าเราต้องการให้นักเรียนหรือใครก็ตามที่จะเข้าใจความแตกต่างระหว่างชุดทดสอบและชุดฝึกอบรมสิ่งที่แย่ที่สุดคือให้สองชุดกับผู้ชายสองคนที่แตกต่างราวกับว่าเราคิดว่า "ในขั้นตอนนี้" ความรู้พิเศษ "คือ เป็นอันตราย นี่เป็นเหมือนแนวทางน้ำตกในการพัฒนาซอฟต์แวร์ - ไม่กี่เดือนของการออกแบบที่บริสุทธิ์จากนั้นไม่กี่เดือนของการเข้ารหัสที่บริสุทธิ์แล้วไม่กี่เดือนของการทดสอบที่บริสุทธิ์และผลการทดสอบที่น่าสงสารในที่สุด

  2. การเรียนรู้ไม่ควรเป็นน้ำตก ทุกส่วนของการเรียนรู้ - แรงจูงใจปัญหาอัลกอริทึม gotchas จริงการประเมินผล - ต้องมาพร้อมกันในขั้นตอนเล็ก ๆ (เช่นเดียวกับแนวทางความคล่องตัวในการพัฒนาซอฟต์แวร์)

บางทีทุกคนที่นี่ต้องผ่านml-class.org ของ Andrew Ng - ฉันขอให้เขาเป็นตัวอย่างของ "ความคล่องแคล่ว" ที่แข็งแกร่งถ้าคุณต้องการรูปแบบการเรียนรู้ - คนที่ไม่เคยสงสัยเลยว่า "วิธีการ ตรวจสอบให้แน่ใจว่าข้อมูลการทดสอบไม่รั่วไหลไปสู่ข้อมูลการฝึกอบรม "


โปรดทราบว่าฉันอาจเข้าใจผิดคำถามของคุณอย่างสมบูรณ์ดังนั้นขอโทษ! :)


การเรียนรู้เพื่อมนุษย์ (นั่นคือการเรียนรู้วิธีการสร้างแบบจำลองโดยทั่วไป) ไม่ควรเป็นน้ำตก แต่การเรียนรู้สำหรับแบบจำลองควร มิฉะนั้นบิตของข้อมูลทดสอบจะแอบเข้าไปในข้อมูลการฝึกอบรมและโมเดลของคุณจะมีแนวโน้มที่จะเกิดการโอเวอร์โหลดมากขึ้น
Michael McGowan

และฉันก็คิดถึงมันมากกว่าตอนท้ายของซอฟต์แวร์ ผู้ใช้สร้างแบบจำลองที่ได้รับความแม่นยำ 90% ในการฝึกอบรมและความแม่นยำ 75% ในการทดสอบ จากนั้นพวกเขาปรับแต่งลูกบิดและการตั้งค่าในซอฟต์แวร์และรับความแม่นยำ 80% จาก "การทดสอบ" พวกเขากลับไปอีกครั้งและปรับแต่งเพิ่มเติมและได้รับความแม่นยำ 85% ใน "การทดสอบ" แต่ชุดข้อมูลที่เรียกว่า "การทดสอบ" นี้ไม่ได้อยู่ในกลุ่มตัวอย่างอีกต่อไป
Michael McGowan

เผง นี่คือปัญหาการเรียนรู้ของมนุษย์ (ปัญหาครูถ้าคุณจะ) มันควรจะถูกเปิดเผยโดยเร็วที่สุดแทนที่จะซ่อนตัวโดยวิธีการประดิษฐ์ "มั่นใจว่า X จะไม่รั่วไหลลงสู่ Y"
ทะเบียน

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

@MichaelMcGowan - คุณไม่สนใจถึงประโยชน์ของการรั่วไหล - อัลกอริทึมของคุณอาจได้รับการปรับปรุงโดยใช้ชุดทดสอบ (เช่นรถไฟ + การทดสอบเป็นข้อมูลมากกว่ารถไฟเท่านั้น) มันเป็นเพียงการแลกเปลี่ยนที่แตกต่างกันความแม่นยำที่ได้รับการปรับปรุงและการวัดความแม่นยำที่ปรับปรุงใหม่ สำหรับฉันคนก่อนนั้นสำคัญกว่า
ความน่าจะเป็นทาง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.