การเพิ่มจำนวนฟีเจอร์จะส่งผลให้ความแม่นยำลดลง แต่เพิ่มขึ้น / จำได้เร็วขึ้น


15

ฉันยังใหม่กับการเรียนรู้ของเครื่อง ในขณะนี้ฉันใช้ตัวจําแนก Naive Bayes (NB) เพื่อจัดประเภทข้อความขนาดเล็กใน 3 คลาสเป็นค่าบวกลบหรือเป็นกลางโดยใช้ NLTK และ python

หลังจากทำการทดสอบด้วยชุดข้อมูลที่ประกอบด้วย 300,000 อินสแตนซ์ (ลบ 16,924 บวก 7,477 เชิงลบและ 275,599 นิวทรัล) ฉันพบว่าเมื่อฉันเพิ่มจำนวนฟีเจอร์ความแม่นยำจะลดลง แต่ความแม่นยำ / การเรียกคืนสำหรับคลาสบวกและลบ นี่เป็นพฤติกรรมปกติของลักษณนาม NB หรือไม่? เราสามารถพูดได้หรือไม่ว่าจะเป็นการดีกว่าถ้าใช้คุณสมบัติเพิ่มเติม

ข้อมูลบางส่วน:

Features: 50    
Accuracy: 0.88199
F_Measure Class Neutral 0.938299
F_Measure Class Positive 0.195742
F_Measure Class Negative 0.065596

Features: 500   
Accuracy: 0.822573
F_Measure Class Neutral 0.904684
F_Measure Class Positive 0.223353
F_Measure Class Negative 0.134942

ขอบคุณล่วงหน้า...

แก้ไข 2011/11/26

ฉันได้ทดสอบกลยุทธ์การเลือกคุณสมบัติ 3 แบบ (MAXFREQ, FREQENT, MAXINFOGAIN) ด้วยตัวจําแนก Naive Bayes สิ่งแรกคือความแม่นยำและมาตรการ F1 ต่อชั้นเรียน:

ป้อนคำอธิบายรูปภาพที่นี่

จากนั้นฉันได้วางแผนข้อผิดพลาดของรถไฟและข้อผิดพลาดในการทดสอบด้วยชุดการฝึกอบรมเพิ่มเติมเมื่อใช้ MAXINFOGAIN กับ 100 อันดับแรกและ 1,000 อันดับแรกของฟีเจอร์:

ป้อนคำอธิบายรูปภาพที่นี่

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

ขอบคุณอีกครั้ง...


1
มันขึ้นอยู่กับสิ่งที่คุณหมายถึงด้วย "ลักษณนามที่ดีที่สุด" ถ้างานของคุณกำลังสร้างลักษณนามที่มีความแม่นยำดีโดยรวมฉันจะเลือก FREQENT ในทางตรงกันข้ามถ้าในงานการจำแนกประเภทของคลาสที่หายากส่วนใหญ่คุณต้องการจำแนกคลาสที่หายากได้ดีกว่า (ซึ่งอาจเป็น "ลบ" หรือคลาส "บวก") ฉันจะเลือก MAXINFOGAIN ฉันคิดว่าการตีความส่วนโค้งการเรียนรู้ของคุณนั้นถูกต้อง: ด้วยคุณสมบัติ 100 อย่างที่คุณมีอคติและคุณสามารถเพิ่มได้ด้วย 1,000 คุณมีความแปรปรวนและคุณสามารถลบออกได้ บางทีคุณอาจลองเปลี่ยนคุณสมบัติระหว่าง 100 ถึง 1,000 เพื่อให้ได้ผลลัพธ์ที่ดีกว่า
Simone

ขอบคุณสำหรับความช่วยเหลือ Simone! ฉันเข้าใจทุกอย่าง แต่ส่วนสุดท้าย ... คุณช่วยเล่าให้ฉันฟังหน่อยว่าคุณเห็นความแตกต่างสูงของฟีเจอร์ 1000 ไหม เนื่องจากความแตกต่างระหว่างข้อผิดพลาดในการทดสอบและการฝึกดูเหมือนจะไม่มากเท่าไหร่มันก็ยังดูเหมือนอคติกับฉัน ...
kanzen_master

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

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

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

