วิธีรับพารามิเตอร์ไฮเปอร์ในการตรวจสอบข้ามซ้อน


17

ฉันได้อ่านโพสต์ต่อไปนี้สำหรับการตรวจสอบความถูกต้องไขว้แบบซ้อนกันและยังไม่แน่ใจ 100% ว่าฉันต้องทำอย่างไรกับการเลือกแบบจำลองที่มีการตรวจสอบความถูกต้องไขว้แบบซ้อน:

เพื่ออธิบายความสับสนให้ฉันลองเดินผ่านการเลือกรุ่นด้วยวิธีการตรวจสอบข้ามซ้อนขั้นตอน

  1. สร้างวง CV ด้านนอกด้วย K-Fold สิ่งนี้จะถูกใช้เพื่อประเมินประสิทธิภาพของพารามิเตอร์ไฮเปอร์ที่ "ชนะ" แต่ละ CV วงใน
  2. ใช้ GridSearchCV เพื่อสร้างวง CV ภายในที่ในแต่ละวงด้านใน GSCV จะผ่านชุดค่าผสมที่เป็นไปได้ทั้งหมดของพื้นที่พารามิเตอร์และมาพร้อมกับชุดพารามิเตอร์ที่ดีที่สุด
  3. หลังจาก GSCV พบพารามิเตอร์ที่ดีที่สุดในลูปด้านในมันจะถูกทดสอบด้วยชุดทดสอบในลูปด้านนอกเพื่อรับการประมาณค่าประสิทธิภาพ
  4. จากนั้นวงรอบนอกจะอัพเดทเป็นรอยพับถัดไปในขณะที่ชุดทดสอบและส่วนที่เหลือเป็นชุดฝึกซ้อมและ 1-3 ครั้ง พารามิเตอร์ "ที่ชนะ" ทั้งหมดที่เป็นไปได้คือจำนวนการพับที่กำหนดในลูปภายนอก ดังนั้นถ้าลูปด้านนอกเท่ากับ 5 เท่าคุณจะมีการประมาณประสิทธิภาพของอัลกอริทึมที่มีพารามิเตอร์ไฮเปอร์5 ชุดที่แตกต่างกันไม่ใช่ประสิทธิภาพของไฮเปอร์เซ็ตพารามิเตอร์หนึ่งชุด

วิธีนี้แสดงให้เห็นในหน้าตัวอย่างของ SKLearn: http://scikit-learn.org/stable/auto_examples/model_selection/plot_nested_cross_validation_iris.html

คำถาม: หลังจาก4.คุณจะทราบได้อย่างไรว่าพารามิเตอร์ไฮเปอร์ใดที่ทำงานได้ดีที่สุด? ฉันเข้าใจว่าคุณต้องการฝึกอัลกอริทึมของคุณ (เช่น Logistic Regression, Random Forest เป็นต้น) ด้วยชุดข้อมูล COMPLETE ที่ส่วนท้าย แต่คุณจะทราบได้อย่างไรว่าพารามิเตอร์ไฮเปอร์ใดที่ทำงานได้ดีที่สุดในการตรวจสอบความถูกต้องไขว้ซ้อนของคุณ? ความเข้าใจของฉันคือว่าสำหรับแต่ละวงในชุดพารามิเตอร์ไฮเปอร์ที่แตกต่างกันจะชนะ และสำหรับลูปภายนอกคุณจะได้รับการประเมินประสิทธิภาพของ GridSearchCV ของคุณ แต่คุณไม่ได้รับพารามิเตอร์ไฮเปอร์ชุดใดชุดหนึ่ง ดังนั้นในการสร้างแบบจำลองขั้นสุดท้ายคุณจะรู้ได้อย่างไรว่าจะใช้พารามิเตอร์ไฮเปอร์แบบใด นั่นคือตรรกะที่ขาดหายไปที่ฉันมีปัญหาในการทำความเข้าใจกับดอกยางชนิดอื่น

ขอขอบคุณล่วงหน้าสำหรับเคล็ดลับใด ๆ โดยเฉพาะถ้า @Dikran Marsupial และ @cbeleites สามารถพูดสอดใน!

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

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


