เครื่องมือเลือกคุณสมบัติสำหรับการเรียนรู้ของเครื่องใน Python

ลองใช้เครื่องมือของเราเพื่อกำจัดปัญหา

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



การใช้FeatureSelectorสำหรับเวิร์กโฟลว์แมชชีนเลิร์นนิ่งที่มีประสิทธิภาพ






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



ผิดหวังกับวิธีการเลือกคุณสมบัติเฉพาะกิจที่ฉันพบว่าตัวเองใช้ซ้ำแล้วซ้ำเล่าสำหรับปัญหาการเรียนรู้ของเครื่อง ฉันสร้างคลาสสำหรับการเลือกคุณสมบัติใน Python มีอยู่ใน GitHub . |_+_| รวมถึงวิธีการเลือกคุณสมบัติทั่วไปบางวิธี:



  1. คุณสมบัติที่มีค่าที่ขาดหายไปในเปอร์เซ็นต์สูง
  2. คุณสมบัติ Collinear (มีความสัมพันธ์สูง)
  3. คุณลักษณะที่มีความสำคัญเป็นศูนย์ในแบบจำลองแบบต้นไม้
  4. คุณสมบัติที่มีความสำคัญต่ำ
  5. คุณสมบัติที่มีค่าเฉพาะตัวเดียว

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






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

ตัวอย่างชุดข้อมูล

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

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

การสร้างอินสแตนซ์

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

(ตรวจสอบให้แน่ใจว่าได้เรียกใช้สิ่งนี้ในไดเร็กทอรีเดียวกับ |_+_| )

FeatureSelector

วิธีการ

ตัวเลือกคุณลักษณะมีห้าวิธีในการค้นหาคุณลักษณะที่จะลบ เราสามารถเข้าถึงคุณลักษณะที่ระบุและลบออกจากข้อมูลด้วยตนเองหรือใช้ |_+_| ฟังก์ชันในตัวเลือกคุณลักษณะ

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

ค่าที่หายไป

วิธีแรกในการค้นหาคุณสมบัติที่จะลบนั้นตรงไปตรงมา: ค้นหาคุณสมบัติที่มีค่าส่วนที่ขาดหายไปเหนือเกณฑ์ที่ระบุ การโทรด้านล่างระบุคุณสมบัติที่มีค่าที่ขาดหายไปมากกว่า 60% ( ตัวหนา คือเอาท์พุต)

FeatureSelector

เราสามารถเห็นเศษของค่าที่หายไปในทุกคอลัมน์ใน dataframe:

FeatureSelector

หากต้องการดูคุณลักษณะที่ระบุให้นำออก เราเข้าถึง |_+_| คุณลักษณะของ |_+_| , Python dict ที่มีคุณสมบัติเป็นรายการในค่า

feature_selector.py

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

vue-native-websocket
from feature_selector import FeatureSelector # Features are in train and labels are in train_labels fs = FeatureSelector(data = train, labels = train_labels)

คุณสมบัติ Collinear

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

|_+_| วิธีค้นหาคุณสมบัติ collinear ตามที่ระบุ ค่าสัมประสิทธิ์สหสัมพันธ์ ค่า. สำหรับคุณลักษณะที่สัมพันธ์กันแต่ละคู่ จะระบุคุณลักษณะหนึ่งสำหรับการนำออก (เนื่องจากเราจำเป็นต้องลบเพียงรายการเดียว):

remove

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

FeatureSelector

เช่นเคย เราสามารถเข้าถึงรายการคุณลักษณะที่เกี่ยวข้องทั้งหมดซึ่งจะถูกลบออก หรือดูคู่คุณลักษณะที่มีความสัมพันธ์สูงในดาต้าเฟรม

fs.identify_missing(missing_threshold = 0.6) 17 features with greater than 0.60 missing values.

หากเราต้องการตรวจสอบชุดข้อมูล เราสามารถสร้างพล็อตความสัมพันธ์ทั้งหมดในข้อมูลโดยส่งผ่าน |_+_| โทร:

leetcode ถอดรหัสการสัมภาษณ์การเข้ารหัส

ฟีเจอร์สำคัญเป็นศูนย์

