เครื่องมือเลือกคุณลักษณะสำหรับการเรียนรู้ของเครื่องใน Python คุณลักษณะที่มีค่าที่ขาดหายไปในเปอร์เซ็นต์สูง คุณสมบัติ Collinear (มีความสัมพันธ์สูง) คุณลักษณะที่มีความสำคัญเป็นศูนย์ในแบบจำลองแบบต้นไม้ คุณสมบัติที่มีความสำคัญต่ำ คุณสมบัติที่มีค่าเฉพาะตัวเดียว
การใช้FeatureSelectorสำหรับเวิร์กโฟลว์แมชชีนเลิร์นนิ่งที่มีประสิทธิภาพ
การเลือกคุณสมบัติ กระบวนการในการค้นหาและเลือกคุณสมบัติที่มีประโยชน์ที่สุดในชุดข้อมูล เป็นขั้นตอนสำคัญของไปป์ไลน์แมชชีนเลิร์นนิง คุณลักษณะที่ไม่จำเป็นจะลดความเร็วในการฝึก ลดความสามารถในการตีความแบบจำลอง และที่สำคัญที่สุดคือ ลดประสิทธิภาพการทำให้เป็นนัยทั่วไปในชุดทดสอบ
ผิดหวังกับวิธีการเลือกคุณสมบัติเฉพาะกิจที่ฉันพบว่าตัวเองใช้ซ้ำแล้วซ้ำเล่าสำหรับปัญหาการเรียนรู้ของเครื่อง ฉันสร้างคลาสสำหรับการเลือกคุณสมบัติใน Python มีอยู่ใน GitHub . |_+_| รวมถึงวิธีการเลือกคุณสมบัติทั่วไปบางวิธี:
- คุณสมบัติที่มีค่าที่ขาดหายไปในเปอร์เซ็นต์สูง
- คุณสมบัติ Collinear (มีความสัมพันธ์สูง)
- คุณลักษณะที่มีความสำคัญเป็นศูนย์ในแบบจำลองแบบต้นไม้
- คุณสมบัติที่มีความสำคัญต่ำ
- คุณสมบัติที่มีค่าเฉพาะตัวเดียว
ในบทความนี้เราจะพูดถึงการใช้ |_+_| บนชุดข้อมูลการเรียนรู้ของเครื่องตัวอย่าง เราจะมาดูกันว่ามันช่วยให้เรานำวิธีการเหล่านี้ไปใช้อย่างรวดเร็วได้อย่างไร ซึ่งช่วยให้เวิร์กโฟลว์มีประสิทธิภาพมากขึ้น
รหัสที่สมบูรณ์คือ มีอยู่ใน 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 (มีความสัมพันธ์สูง) คุณลักษณะที่มีความสำคัญเป็นศูนย์ในแบบจำลองแบบต้นไม้ คุณสมบัติที่มีความสำคัญต่ำ คุณสมบัติที่มีค่าเฉพาะตัวเดียว