บทความที่แล้วได้แนะนำวิธีการทำต้นไม้ตัดสินใจไปแล้ว
https://phyblas.hinaboshi.com/20171105 จากนั้นก็ได้ทิ้งท้ายเอาไว้ว่าเราสามารถทำต้นไม้ตัดสินใจได้อย่างง่ายดายกว่าโดยใช้ sklearn ดังนั้นในตอนนี้จะลองมาใช้กันดู
วิธีการใช้จะคล้ายกับการถดถอยโลจิสติก (
https://phyblas.hinaboshi.com/20171010) และเพื่อนบ้านใกล้ที่สุด k ตัว (
https://phyblas.hinaboshi.com/20171031) ที่ได้แนะนำไปก่อนหน้า
นั่นคือเริ่มจากสร้างออบเจ็กต์ขึ้นมา แล้วก็ใช้ fit เพื่อเรียนรู้ จากนั้นก็ใช้ prefict เพื่อทำนาย
ตัวอย่างการใช้ sklearn
หากลองดูรายละเอียดภายในออบเจ็กต์ของต้นไม้ตัดสินใจจะพบว่ามีไฮเพอร์พารามิเตอร์มากมายที่สามารถปรับได้
ได้
รายละเอียดภายในค่อนข้างซับซ้อนจึงจะยังไม่พูดถึงตรงนี้ แต่ที่สำคัญที่สุดก็คือ max_depth
ถ้าหากเราไม่ใส่ค่านี้จะเป็นการให้แตกกิ่งไปเรื่อยๆจนกว่าจะแบ่งแยกข้อมูลได้ถูกต้องทั้งหมด
แต่ถ้าระบุ max_depth ลงไปก็จะเป็นการจำกัดจำนวนครั้งในการแตก
ลองนำข้อมูลตัวอย่างเดิมมาแบ่งแบบเดิมแต่คราวนี้กำหนดความลึกให้เปลี่ยนไปเรื่อยๆแล้วเทียบกันดู
จะเห็นลำดับการแบ่งไปเรื่อยๆทีละขั้นชัดเจน
ส่วน criterion คือวิธีการคำนวณค่าความไม่บริสุทธิ์ เลือกได้ระหว่าง gini กับ entropy
ค่าตั้งต้นคือ gini หากลองเปลี่ยนเป็น entropy ดูก็อาจได้ผลต่างไปจากเดิม แต่ก็จะไม่ต่างกันมาก
นอกจากนี้ก็ยังมีอีกมากมายให้ปรับได้ ดูรายละเอียดต่อได้ใน
http://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html สิ่งที่น่าจะใช้ประโยชน์ได้อย่างดีอีกอย่างสำหรับต้นไม้ตัดสินใจก็คือ สามารถวิเคราะห์ความสำคัญของตัวแปรได้
สามารถทำได้โดยดูที่ค่าแอตทริบิวต์ .feature_importances_ หลังจากที่ได้ทำการ fit ไปเสร็จแล้ว
ลองยกตัวอย่าง เช่น ลองสร้างกลุ่มก้อนที่มีตัวแปรที่พิจารณาอยู่ ๖ ตัว แล้วให้ใช้ต้นไม้ตัดสินใจช่วยจำแนกดังนี้
จะเห็นว่าได้ค่าความสำคัญออกมา ซึ่งบอกให้รู้ว่าตัวแปรลำดับที่เท่าไหร่มีส่วนร่วมในการแบ่งแค่ไหน ค่ายิ่งมากยิ่งสำคัญ ทั้งหมดรวมกันจะเป็น 1
ซึ่งหากเราลองวาดภาพแสดงการกระจายค่าของตัวแปรที่สำคัญดูแบบนี้
จะเห็นได้ว่าข้อมูลถูกแบ่งกันเป็นกลุ่มอย่างชัดเจน แสดงให้เห็นว่าสามารถใช้ตัวแปรทั้งสองตัวนี้อธิบายแบ่งแยกกลุ่มได้อย่างดี
แต่ถ้าเอาตัวแปรที่สำคัญน้อยสุดไปวาด
จะพบว่าข้อมูลมีการซ้อนทับ แสดงให้เห็นว่าตัวแปรสองตัวนี้ใช้อธิบายการจำแนกข้อมูลไม่ค่อยได้