การทำนายโอกาสการเกิดโรคหัวใจ ด้วย SimpleImputer

คลาส SimpleImputer เป็นวิธีที่มีประสิทธิภาพในการกำหนดค่าที่ขาดหายไป ในวันนี้จะใช้ ชุดข้อมูลนี้ [https://www.kaggle.com/amanajmera1/framingham-heart-study-dataset] มาจากการศึกษาโรคหัวใจและหลอดเลือดอย่างต่อเนื่องเกี่ยวกับผู้อยู่อาศัยในเมือง Framingham รัฐแมสซาชูเซตส์ เพื่อสาธิต การกำหนดค่าที่ขาดหายไป

เป้าหมายของโมเดล นี้ คือการทำนายว่าผู้ป่วยมีความเสี่ยง 10 ปีในการเป็นโรคหลอดเลือดหัวใจในอนาคต (CHD) หรือไม่

ก่อนอื่นให้นำเข้าไลบรารีที่จำเป็นและทำการวิเคราะห์ข้อมูลเชิงสำรวจ (EDA)

จะเห็นได้ว่า ชุดข้อมูลให้ข้อมูลของผู้ป่วย ประกอบด้วยระเบียนมากกว่า 4,240 รายการและคุณลักษณะ 16 รายการ ส่วนหัวของแอตทริบิวต์ dataframe และคอลัมน์ที่เรียกบน dataframe จะเปิดเผยแอตทริบิวต์ข้อมูลทั้งหมด 16 รายการ

หาจำนวนค่าที่ขาดหายไป หรือ จำนวนค่า NaN โดยใช้การเรียกเมธอด isna () และรวมค่าเหล่านี้ผ่านวิธีการผูกมัด

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

ขั้นแรกเราจะส่งใน dataframe.isna () ซึ่งจะคืนค่า True หากมีค่าที่ขาดหายไป จากนั้นเราสามารถตั้งค่าทั้ง cbar และ ytickslabels เป็น False เลือกการแมปสี (ที่นี่สตริง viridis) และแสดงผลลัพธ์

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

Imputation ทางสถิติด้วย SimpleImputer Class

ไลบรารีการเรียนรู้ของเครื่อง sci-kit ให้คลาส SimpleImputer ซึ่งใช้การใส่ข้อมูลทางสถิติ

ในการใช้ SimpleImputer ให้นำเข้าคลาสก่อนจากนั้นสร้างอินสแตนซ์คลาสด้วยอาร์กิวเมนต์สตริงที่ส่งผ่านไปยังพารามิเตอร์กลยุทธ์ เพื่อความชัดเจนฉันได้รวม ‘ค่าเฉลี่ย’ ไว้ที่นี่ซึ่งเป็นค่าเริ่มต้นดังนั้นจึงไม่จำเป็นต้องรวมไว้อย่างชัดเจน

ฉันแปลงดาต้าเฟรมเป็นอาร์เรย์ตัวเลขโดยเรียกค่าบนดาต้าเฟรมของฉัน (ไม่จำเป็น) แต่เป็นนิสัยที่ฉันชอบ จากนั้นฉันเลือกคุณสมบัติของฉันและกำหนดให้กับตัวแปร X และเลือกตัวแปรเป้าหมายของฉันและกำหนดให้กับตัวแปร y

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

เพื่อยืนยันว่าการใส่ข้อมูลได้ผลเราสามารถประเมินจำนวนค่าที่ขาดหายไปบนชุดข้อมูลโดยมีและไม่ใช้การแปลงข้อมูล เมื่อการแปลงข้อมูลถูกนำไปใช้ค่าคอลัมน์ 645 ถูกกำหนด

ใช้ Linear Regression สำหรับการทำนายแบบจำลอง เรามีความแม่นยำ 97% นี่เป็นผลลัพธ์ที่สมเหตุสมผล

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

การประเมินแบบจำลอง

น่าเสียดายที่ ทุกกลยุทธ์ให้ผลเหมือนกัน เพราะให้เห็นภาพชัดขึ้น เราจึงลองใช้ RandomForestClassifier เพื่อเปรียบเทียบ

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

เพื่อให้บรรลุเป้าหมายนี้เราสามารถสร้างไปป์ไลน์การสร้างแบบจำลองโดยที่ขั้นตอนแรกคือการใส่ข้อมูลทางสถิติและขั้นตอนที่สองคือตัวแบบเอง ไปป์ไลน์ต่อไปนี้ใช้กลยุทธ์ค่าเฉลี่ยสำหรับการใส่ข้อมูลทางสถิติและใช้ RandomForestClassifier สำหรับการทำนายแบบจำลอง เรามีความแม่นยำ 84.7% โดยมีค่าเบี่ยงเบนมาตรฐาน 0.007 นี่เป็นผลลัพธ์ที่สมเหตุสมผล แต่จะมีประโยชน์หากทราบว่ากลยุทธ์การใส่ข้อมูลแบบใดที่ดีที่สุดสำหรับประสิทธิภาพการสร้างแบบจำลองเชิงคาดการณ์

สรุป

คลาส SimpleImputer เป็นวิธีที่มีประสิทธิภาพในการกำหนดค่าที่ขาดหายไปโดยใช้สถิติที่คำนวณได้ ด้วยการใช้k -fold cross validation เราสามารถระบุได้อย่างรวดเร็วว่ากลยุทธ์ใดที่ส่งผ่านไปยังคลาส SimpleImputer ให้ประสิทธิภาพการสร้างแบบจำลองคาดการณ์ที่ดีที่สุด

--

--

รศ. ดร. เชฏฐเนติ ศรีสอ้าน
รศ. ดร. เชฏฐเนติ ศรีสอ้าน

Written by รศ. ดร. เชฏฐเนติ ศรีสอ้าน

รองอธิการบดีฝ่ายเทคโนโลยี มหาวิทยาลัยรังสิต

No responses yet