1
+1 สำหรับโน้ตบุ๊ก คำถามนี้เป็นที่สนใจของฉันเช่นกันและจะติดตาม
Arnold Klein

คำตอบ:


6

(ฉันแน่ใจว่าฉันได้เขียนคำตอบส่วนใหญ่แล้ว แต่ไม่สามารถหาได้ในตอนนี้ถ้าใครก็ตามพบคำตอบนั้น ฉันเห็น 2 แนวทางที่แตกต่างกันเล็กน้อยที่นี่ซึ่งฉันคิดว่ามีเหตุผล

แต่ก่อนอื่นคำศัพท์:

  • มาจากเขตข้อมูลที่นำไปใช้แบบจำลอง (ติดตั้ง / ผ่านการฝึกอบรม)สำหรับฉันคือพร้อมใช้งาน นั่นคือโมเดลมีข้อมูลทั้งหมดที่จำเป็นในการสร้างการทำนายสำหรับข้อมูลใหม่ ดังนั้นรูปแบบการมียังhyperparameters อย่างที่คุณจะเห็นมุมมองนี้มีความสัมพันธ์อย่างใกล้ชิดกับวิธีที่ 2 ด้านล่าง
  • OTOH อัลกอริทึมการฝึกอบรมในประสบการณ์ของฉันไม่ได้กำหนดไว้อย่างดีในแง่ต่อไปนี้: เพื่อให้ได้รูปแบบ (ติดตั้ง) ไม่เพียง แต่ - เรียกว่า "การติดตั้งหลัก" - ของพารามิเตอร์แบบจำลอง "ปกติ" ที่ต้องทำ แต่ยังต้องแก้ไขพารามิเตอร์ จากมุมมองของแอปพลิเคชันของฉันไม่แตกต่างกันมากระหว่างพารามิเตอร์และไฮเปอร์พาราเมอร์: ทั้งสองเป็นส่วนหนึ่งของแบบจำลองและจำเป็นต้องประเมิน / ตัดสินใจระหว่างการฝึกอบรม
    ผมคิดว่าความแตกต่างระหว่างพวกเขามีความเกี่ยวข้องกับความแตกต่างระหว่างคนที่พัฒนาอัลกอริทึมการฝึกอบรมใหม่ที่มักจะอธิบายระดับของขั้นตอนวิธีการฝึกอบรมร่วมกับพารามิเตอร์พวงมาลัยบาง (คนhyperparameters) ซึ่งเป็นเรื่องยาก / เป็นไปไม่ได้ที่จะแก้ไข (หรืออย่างน้อยก็เพื่อแก้ไขวิธีที่พวกเขาควรจะตัดสินใจ / ประเมิน) โดยไม่มีความรู้เกี่ยวกับแอปพลิเคชัน / โดเมน

วิธีที่ 1: ต้องการผลลัพธ์การเพิ่มประสิทธิภาพที่เสถียร

ด้วยวิธีนี้ "การฝึกอบรมรุ่น" เป็นที่เหมาะสมของ "ปกติ" พารามิเตอร์แบบและhyperparametersจะได้รับ การตรวจสอบภายในเช่นการตรวจสอบไขว้ดูแลการเพิ่มประสิทธิภาพพารามิเตอร์ไฮเปอร์พารามิเตอร์

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

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

  2. หากยังเป็นรูปแบบตัวแทนจะไม่เท่ากัน / เทียบเท่ากับแต่ละอื่น ๆ ที่เรามีปัญหาเกี่ยวกับความไม่แน่นอน

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

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

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

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

วิธีที่ 2: จัดการกับการปรับพารามิเตอร์ไฮเปอร์พารามิเตอร์เป็นส่วนหนึ่งของการฝึกอบรมแบบจำลอง

วิธีนี้เชื่อมโยงมุมมองของ "ผู้พัฒนาอัลกอริทึมการฝึกอบรม" และผู้ใช้ที่ใช้อัลกอริทึมการฝึกอบรม

นักพัฒนาอัลกอริทึมการฝึกอบรมให้ "เปล่า" model = train_naked (trainingdata, hyperparameters)ขั้นตอนวิธีการฝึกอบรม ตามที่ผู้ใช้ต้องการ tunedmodel = train_tuned (trainingdata)ซึ่งดูแลการแก้ไขพารามิเตอร์

train_tunedtrain_nakedสามารถดำเนินการได้เช่นโดยการตัดเพิ่มประสิทธิภาพการตรวจสอบตามข้ามรอบขั้นตอนวิธีการฝึกอบรมเปลือยกาย

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

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


ความแตกต่างคืออะไร?

เราอาจลงเอยด้วยโมเดลสุดท้ายที่แตกต่างกันโดยใช้แนวทางทั้งสองนี้:

  • รุ่นสุดท้ายในวิธีที่ 1 จะเป็น train_naked (all data, hyperparameters from optimization)
  • ในขณะที่วิธีที่ 2 จะใช้train_tuned (all data)และ - ตามที่เรียกใช้การเพิ่มประสิทธิภาพพารามิเตอร์ไฮเปอร์พารามิเตอร์อีกครั้งในชุดข้อมูลที่มีขนาดใหญ่ขึ้น - ซึ่งอาจสิ้นสุดด้วยชุดพารามิเตอร์ไฮเปอร์พารามิเตอร์ที่แตกต่างกัน

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


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


ตัวอย่างไอริส

สรุป:การเพิ่มประสิทธิภาพนั้นไม่มีจุดหมาย ขนาดตัวอย่างที่มีอยู่ไม่อนุญาตให้แยกความแตกต่างระหว่างประสิทธิภาพของชุดพารามิเตอร์ใด ๆ ที่นี่

อย่างไรก็ตามจากมุมมองของแอปพลิเคชันข้อสรุปคือมันไม่สำคัญว่าคุณเลือกพารามิเตอร์ใดใน 4 พารามิเตอร์ซึ่งไม่ใช่ข่าวร้ายทั้งหมด: คุณพบพารามิเตอร์ที่มีความเสถียรค่อนข้างสูง นี่คือข้อดีของการตรวจสอบความถูกต้องแบบซ้อนของโมเดลที่ได้รับการปรับ: ในขณะที่คุณไม่สามารถอ้างได้ว่ามันเป็นรุ่นที่ดีที่สุดคุณยังสามารถอ้างได้ว่าโมเดลที่สร้างขึ้นบนข้อมูลทั้งหมดโดยใช้วิธีที่ 2 ความถูกต้องประมาณ 97% (ช่วงความมั่นใจ 95% สำหรับ 145 กรณีทดสอบที่ถูกต้องจาก 150 กรณี: 92 - 99%)

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

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

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

รุ่นยาว:

สำหรับตัวอย่างผลลัพธ์บนirisชุดข้อมูล irisมี 150 กรณี, SVM ที่มีกริดของพารามิเตอร์ 2 x 2 (2 เมล็ด, 2 ออเดอร์ของขนาดสำหรับการลงโทษC) ได้รับการพิจารณา

ห่วงด้านในมีตัวแยก 129 และ 2x และ 132 (6x) เคส ชุดพารามิเตอร์ "ดีที่สุด" ไม่มีการแบ่งแยกระหว่างเคอร์เนลเชิงเส้นหรือ rbf ทั้งคู่กับ C = 1 อย่างไรก็ตามความแม่นยำในการทดสอบภายในคือทั้งหมด (รวมถึงการสูญเสีย C = 10 เสมอ) ภายในความแม่นยำ 94-98.5% ความแตกต่างที่ใหญ่ที่สุดที่เรามีในหนึ่งในการแยกคือ 3 กับ 8 ข้อผิดพลาดสำหรับ rbf กับ C = 1 กับ 10

มันไม่มีความแตกต่างที่สำคัญ ฉันไม่ทราบวิธีแยกการคาดการณ์สำหรับแต่ละกรณีใน CV แต่ถึงแม้ว่าสมมติว่ามีการแบ่งปันข้อผิดพลาด 3 ข้อและโมเดล C = 10 สร้างข้อผิดพลาดเพิ่มเติม 5 ข้อ:

> table (rbf1, rbf10)
         rbf10
rbf1      correct wrong
  correct     124     5
  wrong         0     3

> mcnemar.exact(rbf1, rbf10)

    Exact McNemar test (with central confidence intervals)

data:  rbf1 and rbf10
b = 5, c = 0, p-value = 0.0625
alternative hypothesis: true odds ratio is not equal to 1

โปรดจำไว้ว่ามีการเปรียบเทียบแบบคู่กัน 6 รายการในตาราง 2 x 2 ดังนั้นเราจะต้องแก้ไขให้ถูกต้องสำหรับการเปรียบเทียบหลายรายการเช่นกัน


วิธีที่ 1

ใน 3 จาก 4 ด้านนอกที่ rbf "ชนะ" เหนือเคอร์เนลเชิงเส้นพวกเขามีความแม่นยำโดยประมาณเท่ากัน (ฉันเดานาทีในกรณีที่ความสัมพันธ์ส่งคืนดัชนีที่เหมาะสมแรก)

การเปลี่ยนกริดเป็น params = {'kernel':['linear', 'rbf'],'C':[1,10]} อัตราผลตอบแทน

({'kernel': 'linear', 'C': 1}, 0.95238095238095233, 0.97674418604651159)
({'kernel': 'rbf', 'C': 1}, 0.95238095238095233, 0.98449612403100772)
({'kernel': 'linear', 'C': 1}, 1.0, 0.97727272727272729)
({'kernel': 'linear', 'C': 1}, 0.94444444444444442, 0.98484848484848486)
({'kernel': 'linear', 'C': 1}, 0.94444444444444442, 0.98484848484848486)
({'kernel': 'linear', 'C': 1}, 1.0, 0.98484848484848486)
({'kernel': 'linear', 'C': 1}, 1.0, 0.96212121212121215)

วิธีที่ 2:

นี่clfคือรุ่นสุดท้ายของคุณ ด้วยrandom_state = 2, rbf with C = 1 ชนะ:

In [310]: clf.grid_scores_
[...snip warning...]
Out[310]: 
[mean: 0.97333, std: 0.00897, params: {'kernel': 'linear', 'C': 1},
 mean: 0.98000, std: 0.02773, params: {'kernel': 'rbf', 'C': 1},
 mean: 0.96000, std: 0.03202, params: {'kernel': 'linear', 'C': 10},
 mean: 0.95333, std: 0.01791, params: {'kernel': 'rbf', 'C': 10}]

(ที่เกิดขึ้นประมาณ 1 ใน 5 ครั้ง 1 ใน 6 ครั้งlinearและrbfมีC = 1มีการเชื่อมโยงกับอันดับ 1)


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

@HeavyBreathing ฉันได้อ่านคำตอบแล้วและฉันก็ยังไม่ชัดเจนเกี่ยวกับ 'จะทำอย่างไรหลังจากฉันทำ CV ซ้อนกัน' คุณคิดออกอย่างชัดเจนหรือไม่?
stackunderflow

0

ฉันได้อ่านคำถามของคุณและคำตอบข้างต้น 2 ครั้ง (ครั้งที่ 1 3 เดือนที่ผ่านมา) ฉันสนใจและต้องการหาวิธีที่เหมาะสมที่สุดในการตรวจสอบความถูกต้องของข้อมูลของฉัน หลังจากการคิดและการอ่านมากมายดูเหมือนว่าฉันเจอช่องโหว่และนี่คือสิ่งที่ฉันแก้ไข:

เพื่ออธิบายความสับสนให้ฉันลองเดินผ่านการเลือกรุ่นด้วยวิธีการตรวจสอบข้ามซ้อนขั้นตอน

  1. สร้างวง CV ด้านนอกด้วย K-Fold สิ่งนี้จะถูกใช้เพื่อประเมินประสิทธิภาพของพารามิเตอร์ไฮเปอร์ที่ "ชนะ" แต่ละ CV วงใน
  2. ใช้ GridSearchCV เพื่อสร้างวง CV ภายในที่ในแต่ละวงด้านใน GSCV จะผ่านชุดค่าผสมที่เป็นไปได้ทั้งหมดของพื้นที่พารามิเตอร์และมาพร้อมกับชุดพารามิเตอร์ที่ดีที่สุด (หมายเหตุ: ที่นี่ฉันถือว่า: ข้อมูลสำหรับวงภายใน = ข้อมูลการฝึกอบรมสำหรับวงรอบนอกคุณอาจถาม: ทำไมตอบ: /programming/42228735/scikit-learn-gridsearchcv-with-multiple-repetitions/ 42230764 # 42230764อ่านส่วนคำตอบโดย Vivek Kumar ขั้นตอนที่ 4)
  3. หลังจาก GSCV พบ "พารามิเตอร์ที่ดีที่สุด" ในลูปด้านใน (ลองเรียกว่าอินเนอร์อินทิกรัล) มันจะถูกทดสอบด้วยชุดทดสอบในลูปด้านนอกเพื่อรับการประมาณค่าประสิทธิภาพ (ลองเรียกว่า outer_fold_score1)
  4. จากนั้นวงรอบนอกจะอัพเดทเป็นชุดพับถัดไปเป็นชุดทดสอบและส่วนที่เหลือเป็นชุดฝึกซ้อม (เพื่อประเมิน "ผู้ชนะภายใน" บนวงรอบนอก) "ผู้ชนะภายใน" จะถูกทดสอบอีกครั้งด้วยชุดทดสอบใหม่ (outer_fold_score2) จากนั้นลูปด้านนอกอีกครั้งจะอัพเดตเป็นโฟลด์ถัดไปจนกว่าลูปจะเสร็จสมบูรณ์ คะแนนจากแต่ละครึ่ง (outer_fold_score 1,2 .. ) จะเป็นค่าเฉลี่ยเพื่อให้ได้คะแนนของ "ผู้ชนะภายใน" สำหรับวงรอบนอก (outer_score)
  5. วงรอบนอกจะอัปเดตเป็นชุดพับถัดไปเป็นชุดทดสอบและส่วนที่เหลือเป็นชุดฝึกซ้อม (เพื่อค้นหา "ผู้ชนะเลิศ" ถัดไปและ 1-4ซ้ำ(โปรดทราบว่าเมื่อเราทำซ้ำ 1 เราจะไม่สร้าง K- ใหม่ พับ แต่เราใช้ Kfold ด้านนอกเหมือนกันทุกครั้ง)ในแต่ละรอบ 1-4 เราจะได้รับ "พารามิเตอร์ที่ดีที่สุด" (หรือ "Inner winner") กับ outer_score คนที่มี outer_score ที่ดีที่สุดจะเป็นผู้ชนะของ ผู้ชนะ

เหตุผล:

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

สิ่งนี้ตอบคำถามได้จริงหรือ
Michael R. Chernick

0

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

ตัวอย่างเช่นสมมติว่าคุณมี X,Yเป็นเมทริกซ์การออกแบบและเป้าหมายและคุณต้องการฝึกฝนตัวจําแนก:
1. ที่ใช้เฉพาะอันดับแรกx คุณสมบัติใน X ที่มีความสัมพันธ์สูงสุดกับ Y.
2. คุณเลือกค่าพารามิเตอร์ไฮเปอร์โดยลดการประเมินข้อผิดพลาดการตรวจสอบความถูกต้องข้าม 10 เท่า

หากคุณใช้สองขั้นตอนนี้กับคู่ที่เฉพาะเจาะจง X',Y' คุณจะได้อัลกอริธึมที่เฉพาะเจาะจงพร้อมชุดของคุณสมบัติที่แน่นอนและพารามิเตอร์ไฮเปอร์คงที่ซึ่งไม่จำเป็นต้องเหมือนกันกับที่คุณจะได้รับ X,Yแม้ว่าขั้นตอนการสร้างแบบจำลองจะเหมือนกันเช่น: ขั้นตอนที่ 1 + 2 ซึ่งไม่ได้เชื่อมโยงกับชุดข้อมูลใด ๆ
สมมติว่าคุณทำทุกสิ่งข้างต้นโดยไม่ต้องแยกข้อมูลของคุณเป็นการทดสอบรถไฟเพราะคุณมีชุดข้อมูลขนาดเล็กคุณจะประเมินข้อผิดพลาดทั่วไปของตัวแยกประเภทที่คุณเพิ่งสร้างได้อย่างไร คุณสามารถใช้ข้อผิดพลาดที่ดีที่สุดที่คุณพบในการตรวจสอบไขว้ที่ขั้นตอนที่ 2 ได้หรือไม่?
ไม่ปัญหาใหญ่ครั้งแรกอยู่ในขั้นตอนที่ 1 ที่คุณใช้ข้อมูลทั้งหมดเพื่อเลือกคุณสมบัติที่จะใช้ ดังนั้นแม้ว่าคุณจะทำการตรวจสอบความถูกต้องไขว้ในขั้นตอนที่ 2 ฟีเจอร์จะได้เห็นและจดจำข้อมูลบางอย่างที่อยู่ในการทดสอบการทำงานของการตรวจสอบไขว้ทุกครั้ง ผลลัพธ์จะเป็นการประเมินในแง่ดีของข้อผิดพลาดการทดสอบในแง่ดีเกินไปและสิ่งนี้เรียกว่าอคติการเลือกคุณลักษณะ ในการประเมินสิ่งนี้ในการประมาณของคุณคุณจะต้องใส่ขั้นตอนการเลือกคุณสมบัติในลูปการตรวจสอบความถูกต้องของขั้นตอนที่ 2
ตกลงตอนนี้เราดีไหม? พบข้อผิดพลาดที่ดีที่สุดในการตรวจสอบข้ามกับขั้นตอนการเลือกคุณสมบัติภายในลูปเป็นการประเมินที่ผิดพลาดของการวางนัยทั่วไปหรือไม่
ในทางทฤษฎีคำตอบยังคงไม่มีปัญหาคือว่าพารามิเตอร์ไฮเปอร์ของคุณได้ถูกเลือกเพื่อลดข้อผิดพลาดการตรวจสอบไขว้บนชุดข้อมูลเฉพาะที่คุณทิ้งดังนั้นในแง่หนึ่งคุณควรปรับพารามิเตอร์ไฮเปอร์ให้เหมาะสมกับข้อมูลของคุณด้วยความเสี่ยง over-fitting พวกเขาและสิ่งนี้เรียกว่าการตั้งค่าการเลือกแบบจำลอง. แต่นี่เป็นข้อกังวลในทางปฏิบัติหรือไม่? มันขึ้นอยู่กับการใช้งานเฉพาะ: มันมีแนวโน้มที่จะรุนแรงมากขึ้นเนื่องจาก overfitting ในการฝึกอบรมเมื่อชุดข้อมูลมีขนาดเล็กและจำนวนพารามิเตอร์ไฮเปอร์ที่จะปรับจูนค่อนข้างใหญ่ ในการพิจารณาเรื่องนี้เมื่อประมาณข้อผิดพลาดในการวางนัยทั่วไปคุณจะใช้การตรวจสอบความถูกต้องไขว้ซ้อนกันตามที่คุณอธิบายซึ่งจะให้การประมาณที่ถูกต้องสำหรับข้อผิดพลาดการวางนัยทั่วไปของคุณ
ในที่สุดเพื่อตอบคำถามสุดท้ายของคุณหลังจากมีการประเมินข้อผิดพลาดทั่วไปของ "ขั้นตอนการสร้างแบบจำลอง" ของคุณด้วยการตรวจสอบความถูกต้องไขว้ซ้อนคุณเพียงแค่ใช้ขั้นตอน (ขั้นตอน 1 + 2) กับชุดข้อมูลทั้งหมดของคุณ คุณลักษณะและการตั้งค่ามากเกินไปค่าพารามิเตอร์ แต่การรักษาในใจว่าข้อผิดพลาดที่เราคาดหวังแบบนี้จะมีในข้อมูลที่มองไม่เห็นคือการประมาณการการตรวจสอบที่ซ้อนกันข้าม

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