สองเมธอดก่อนหน้านี้สามารถใช้ได้กับชุดข้อมูลที่มีโครงสร้างใดๆ และ **กำหนดขึ้นเอง**— ผลลัพธ์จะเหมือนกันทุกครั้งสำหรับขีดจำกัดที่กำหนด วิธีถัดไปได้รับการออกแบบสำหรับปัญหาแมชชีนเลิร์นนิงภายใต้การดูแลเท่านั้น ซึ่งเรามีป้ายกำกับสำหรับการฝึกโมเดลและไม่สามารถกำหนดได้ |_+_| ฟังก์ชันจะค้นหาคุณลักษณะที่มีความสำคัญเป็นศูนย์ตามแบบจำลองการเรียนรู้ของ Gradity Boosting Machine (GBM)

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

|_+_| ค้นหาความสำคัญของฟีเจอร์โดยใช้เครื่องเพิ่มการไล่ระดับสีจาก ห้องสมุด LightGBM . ความสำคัญของคุณลักษณะมีค่าเฉลี่ยมากกว่า 10 รันการฝึกอบรมของ GBM เพื่อลดความแปรปรวน นอกจากนี้ โมเดลยังได้รับการฝึกอบรมโดยใช้การหยุดก่อนกำหนดด้วยชุดการตรวจสอบความถูกต้อง (มีตัวเลือกให้ปิดการทำงานนี้) เพื่อป้องกันไม่ให้ข้อมูลการฝึกมากเกินไป

รหัสด้านล่างเรียกเมธอดและแยกคุณลักษณะที่มีความสำคัญเป็นศูนย์:

fs.missing_stats.head()

พารามิเตอร์ที่เราส่งผ่านมีดังนี้:

  • |_+_| : การจำแนกประเภทหรือการถดถอยที่สอดคล้องกับปัญหาของเรา
  • |_+_|: ตัวชี้วัดที่ใช้สำหรับการหยุดก่อนกำหนด (ไม่จำเป็นหากปิดใช้งานการหยุดก่อนกำหนด)
  • |_+_| : จำนวนการฝึกวิ่งเพื่อเฉลี่ยความสำคัญของคุณลักษณะมากกว่า
  • |_+_|: ใช้การหยุดก่อนกำหนดสำหรับการฝึกโมเดลหรือไม่

คราวนี้เราได้สองแปลงด้วย |_+_|:

ops

ทางด้านซ้ายเรามี |_+_| คุณสมบัติที่สำคัญที่สุด (พล็อตในแง่ของความสำคัญปกติโดยที่ผลรวมทั้งหมดเป็น 1) ทางด้านขวาเรามีความสำคัญสะสมเทียบกับจำนวนคุณสมบัติ เส้นแนวตั้งถูกวาดที่ |_+_| ของความสำคัญสะสมในกรณีนี้ 99%

หมายเหตุสองข้อควรจำสำหรับวิธีการที่อิงตามความสำคัญ:

  • |_+_| : การจำแนกประเภทหรือการถดถอยที่สอดคล้องกับปัญหาของเรา
  • |_+_|: ตัวชี้วัดที่ใช้สำหรับการหยุดก่อนกำหนด (ไม่จำเป็นหากปิดใช้งานการหยุดก่อนกำหนด)
  • |_+_| : จำนวนการฝึกวิ่งเพื่อเฉลี่ยความสำคัญของคุณลักษณะมากกว่า
  • |_+_|: ใช้การหยุดก่อนกำหนดสำหรับการฝึกโมเดลหรือไม่

สิ่งนี้ไม่ควรมีผลกระทบสำคัญ (คุณสมบัติที่สำคัญที่สุดจะไม่กลายเป็นน้อยที่สุดในทันที) แต่จะเปลี่ยนลำดับของคุณสมบัติบางอย่าง นอกจากนี้ยังสามารถส่งผลกระทบต่อจำนวนของคุณสมบัติที่มีความสำคัญเป็นศูนย์ที่ระบุ อย่าแปลกใจถ้าความสำคัญของฟีเจอร์เปลี่ยนไปทุกครั้ง!

  • |_+_| : การจำแนกประเภทหรือการถดถอยที่สอดคล้องกับปัญหาของเรา
  • |_+_|: ตัวชี้วัดที่ใช้สำหรับการหยุดก่อนกำหนด (ไม่จำเป็นหากปิดใช้งานการหยุดก่อนกำหนด)
  • |_+_| : จำนวนการฝึกวิ่งเพื่อเฉลี่ยความสำคัญของคุณลักษณะมากกว่า
  • |_+_|: ใช้การหยุดก่อนกำหนดสำหรับการฝึกโมเดลหรือไม่

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

