การทำนายโรคหัวใจโดยใช้การเรียนรู้ของMachine Learning
Published: 2024-04-18 06:51:58

การทำนายโรคหัวใจโดยใช้เทคโนโลยีการเรียนรู้ของMachine Learning เป็นกระบวนที่สำคัญในการวินิจฉัยโรคและดูแลสุขภาพของบุคคล โดยเฉพาะในปัจจุบันที่เทคโนโลยีดิจิทัลมีบทบาทสำคัญในทุกด้านของชีวิตประจำวัน เราสามารถใช้ข้อมูลที่มีอยู่เพื่อสร้างแบบจำลองที่สามารถทำนายโรคหัวใจได้อย่างแม่นยำและรวดเร็วขึ้น  ซึ่งในโปรเจคนี้เราจะใช้ Google Colab ในการรันโค้ดมาเริ่มกันที่ขั้นตอนแรกกันเลย
1.การนำเข้าไลบรารี



![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mhea1toy6sksswhclk0k.png)

**2. การอ่านข้อมูลจากไฟล์ CSV**
ในส่วนนี้ เราจะโหลดไฟล์ heart.csv เข้ามาในmodel  โดยชุดข้อมูลนี้นำมาจาก ลิงค์:  https://archive.ics.uci.edu/ml/datasets/Heart+Disease ซึ่งเราจะได้ dataset ทั้งหมด 14 collum ได้แก่  age, sex, cp, trestbps, chol, fbs, restecg, thalach, exang, oldpeak, slope, ca, thal, target และจะมี ทั้งหมด 303 row


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t9clsveyvl0s5v7on1mq.png)

ผลลัพท์ : 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0msegi2q8cmc0rh378xc.png)

หลังจากนำเข้าข้อมูล ตอนนี้ให้เราทำการเชคว่าชุดข้อมูลมีข้อมูลที่ยังว่างหรือไม่มีข้อมูลเหลืออยู่หรือไม่

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q4d8i7yvv2au7s4k5bxe.png)

ผลลัพท์ :

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/23ufz5tg9f079gxl0azo.png)

จากผลลัพธ์นี้ ข้อมูลของเราไม่มีค่าว่างและค่าที่ซ้ำกัน ดังนั้นข้อมูลชุดนี้จึงสามารถนำมาใช้ในกาวิเคราะห์ต่อไปได้โดยไม่ต้องแก้ไข
**3. การวิเคราะห์ข้อมูล**
   3.1 ต่อมาเราต้องมาวิเคราะห์ตัวแปร "target" ซึ่งเป็นตัวแปรสำคัญ ว่าจะถูกจำแนกด้วยวิธีใด 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3tiyfmqqhepcx9iv8zmv.png)

ผลลัพท์ :

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1az9ssrrijsezoxi4erx.png)
จากผลลลัพท์แสดงให้เห็นุถึง ค่าที่ไม่ซ้ำกันของตัวแปร "target" คือ 0 และ 1 ซึ่งแสดงให้เห็นว่าสามารถนำมาจำแนกประเภท โดยใช้ค่าไบนารีได้  โดย 0 แทนหัวใจที่ปกติไม่มีอาการเป็นโรค และ 1 แทนการมีสมบัติของโรคหัวใจ
   3.2 หลังจากเราจำแนก target ได้แล้ว จึงมาหาความสัมพันธ์ระหว่าง target และ  age, sex, cp, trestbps, chol, fbs, restecg, thalach, exang, oldpeak, slope, ca, thalเพื่อเชคว่าข้อมูลในแต่ละ collum มีความสัมพันธ์กับ target อย่างมีนัยสำคัญหรือไม่ ด้วยการใช้ Exploratory Data Analysis (EDA)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/81n6qhc1y2ulk9o573aq.png)
ผลลัพท์ :

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w7ddpimr1rn5xeppaeq4.png)
จากกราฟสามารถวิเคราะห์ได้ว่า

- เพศ (Sex): หญิงมีโอกาสเป็นโรคหัวใจมากกว่าผู้ชาย

- ประเภทความเจ็บหน้าอก (Chest Pain Type - CP): ผู้ป่วยที่มีประเภทความเจ็บหน้าอก '0' ซึ่งแทนความเจ็บหน้าอกแบบปกติมีโอกาสเป็นโรคหัวใจน้อยกว่า

