การเลือกคุณสมบัติควรทำกับข้อมูลการฝึกอบรมเท่านั้น (หรือข้อมูลทั้งหมด)?


10

ควรเลือกคุณลักษณะที่ทำกับข้อมูลการฝึกอบรมเท่านั้น (หรือข้อมูลทั้งหมด)? ฉันผ่านการสนทนาและเอกสารเช่นGuyon (2003)และSinghi และ Liu (2006)แต่ก็ยังไม่แน่ใจเกี่ยวกับคำตอบที่ถูก

การตั้งค่าการทดสอบของฉันเป็นดังนี้:

  • ชุดข้อมูล: การควบคุมที่ดีต่อสุขภาพ 50 คนและผู้ป่วยโรค 50 คน (คุณสมบัติ cca 200 ที่สามารถเกี่ยวข้องกับการทำนายโรค)
  • ภารกิจคือการวินิจฉัยโรคตามคุณสมบัติที่มีอยู่

สิ่งที่ฉันทำคือ

  1. ใช้ชุดข้อมูลทั้งหมดและทำการเลือกคุณสมบัติ (FS) ฉันเก็บเฉพาะคุณสมบัติที่เลือกไว้เพื่อการประมวลผลต่อไป
  2. แยกเพื่อทดสอบและฝึกอบรมตัวจําแนกรถไฟโดยใช้ข้อมูลรถไฟและคุณสมบัติที่เลือก จากนั้นใช้ตัวจําแนกเพื่อทดสอบข้อมูล (อีกครั้งโดยใช้เฉพาะคุณสมบัติที่เลือก) ใช้การตรวจสอบความถูกต้องแบบลาก่อน
  3. รับความถูกต้องจำแนก
  4. ค่าเฉลี่ย: ทำซ้ำ 1) -3) N ครั้ง (100)ยังไม่มีข้อความ=50

ฉันจะยอมรับว่าการทำ FS กับชุดข้อมูลทั้งหมดสามารถแนะนำอคติบางอย่าง แต่ความเห็นของฉันคือ "เฉลี่ยโดยเฉลี่ย" ในระหว่างการหาค่าเฉลี่ย (ขั้นตอนที่ 4) ถูกต้องหรือไม่ (ความแปรปรวนความแม่นยำคือ<2% )

1 Guyon, I. (2003) "ความรู้เบื้องต้นเกี่ยวกับการเลือกตัวแปรและคุณสมบัติ", วารสารการวิจัยการเรียนรู้ของเครื่อง, ฉบับที่ 3, pp. 1157-1182
2 Singhi, SK และ Liu, H. (2006) "ฟีเจอร์การเลือกชุดย่อยสำหรับการเรียนรู้การจำแนกประเภท", การดำเนินการของ ICML '06 การประชุมนานาชาติครั้งที่ 23 เรื่องการเรียนรู้ของเครื่อง, หน้า 849-856

คำตอบ:


12

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

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

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

สำหรับรายละเอียดเพิ่มเติมดูAmbroise และ McLachlanและคำตอบของฉันคำถามนี้


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

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

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

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

3

เช่นเดียวกับภาคผนวกของคำตอบที่นี่ฉันมีสองลิงก์ที่ช่วยให้ฉันเข้าใจจริง ๆ ว่าทำไมนี่จึงไม่ใช่ขั้นตอนที่ดี:

แก้ไข: ตามที่ร้องขอคำอธิบายสั้น ๆ ของเนื้อหาของลิงค์:

สมมติว่าฉันกำลังฝึกอบรมตัวจําแนกและฉันมีชุดข้อมูลของ 1,000 ตัวอย่างด้วย 1 ล้านคุณสมบัติแต่ละ ฉันไม่สามารถประมวลผลทั้งหมดได้ดังนั้นฉันจึงต้องการคุณสมบัติที่น้อยลง (เช่นฉันสามารถคำนวณคุณสมบัติได้ 300 ข้อ) ฉันยังมีชุดทดสอบที่เก็บตัวอย่าง 100 ชุดเพื่อประมาณการความถูกต้องนอกโลกจริงของฉันได้อย่างแม่นยำ

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

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

โดยทางคุณทำสิ่งต่อไปนี้:

  • เก็บส่วนหนึ่งของชุดข้อมูลของคุณไว้เป็นชุดที่ระงับไว้
  • แยกส่วนที่เหลือของชุดข้อมูลของคุณ (ต่อจากนี้เรียกว่า T1) ไปเป็น K-fold
  • ใน for-loop จาก i = 1 ถึง K ให้ทำดังต่อไปนี้:
    • เลือกพับฉันเป็นชุด CV ของคุณและตัวอย่างที่เหลือเป็นชุดฝึกอบรมของคุณ (ต่อจากนี้ไปเรียกว่า Ti)
    • ทำทุกอย่างเกี่ยวกับคุณสมบัติทางวิศวกรรมและการเลือกคุณสมบัติที่คุณต้องการ: กรองคุณสมบัติรวมพวกมันเข้าด้วยกัน
    • แปลงทั้งชุด CV ของคุณ (โฟลด์ปัจจุบันที่เรียกว่า CVi) และเซ็ตการฝึกอบรมปัจจุบันของคุณเป็นชุดที่มีคุณสมบัติที่เหมาะสม
    • ฝึกโมเดลของคุณในชุดฝึกอบรม Ti
    • รับคะแนนจากโฟลด์ปัจจุบัน CVi ผนวกคะแนนนี้ต่อท้ายรายการที่มีคะแนนทั้งหมด
  • ตอนนี้รายการของคุณมีคะแนนของแต่ละเท่าดังนั้นคุณเฉลี่ยมันได้รับคะแนน K-folds

เป็นสิ่งสำคัญอย่างยิ่งที่คุณต้องดำเนินการด้านวิศวกรรมคุณลักษณะภายในลูปในชุดการฝึกอบรมย่อย Ti แทนชุดฝึกอบรมเต็มรูปแบบ T1

เหตุผลนี้คือเมื่อคุณพอดี / คุณสมบัติวิศวกรสำหรับ Ti คุณทดสอบ CVi ซึ่งมองไม่เห็นสำหรับรุ่นนั้น ในขณะที่ถ้าคุณเหมาะสม / คุณสมบัติวิศวกรใน T1, CV ใด ๆ ที่คุณเลือกจะต้องเป็นชุดย่อย T1 และดังนั้นคุณจะมีอคติในแง่ดีเช่นคุณจะมีน้ำหนักเกินเนื่องจากคุณฝึกอบรมและทดสอบกับตัวอย่างข้อมูลเดียวกัน

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


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

@Silverfish Done
Abhishek Divekar

ดังนั้นใน for-loop เราสามารถมีฟีเจอร์ที่เลือกแตกต่างกันสำหรับการพับต่าง
stackunderflow

2

bootstrap "optimism" ของ Efron-Gong นั้นดีมากสำหรับเรื่องนี้ แนวคิดนี้คือการใช้ข้อมูลที่มีอยู่ทั้งหมดเพื่อพัฒนาแบบจำลองการทำนายและใช้ข้อมูลทั้งหมดเพื่อประเมินประสิทธิภาพในอนาคตของแบบจำลองเดียวกันนั้น และขนาดตัวอย่างของคุณมีขนาดเล็กเกินไปด้วยปัจจัย 100 สำหรับวิธีการแยกตัวอย่างใด ๆ ที่จะทำงาน

Y

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