ชุดทดสอบและการกระจายชุดฝึกอบรมที่แตกต่างกัน


15

ฉันทำงานเกี่ยวกับการแข่งขันวิทยาศาสตร์ข้อมูลที่การกระจายชุดทดสอบของฉันแตกต่างจากชุดฝึกอบรม ฉันต้องการยกตัวอย่างการสังเกตจากชุดการฝึกอบรมซึ่งคล้ายกับชุดทดสอบอย่างใกล้ชิด

ฉันจะทำสิ่งนี้ได้อย่างไร


การสุ่มตัวอย่างภายใต้การสุ่มการสุ่มเกินการสุ่มตัวอย่างการสุ่มตัวอย่างแบบคลัสเตอร์ผ่านการแจ้ง: การชนกลุ่มน้อยสังเคราะห์เทคนิคการสุ่มตัวอย่างน้อยการปรับเปลี่ยนเทคนิคการสุ่มตัวอย่างชนกลุ่มน้อยสังเคราะห์ (MSMOTE) ฯลฯ
Aditya

คุณควรทำเครื่องหมายคำตอบอย่างใดอย่างหนึ่งว่า "คำตอบที่ยอมรับ" ถ้าคุณมีความสุขกับคำตอบใด ๆ
TwinPenguins

คำตอบ:


17

คำถามที่ยอดเยี่ยมนี่คือสิ่งที่เป็นที่รู้จักในกระบวนทัศน์การเรียนรู้ของเครื่องว่า "Covariate Shift" หรือ "Model Drift" หรือ "Nonstationarity" เป็นต้น

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

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

  • โพสต์บล็อกนี้ให้วิธีการง่ายๆในการจัดการข้อมูลตัวอย่างการฝึกอบรมพร้อมรหัสที่ให้ไว้ใน Python!
  • ตรวจสอบบทความวิจัยนี้ พวกเขาเสนอให้แก้ปัญหาโดยการจัดข้อมูลการฝึกอบรมใหม่เพื่อให้การกระจายการฝึกอบรมใกล้เคียงกับการแจกแจงการทดสอบมากขึ้นโดยใช้ขั้นตอนการประเมินความสำคัญของKullback-Leiblerบนพื้นฐานของทฤษฎีบท" Kullback-Leibler divergence " ฉันไม่ทราบว่าพวกเขามีการนำไปใช้หรือสามารถนำไปใช้งานได้อย่างง่ายดาย แต่ฉันคิดว่ามันคุ้มค่าที่จะขุดเพราะฟังดูเป็นวิธีที่เป็นมืออาชีพในการจัดการการกระจายที่ไม่ตรงกัน

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


5

ฉันต้องการยกตัวอย่างการสังเกตจากชุดการฝึกอบรมซึ่งคล้ายกับชุดทดสอบอย่างใกล้ชิด

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

โดยปกติแล้วเราควรปรับข้อมูลการทดสอบเป็นข้อมูลรถไฟ (เช่นข้อมูลการทดสอบที่เป็นมาตรฐานตามข้อมูลรถไฟ ) และไม่ใช่วิธีอื่น ในทางปฏิบัติคุณไม่ทราบข้อมูลการทดสอบของคุณ


3

ชุดย่อยชุดรถไฟอาจไม่ใช่วิธีที่ดีที่สุด!

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

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

นี่คือคำแนะนำของฉัน:

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

  2. แทนที่จะสุ่มตัวอย่างแบบสุ่มหลาย ๆ ครั้งให้มองหามาตรฐาน / การทำให้เป็นมาตรฐานและการเลือกคุณสมบัติ / วิศวกรรม เทคนิคเหล่านี้อาจเป็นประโยชน์ในการเรียนรู้รูปแบบทั่วไปมากขึ้น ตัวอย่างเช่นบางครั้งช่วงของฟีเจอร์โดเมนอาจเปลี่ยนแปลงได้ตลอดเวลาในขณะที่รูปร่างของการแจกจ่าย (ไม่ว่าจะเป็นอะไร) ก็ยังคงเหมือนเดิม (เช่นการกระจายเดียวกันที่เลื่อนไปทางซ้ายหรือขวา) ในกรณีเช่นนี้การสร้างมาตรฐานอย่างง่าย(เช่นการทำแผนที่รถไฟและตัวอย่างทดสอบไปยังพื้นที่ที่กำหนดไว้ล่วงหน้าเช่น [0,1] โดยใช้ฟังก์ชั่นการทำแผนที่ที่แตกต่างกัน) สามารถลดอาการได้

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


1
พี(Y|x)

-1

มีแพ็คเกจที่ดีในไพ ธ อน (scikit Learn)

http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html

คุณสามารถยกตัวอย่างการสังเกตของคุณจากชุดการฝึกอบรมโดยใช้แพ็คเกจนี้


1
เท่าที่ฉันเข้าใจคำถามการแจกแจงการฝึกอบรม / การทดสอบนั้นแตกต่างกันซึ่งหากไม่นำมาพิจารณาจะนำไปสู่สิ่งที่รู้จักกันในชื่อ "Covariate Shift" ตัวอย่างย่อยง่าย ๆ โดยใช้การใช้งาน "train_test_split" ใน scikit ที่กล่าวถึงที่นี่จะไม่นำมาพิจารณาการแจกแจงบัญชีในระหว่างการแบ่ง! ดังนั้นคำตอบไม่เกี่ยวข้อง
TwinPenguins
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.