- ผลการตรวจ Electrocardiographic ในระหว่างการพัก (Resting Electrocardiographic Results - restecg): บุคคลที่มีค่า restecg เท่ากับ '1' และ '0' มีโอกาสเป็นโรคหัวใจมากกว่าผู้ที่มี restecg เท่ากับ '2'

- Angina ที่เกิดจากการออกกำลังกาย (Exercise Induced Angina - exang): ผู้ป่วยที่มี Angina ที่เกิดจากการออกกำลังกาย (exang=1) มีโอกาสเป็นโรคหัวใจน้อยกว่า

- Slope of the Peak Exercise ST Segment - slope : slope  '2' เกี่ยวข้องกับโอกาสเป็นโรคหัวใจสูงกว่าแบบ '0' และ '1'

- Fluoroscopy (ca): ผู้ป่วยที่มีค่า '4' ของ Fluoroscopy มีจำนวนโรคหัวใจที่น่าแปลกใจมาก
แสดงให้เห็นว่าตัวแปรในแต่ละCollumส่งผลต่อtargetอย่างมีนัยสำคัญ
**4.Train Test split**
ในขั้นต่อมาเมื่อเราสามารถความสัมพันธ์ระหว่างแค่ละ collum แล้วก็สามารถเข้าสู่การ Train Test split  โดยเราจะทำการแบ่งชุดข้อมูลทั้งหมดเป็นชุดฝึกและชุดทดสอบ โดยที่ชุดฝึกมีขนาด 80% และชุดทดสอบมีขนาด 20% เพื่อใช้ชุดฝึกเพื่อฝึกโมเดลของเรา และชุดทดสอบจะมีประโยชน์ในการพยากรณ์ประสิทธิภาพของโมเดล

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2cylueukymbrciik8wh6.png)
**5.Algorithm Implementation**
ขั้นตอนต่อมาคือการหาอัลกอริทึมที่ดำเนินการได้ดีที่สุดสำหรับชุดข้อมูลนี้ โดยเราได้ใช้ อัลกอริทึมทั้งหมด 8 อัลกอริทึม 1. Logistic Regression 2. Naive Bayes  3. Linear SVM    4. KNN    5. Decision Tree 6. Random Forest 7. XGBoost 8. Neural network

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4yzs51vnk0iu8nty0bc6.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/urihpnmg1mrn2zrkfx83.png)
ผลลัพท์ : จากผลลัพท์แสดงให้เห็นว่า อัลกอริทึมที่ดำเนินการได้ดีที่สุด  คือ Random forest ที่ 90.16%

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rrkkq0bjgy8c2rn2uw6i.png)

**6.Final Implementation**
ตอนนี้เราสามารถนำอัลกอริทึมที่ดำเนินการได้ดีที่สุดคือ Random forest เข้าสู่โมเดลของเราและตรวจสอบว่าโมเดลของเราจะให้ผลลัพธ์ที่ถูกต้องหรือไม่ด้วยข้อมูลที่มีอยู่

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ssq0jbpwli27qths0f8y.png)
ผลลัพท์ :

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qlobgcnj8sh2usx2r2z4.png)
จากการกำหนด target  1 แทนการเป็นโรคหัวใจ และ target 0  แทนการไม่มีโรคหัวใจ เมื่อนำข้อมูลของผู้ป่วยที่ไม่เป็นโรคหัวใจ (case_1) และผู้ที่ป่วยเป็นโรคหัวใจ(case_2)มาทดสอบ จากผลลัพท์การทำนายแสดงให้เห็นว่าโมเดลสามารถทำนายได้อย่างถูกต้อง 
ดังนั้นจึงสามารถสรุปได้ว่า เราจะสามารถทำนายโรคหัวใจแบบเรียลไทม์โดยใช้ข้อมูลของผู้ป่วยจากโมเดลด้วยการใช้ Random Forest ซึ่งสามารถทำนายโรคหัวใจได้อย่างแม่นยำที่สุด
เพียงเท่านี้เราก็สามมารถนำชุดข้อมูลนี้ไปวิจัยโรคหัวใจได้อย่างแม่นยำถึง90.16%%