สวัสดีครับทุกท่าน สำหรับบทความนี้เป็นการทำ Decision Tree ด้วย scikit-learn ครับ ซึ่งเจ้า Decision Tree นี้ถ้าแปลเป็นภาษาไทยแล้วจะได้ว่า ต้นไม้ตัดสินใจ ซึ่งหน้าที่ของมันก็ตามชื่อครับ คือช่วยในการตัดสินใจโดยอ้างอิงจากข้อมูลที่เราป้อนให้มันเข้าไป
สำหรับการทำงานเบื้องลึกของ Decision Tree สามารถอ่านได้ที่นี่
สิ่งที่เราต้องการจากมันคือแผนภาพประมาณนี้ครับ
ชุดข้อมูลที่ผมใช้ในการเขียนบทความนี้อ้างอิงมาจากแอพ fitness tracker ของผมเอง (ฮา) ผมพยายามไล่ข้อมูลเก่าๆที่คอยบันทึกว่าผมไปออกกำลังกายวันไหนบ้าง แล้ววันนั้นมีปัจจัยอะไรบ้างที่จะทำให้ผมไปหรือไม่ไปออกกำลังกาย ทั้งมีงานที่ต้องทำหรือเปล่า ป่วยหรือเปล่า ฝนตก อากาศร้อนหรือแม้แต่ว่าสนามวิ่งปิดหรือเปล่า
แล้วนำมาบันทึกลงเก็บไว้เป็นไฟล์ csv อันนี้เป็นหน้าตาของข้อมูลครับ
ข้อมูลสามารถดาวน์โหลดได้ที่นี่
ก่อนอื่นก่อนที่จะเริ่มต้นเขียนกัน ในบทความนี้มีไลบรารี่ที่จำเป็นตามนี้ 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() ออกมาถึงจะดูได้)
อันนี้เป็นภาพที่ตัวโมเดลผมสร้างออกมาได้ วิธีอ่านให้อ่านจากข้างบนลงมาข้างล่างเรื่อยๆครับ เวลาอ่านว่าใช่หรือไม่ใช่ให้อ่านจาก value ว่ามี [,] ค่าเป็นยังไง
อย่าง [4, 0] คือมีโอกาสไป 4 โอกาสไม่ไป 0 จาก samples ที่มี
ที่ผ่านมาผมไม่ได้มีแฟนเพจเฟสบุ๊คหรือช่องทางติดต่อที่ง่ายๆ เวลาคนมีปัญหาอะไรเลยอาจจะไม่สะดวกบ้าง ผมเลยเปิดแฟนเพจเฟสบุ๊คขึ้นมาครับ (พึ่งเปิดมาไม่นานเหมือนกัน) ก็ถ้าใครมีปัญหาหรืออยากปรึกษาเรื่องอะไรสามารถติดต่อได้ที่แฟนเพจเลยนะครับ สวัสดีครับ
ลิ้งค์แฟนเพจ