คำตอบ:


18

ความแม่นยำเทียบกับการวัดแบบ F

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

a=nอียูเสื้อRaล.(nอียูเสื้อRaล.+พีโอsผมเสื้อผมโวลต์อี+nอีก.aเสื้อผมโวลต์อี)=0.9188

ดี แต่ไร้ประโยชน์

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

คุณสมบัติมากหรือน้อย?

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

อีกครั้งคำแนะนำนี้ (ยกเว้น InformationGain) ไม่ขึ้นอยู่กับอัลกอริทึมการจำแนกประเภท

แก้ไข 27.11.11

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

  • High Biasหมายถึงว่ารุ่นนั้นน้อยกว่าที่ดีที่สุดนั่นคือข้อผิดพลาดในการทดสอบสูง (underfitting ตามที่ Simone กำหนดไว้)
  • สูงแปรปรวนหมายความว่ารูปแบบเป็นความสำคัญมากกับกลุ่มตัวอย่างที่ใช้ในการสร้างแบบจำลอง นั่นหมายความว่าข้อผิดพลาดนั้นขึ้นอยู่กับชุดฝึกอบรมที่ใช้และด้วยเหตุนี้ความแปรปรวนของข้อผิดพลาด (ประเมินจาก crossvalidation-folds) จะแตกต่างกันอย่างมาก (อิง)

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

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

  • ด้วยคุณสมบัติจำนวนน้อยข้อผิดพลาดเฉลี่ย (อคติ) จะต่ำกว่าอย่างไรก็ตามความแปรปรวนของข้อผิดพลาด (จากค่า 18) จะสูงขึ้น
  • ด้วยคุณสมบัติจำนวนมากข้อผิดพลาดเฉลี่ย (อคติ) จะสูงขึ้น แต่ความแปรปรวนของข้อผิดพลาด (จาก 18 ค่า) จะต่ำกว่า

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

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

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


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

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

1
จากการบรรยายของสแตนฟอร์ดถ้าคุณเห็นเส้นโค้งการฝึกอบรมและการทดสอบที่แยกจากกันซึ่งแตกต่างจาก # ของตัวอย่างการฝึกอบรมจริง ๆ แล้วหมายความว่ามีความแปรปรวน แน่นอนว่าแนวทางที่ดีกว่าคือการประเมินช่วงความมั่นใจ
Simone

1
@DT 1. ฉันไม่รู้จักการบรรยายดังนั้นฉันไม่สามารถเชื่อมต่อคำอธิบายของ Andrewg กับฉันขอโทษ 2. ไม่คุณสมบัติเล็ก ๆ น้อย ๆ => overfitting => อคติต่ำความแปรปรวนสูง จำนวนคุณสมบัติสูง => underfitting => อคติสูงความแปรปรวนต่ำ ฉันขอแนะนำให้พล็อตความแปรปรวนของข้อผิดพลาดของ CV-folds สำหรับคุณลักษณะและตัวอย่างการฝึกอบรมที่แตกต่างกัน
steffen

2
1. steffen การบรรยายมีให้ที่นี่: ml-class.org/course/video/preview_list (ตอนที่ X, หัวข้อ "Learning Curves") 2. ฉันเห็น ฉันคิดว่าเมื่อคุณสมบัติมากมายที่เรียนรู้ในระหว่างการฝึก => แบบจำลองซับซ้อนขึ้นและชุดฝึกอบรม => ความแปรปรวน ...
kanzen_master

5

เพื่อที่จะทราบว่ามันมีประโยชน์ในการใช้คุณสมบัติเพิ่มเติมฉันจะวางแผนการเรียนรู้เส้นโค้ง ผมคิดว่านี่เป็นอย่างชัดเจนที่อธิบายไว้ในหน่วยที่ 10 ของระดับการเรียนรู้เครื่องสแตนฟอชื่อ "ให้คำแนะนำสำหรับการใช้กลไกการเรียนรู้" ที่คุณสามารถหาได้ที่นี่: http://www.ml-class.org/course/video/preview_list

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

แก้ไข

λ

λ

ความแปรปรวนสูง

λ

มีอคติสูง

λ=1

ผลลัพธ์ที่ดี


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

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

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

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