บันทึก training data science EP 6: Decision Tree – ทางแยกมันแยกยาก
ตอนก่อนหน้า: บันทึก training data science EP 5: Logistic Regression & Dummy Classifier – Regressor ที่ไม่ใช่ Regressor
ต่อจาก EP 5 ที่เราคุยกันเรื่อง Classification นะฮะ เรามีอีก model นึงเพื่อทำหน้าที่วิเคราะห์การระบุกลุ่มของข้อมูล นั่นคื๊อ…
Decision tree
Decision tree เป็น classification model ที่คล้ายกับ Logistic regression แต่ความต่างของทั้งสองอยู่ที่นี่
Decision tree จะวิเคราะห์ข้อมูลแบบกล่องครอบผลลัพท์แต่ละค่า เราสามารถกำหนดให้กล่องมีขนาดเล็กลงเพื่อให้คลุมกับข้อมูลได้มากขึ้นจากการกำหนดค่า parameter นะฮะ ทำให้เราใช้งานได้แม้ว่าจะมีข้อมูลปริมาณไม่เยอะ แต่ข้อเสียคือ ถ้ามี outlier จะทำให้ค่าแกว่งง่ายมากเพราะจะต้องวาดกล่องไปคลุม outlier ด้วยฮะ
ส่วน Logistic regression จะเป็นการวาดเส้นให้ทับจุดข้อมูลมากที่สุดอย่างที่อธิบายไปในตอนที่แล้วฮะ ต้องใช้ข้อมูลปริมาณเยอะใช้ได้ ถึงจะได้ค่าที่แม่นยำพอ แต่กลับกัน ถ้ามี outlier อยู่ มันก็ยังประมวลผลได้ไม่แกว่งนักฮะ
Reference link:
- https://blog.bigml.com/2016/09/28/logistic-regression-versus-decision-trees/
- https://www.geeksforgeeks.org/ml-logistic-regression-v-s-decision-tree-classification/
เตรียมข้อมูลกันก่อน
เริ่มจากให้ตัวแปร x
เก็บค่า Pclass, is_male, และ Age ฮะ ไม่ลืมว่าเราจะไม่เอาค่า NaN มาใช้งานนะฮะ
จากนั้นกำหนดตัวแปร y
ให้เป็นค่า classifier ของ Fare จากการใช้ .map()
คู่กับฟังก์ชันที่เราสร้างเอง ฟังก์ชันนี้จะ return มาเป็น string บอกว่า Fare เท่านี้อยู่ใน classifier อะไรฮะ
เริ่มต้นสร้าง Model
เราสร้าง object DecisionTreeClassifier
มาก่อน กำหนด parameter สองตัวหลัก ได้แก่
criterion
ให้เราเลือกระหว่าง- “gini” มาจาก “gini impurity” เป็นการวัดว่า ถ้าเราสุ่มค่าขึ้นมาค่านึง เราจะคำนวณผลลัพท์จากค่านั้นผิดเพี้ยนไปเท่าไหร่ อย่างไรฮะ มักใช้เพื่อลดค่า error ของ classification
- “entropy” เป็นการวัดความไม่บริสุทธิ์ของข้อมูล หรืออีกความหมายนึงก็คือ ข้อมูลแตกต่างกันมากแค่ไหน ใช้สำหรับการวิเคราะห์ในเบื้องต้น (exploratory analysis)
max_depth
ระบุว่า Tree ของเราจะแยกย่อยไปกี่ชั้น ครั้งนี้ผมจะกำหนดเอาไว้ที่ 3 นะฮะ
Reference link:
- https://medium.com/@jason9389/gini-impurity-and-entropy-16116e754b27
- https://www.quora.com/What-is-difference-between-Gini-Impurity-and-Entropy-in-Decision-Tree
- https://dzone.com/articles/logistic-regression-vs-decision-tree
- https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html
ช่นเคย เราใช้ .fit()
กับตัวแปร x
และ y
มาดูกันก่อนว่าค่าที่เป็นไปได้มีอะไรบ้าง ด้วยคำสั่ง .classes_
เสร็จแล้วล่ะฮะ
เปิดตัว model
เรามาลองดูว่า Model หน้าตาเป็นแบบไหน ด้วยคำสั่ง
sklearn.tree.export_graphviz()
อ่านยากจัง เราเลยมาใช้ script นี้ให้มันวาดออกมาเป็น diagram เข้าใจง่ายๆ กันฮะ
try:
from StringIO import StringIO
except ImportError:
from io import StringIO
import sklearn.tree
import IPython.display
import pydot
File_obj = StringIO()
sklearn.tree.export_graphviz(tree, out_file=File_obj)
Graph = pydot.graph_from_dot_data(File_obj.getvalue())
IPython.display.Image(Graph[0].create_png())
ลองมาอ่านกราฟกันคร่าวๆ นะฮะ เอาด้านซ้ายสุด
- ถ้า
x[0]
หรือ Pclass มีค่าน้อยกว่าหรือเท่ากับ 1.5 (อีกความหมายคือ Pclass มีค่า 1) - และถ้า
x[1]
หรือ is_male มีค่าน้อยกว่าหรือเท่ากับ 0.5 (อีกความหมายคือ is_male เท่ากับ 0 หรือเป็นผู้หญิง) - และถ้า
x[2]
หรือ Age มีค่าน้อยกว่า 43.5 - ผลลัพท์ที่ได้คือ [2, 11, 23, 26]
- นั่นคือ ถ้ามีข้อมูลตามเงื่อนไขข้างต้น มีโอกาสเป็น Quite rich ถึง 26
Cheap | Luxury | Medium | Quite rich |
---|---|---|---|
2 | 11 | 23 | 26 |
เอ๊ะ เรามีตัวแปร x
อยู่สามตัว ตัวไหนที่มีผลมากที่สุด ใช้คำสั่งนี้ฮะ .feature_importances_
ซึ่ง feature เนี่ย เราใช้ในความหมายว่าเป็น column ที่สนใจของข้อมูลนั้นๆ ฮะ
และสุดท้ายลองทำนายกันดู ด้วยข้อมูลลูกเรือที่อยู่ Pclass 1 เป็นผู้หญิง (is_male = False) และมีอายุ 40 ปี model ของเราก็ทำนายว่าคนนี้จ่าย Fare ในระดับ Quite rich ฮะ
จบไปแล้วนะฮะ ทีนี้ถ้ามีคำถามว่า อ้าว แล้วเราจะใช้ Decision tree ตอนไหน Logistic regression ตอนไหน ก็ต้องตอบว่า ด้วยความที่ Logistic regression มันเป็นสมการเส้นตรง ถ้าเรามั่นใจว่า classification ของเราจะได้ผลลัพท์เป็นสองกลุ่มที่แตกต่างกันแบบชัดเจน ก็เลือกใช้ Logistic regression ฮะ แต่ถ้าไม่ใช่หรือไม่มั่นใจ ก็ใช้ Decision tree แทนนะฮะ
รอบหน้าจะมาเหลาให้อ่านกันใหม่เน้อ
บาย~
ตอนต่อไป: บันทึก training data science EP 7: Metrics – สินค้าที่ผ่าน QC