คุณสมบัติที่มีความสำคัญต่ำ

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

ตัวอย่างเช่น การโทรด้านล่างจะค้นหาคุณลักษณะที่มีความสำคัญน้อยที่สุดซึ่งไม่จำเป็นสำหรับการบรรลุถึง 99% ของความสำคัญทั้งหมด:

FeatureSelector

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

ในการดูความสำคัญคุณลักษณะทั้งหมดในดาต้าเฟรม:

missing_features = fs.ops['missing'] missing_features[:5] ['OWN_CAR_AGE', 'YEARS_BUILD_AVG', 'COMMONAREA_AVG', 'FLOORSMIN_AVG', 'LIVINGAPARTMENTS_AVG']

|_+_| วิธีการยืมจากหนึ่งในวิธีของ ใช้การวิเคราะห์องค์ประกอบหลัก (PCA) ซึ่งเป็นเรื่องปกติที่จะเก็บเฉพาะพีซีที่จำเป็นเพื่อรักษาเปอร์เซ็นต์ของความแปรปรวน (เช่น 95%) เปอร์เซ็นต์ของความสำคัญทั้งหมดคิดตามแนวคิดเดียวกัน

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

คุณสมบัติค่าเดียวที่ไม่ซ้ำ

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

ไม่มีพารามิเตอร์ให้เลือก ซึ่งแตกต่างจากวิธีอื่นๆ:

fs.plot_missing()

เราสามารถพล็อตฮิสโตแกรมของจำนวนค่าที่ไม่ซ้ำกันในแต่ละหมวดหมู่:

identify_collinear

จุดหนึ่งที่ต้องจำไว้คือ |_+_| ถูกทิ้งมาก่อน การคำนวณค่าที่ไม่ซ้ำใน Pandas โดยค่าเริ่มต้น

การลบคุณสมบัติ

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

สำหรับวิธีนี้ เราผ่าน |_+_| เพื่อใช้ในการลบคุณสมบัติ หากเราต้องการใช้วิธีการทั้งหมดที่นำมาใช้ เราก็แค่ผ่าน |_+_|

fs.identify_collinear(correlation_threshold = 0.98) 21 features with a correlation magnitude greater than 0.98.

เมธอดนี้ส่งคืน dataframe โดยที่คุณสมบัติถูกลบออก หากต้องการลบฟีเจอร์ one-hot encoded ที่สร้างขึ้นระหว่างการเรียนรู้ของเครื่อง:

วิธีทำให้บอทที่ไม่ลงรอยกันทำงาน 24/7
fs.plot_collinear()

อาจเป็นความคิดที่ดีที่จะตรวจสอบคุณสมบัติที่จะลบออกก่อนที่จะดำเนินการต่อไป! ชุดข้อมูลเดิมถูกเก็บไว้ใน |_+_| คุณลักษณะของ |_+_| เป็นตัวสำรอง!

เรียกใช้วิธีการทั้งหมดในครั้งเดียว

แทนที่จะใช้วิธีการทีละอย่าง เราสามารถใช้วิธีการทั้งหมดกับ |_+_| จะใช้พจนานุกรมของพารามิเตอร์สำหรับแต่ละวิธี:

# list of collinear features to remove collinear_features = fs.ops['collinear'] # dataframe of collinear features fs.record_collinear.head()

สังเกตว่าจำนวนคุณลักษณะทั้งหมดจะเปลี่ยนไปเนื่องจากเรารันโมเดลใหม่ |_+_| สามารถเรียกใช้ฟังก์ชันเพื่อยกเลิกคุณลักษณะเหล่านี้ได้

บทสรุป

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

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

#python #แมชชีนเลิร์นนิง

ต่อdatascience.com

เครื่องมือเลือกคุณสมบัติสำหรับการเรียนรู้ของเครื่องใน Python

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