สวัสดีครับทุกท่าน สำหรับบทความนี้เป็นการทำ Decision Tree ด้วย scikit-learn ครับ ซึ่งเจ้า Decision Tree นี้ถ้าแปลเป็นภาษาไทยแล้วจะได้ว่า ต้นไม้ตัดสินใจ ซึ่งหน้าที่ของมันก็ตามชื่อครับ คือช่วยในการตัดสินใจโดยอ้างอิงจากข้อมูลที่เราป้อนให้มันเข้าไป
สำหรับการทำงานเบื้องลึกของ Decision Tree สามารถอ่านได้ที่นี่
สิ่งที่เราต้องการจากมันคือแผนภาพประมาณนี้ครับ
![](https://nonthakon-blog.fly.dev/content/images/max/800/0-uxjdim1ckkmuk09k.png)
ชุดข้อมูลที่ผมใช้ในการเขียนบทความนี้อ้างอิงมาจากแอพ fitness tracker ของผมเอง (ฮา) ผมพยายามไล่ข้อมูลเก่าๆที่คอยบันทึกว่าผมไปออกกำลังกายวันไหนบ้าง แล้ววันนั้นมีปัจจัยอะไรบ้างที่จะทำให้ผมไปหรือไม่ไปออกกำลังกาย ทั้งมีงานที่ต้องทำหรือเปล่า ป่วยหรือเปล่า ฝนตก อากาศร้อนหรือแม้แต่ว่าสนามวิ่งปิดหรือเปล่า
แล้วนำมาบันทึกลงเก็บไว้เป็นไฟล์ csv อันนี้เป็นหน้าตาของข้อมูลครับ
![](https://nonthakon-blog.fly.dev/content/images/max/800/1-efwejo35esflbhe2iwvieg.png)
ข้อมูลสามารถดาวน์โหลดได้ที่นี่
ก่อนอื่นก่อนที่จะเริ่มต้นเขียนกัน ในบทความนี้มีไลบรารี่ที่จำเป็นตามนี้ sklearn, pandas, pydotplus, graphviz
เพื่อความสะดวกในการเขียนผมเลยใช้ Jupyter Notebook ด้วยในการเขียนครับ
มาเขียนโค้ดกันเลยimport numpy as np
import pandas as pd
from sklearn import treeinput_file = “running.csv”
df = pd.read_csv(input_file, header = 0)
ก่อนอื่นผมเริ่มจากการอ่านไฟล์มาเก็บไว้ใน dataframe ไว้ก่อนd = {‘Y’: 1, ’N’: 0}df[‘go out?’] = df[‘go out?’].map(d)
df[‘is raining’] = df[‘is raining’].map(d)
df[‘is hot’] = df[‘is hot’].map(d)
df[‘sick?’] = df[‘sick?’].map(d)
df[‘work’] = df[‘work’].map(d)
df[‘stadium close’] = df[‘stadium close’].map(d)
เนื่องจากไฟล์ csv ที่ผมบันทึกไว้เก็บไว้ใน format Y:N ผมจึงต้องแปลงเป็น format 1:0 แทนก่อนที่จะป้อนเข้า decision treey = df[‘go out?’]
X = df[[‘is raining’,‘is hot’,‘sick?’,‘work’,‘stadium close’,‘last time go out(day)’]]clf = tree.DecisionTreeClassifier()
clf = clf.fit(X,y)
จากนั้นผมก็เอาข้อมูลป้อนเข้าไปให้ decision tree train ให้from IPython.display import Image
from sklearn.externals.six import StringIO
import pydotplusdot_data = StringIO()tree.export_graphviz(clf, out_file=dot_data,
feature_names=features)graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
Image(graph.create_png())
เมื่อ train ตัวโมเดลเสร็จแล้วเราสามารถใช้โค้ดข้างบนนี้แสดงผลภาพ decision tree ที่ตัวโมเดลสร้างขึ้นมาได้ครับ (ถ้าไม่ได้ใช้ Jupyter ให้ export บรรทัด graph.create_png() ออกมาถึงจะดูได้)
![](https://nonthakon-blog.fly.dev/content/images/max/800/1-ibfbvnflzahnvfdwk4qjua.png)
อันนี้เป็นภาพที่ตัวโมเดลผมสร้างออกมาได้ วิธีอ่านให้อ่านจากข้างบนลงมาข้างล่างเรื่อยๆครับ เวลาอ่านว่าใช่หรือไม่ใช่ให้อ่านจาก value ว่ามี [,] ค่าเป็นยังไง
อย่าง [4, 0] คือมีโอกาสไป 4 โอกาสไม่ไป 0 จาก samples ที่มี
ที่ผ่านมาผมไม่ได้มีแฟนเพจเฟสบุ๊คหรือช่องทางติดต่อที่ง่ายๆ เวลาคนมีปัญหาอะไรเลยอาจจะไม่สะดวกบ้าง ผมเลยเปิดแฟนเพจเฟสบุ๊คขึ้นมาครับ (พึ่งเปิดมาไม่นานเหมือนกัน) ก็ถ้าใครมีปัญหาหรืออยากปรึกษาเรื่องอะไรสามารถติดต่อได้ที่แฟนเพจเลยนะครับ สวัสดีครับ
ลิ้งค์แฟนเพจ