DEV Community

Aditep
Aditep

Posted on

จำแนกผู้ป่วยตามคุณลักษณะทางชีวกลศาสตร์6ส่วนของผู้ป่วยกระดูกและข้อ โดยใช้ machine learning Random Forest Classifier ใน Python

ในปัจจุบันการจำแนกสิ่งต่างๆสำคัญเป็นอย่างมากเพื่อให้สามารถจัดการกับสิ่งนั้นได้อย่างรวดเร็วและมีประสิทธิภาพ ดังนั้นการจำแนกข้อมูลข้อผู้ป่วยกระดูกและข้อจึงจำเป็นต้องใช้เครื่องมือประเภทจัดกลุ่มข้อมูลจำนวนมากมารวมกันเพื่อทำนายผลลัพธ์และแม่นยำต่อกการวินิจฉัยโรค เราจึงเลือกใช้โมเดล”Random Forest Classifier”ในโมเดลนี้เหมาะกับงานวิเคราะห์ข้อมูลหลากหลายประเภทและการจัดกลุ่มเป้าหมาย
            บทความนี้ เราจะมาดูการทำงานจำแนกผู้ป่วยโดยใช้โมเดล machine learning Random Forest Classifier ใน Python กัน เริ่มจากเราจะใช้ Google Colab ในการรันโค้ดทั้งหมดและใช้ dataset ของกลุ่มตัวอย่างผู้ป่วย เราได้มาจาก https://www.kaggle.com/datasets/uciml/biomechanical-features-of-orthopedic-patients/data
            ข้อมูลจะประกอบกันด้วยทั้งหมด2ไฟล์ โดยไฟล์ column_3C_weka.csv จะเป็นข้อมูลการจัดกลุ่มของทั้งหมด3ประเภท ได้แก่ คนปกติจำนวน100ราย ผู้ป่วยโรคหมอนรองกระดูกเคลื่อนทับเส้นประสาทจำนวน60รายและผู้ป่วยโรคกระดูกสันหลังเคลื่อนจำนวน150ราย ในไฟล์ต่อมา column_2C_weka.csv จะเป็นข้อมูที่จะกลุ่มผู้ป่วยที่เป็นโรคหมอนรองกระดูกเคลื่อนทับเส้นประสาทและผู้ป่วยโรคกระดูกสันหลังเคลื่อนรวมเข้าด้วยกันจำนวน210รายและแยกกลุ่มคนปกติออกมาจำนวน100ราย
            โดยผู้ป่วยในแต่ละรายนั้นจะถูกจำแนกตามคุณลักษณะทางชีวกลศาสตร์6ส่วนของของผู้ป่วยกระดูกและข้อ6ส่วนได้แก่ 1) pelvic incidence 2)pelvic tilt 3)lumbar lordosis angle 4)sacral slope 5)pelvic radius 6)grade of spondylolisthesis

ขั้นตอนที่1 : ทำการนำเข้า libraries ที่จำเป็นต้องใช้หมดลงใน Google Colab
Image description

ขั้นตอนที่2 : โหลดข้อมูล Dataset ลงใน Google Colab
ข้อมูลDatasetทั้งหมดของผู้ป่วยสามารถดาวน์โหลดได้ที่ https://www.kaggle.com/datasets/uciml/biomechanical-features-of-orthopedic-patients/data ต่อมาเราจะทำการนำไฟล์Datasetนำเข้าไปยังGoogle Colab
Image description

ขั้นตอนที่3 : ทำการโหลดข้อมูลจาก DataFrame และวิเคราะห์ข้อมูลใน Python
Image description
Image description
เราจะตั้งชื่อตัวแปร df1,df2 ไว้เป็นที่เก็บข้อมูลของDataFrameจากไฟล์ CSVที่จะเก็บข้อมูลไว้คนละชุด
Image description
Image description
ต่อมาเราจะใช้head เมธดแสดงข้อมูลตัวอย่าง5อันดับแรกของ df1,df2
Image description
Image description
และทำการใช้คำสั่งcolumnsทั้งสองตัวแปรเพื่อแสดงชื่อคอลัมน์ทั้งหมดจากข้อมูลที่เราได้เลือกที่จะพัฒนาในตัวแปรdf1และใช้ตัวแปรdf2เป็นชุดข้อมูลทดสอบั้งหมด

ขั้นตอนที่4 : การจัดการข้อมูล
Image description
ทำการจัดข้อมูลโดยแยกข้อมูลลักษณะของผู้ป่วยและข้อมูลของผลลัพธ์ออกมาจากDataFrameของตัวแปรdf1มาเก็บไว้ในตัวแปร x และ y โดย x จะเก็บข้อมูลColumn1, Column2, Column3 และy เก็บข้อมูลคอลัมน์ Target

ขั้นตอนที่5 : การตรวจสอบและเปลี่ยนค่า y ให้เป็นไปตามเงื่อนไข
Image description
โดยตามเงื่อนไขของ y จะค้นหาค่าที่ตรงกับHerniaและSpondylolisthesisเมื่อเจอค่าที่ตรงกับเงื่อนไขจะเปลี่ยนให้เป็น abnormalวนไปเรื่อยๆจนว่าจะครบทั้งหมดภายในy
 
ขั้นตอนที่6 : การเตรียมข้อมูลสำหรับโมเดล Machine Learning
Image description
เราจะเริ่มจากการแปลงข้อมูลจากข้อความเป็นตัวเลข ด้วยการสร้างตัวแปรencode โดยใช้คลาส LabelEncoder และ encoder.transform(y) แปลงค่าจากข้อความเป็นตัวเลขจากตัวแปรที่สร้างขึ้นไว้ encoder.fit(y) แล้วนำเลขที่แปลงได้ไปเก็บไว้ที่ encoded_y
Image description
และต่อมาเราจะทำการแบ่งข้อมูลออกเป็น2ชุดโดยการสุ่มตามฟังก์ชัน train_test_split เราจะเก็บข้อมูลตัวเลขที่ใช้สำหรับฝึกไว้ใน x ส่วน y_train และ y_test จะเป็นเวกเตอร์ที่เก็บค่าตัวเลขที่แปลงจาก y สำหรับชุดฝึกและชุดทดสอบตามลำดับ ดังโค้ดต่อไปนี้
Image description

ขั้นตอนที่7 : จำแนกข้อมูลโดยใช้โมเดล Random Forest Classifier
Image description
จากบรรทัดนี้เราจะimport โมเดล Random Forest Classifier จาก scikit-learn
Image description
ต่อมาเราจะทำการสร้างโมเดล Random Forest Classifier ทำการกำหนดจำนวนต้นไม้จำนวน100ต้นและตั้งค่า random_state เพื่อให้ผลลัพธ์ซ้ำได้
Image description
เรียกใช้ฟังก์ชั่น Train ในโมเดล โดย X_train จะเป็น DataFrame และ y_train จะเป็น Series หรือ ndarray เริ่มการทำนายผลลัพธ์บนข้อมูลชุดTest

ขั้นตอนที่8 : ประเมินประสิทธิภาพของโมเดล
Image description
เริ่มจากการ import ฟังก์ชั่นการคำนวณประสิทธิภาพของโมเดล accuracy_score (ความแม่นยำ) และ f1_score (F1 Score) คำนวณความแม่นยำของโมเดลโดยเปรียบเทียบผลการทำนายกับค่า label แล้วนำไปคำนวณ F1 Score ของโมเดล สุดท้ายแสดงผลลัพธ์ของความแม่นยำ (Accuracy) และ F1 Score ได้ผลลัพธ์ดังนี้
Image description

สรุปผล
เราจะเห็นได้ว่า การที่เรานำโมเดล Random Forest Classifier เข้ามาใช้ในการคำนวณหามีค่าความแม่นยำและคะแนนของF1มากถึง96% ทำให้เห็นว่าเป็นแนวทางที่ดีในการนำข้อมูลออกจำแนกไม่ว่าจะเป็นการลดเวลาในการจัดกลุ่ม และโมเดลนี้ยังนำไปพัฒนาให้มีเปอร์เซ็นต์ข้อผิดพลาดลดน้อยลงกว่านี้ได้อีกในอนาคต

References
https://www.kaggle.com/datasets/uciml/biomechanical-features-of-orthopedic-patients/data

Top comments (0)