Botnoi Classroom — มาทำให้ผลลัพธ์ดีขึ้นด้วย Ensemble Method กันเถอะ!

Arissara Chotivichit
botnoi-classroom
Published in
4 min readNov 10, 2019

สวัสดีค่ะทุกคน นี่ก็ครบ 1 เดือนของ Botnoi Classroom แล้ว เนื้อหาที่เรียนก็เข้มข้นขึ้นมากๆ สำหรับสิ่งที่จะมาพูดถึงในบทความนี้ก็ขอแนะนำให้คนที่ยังไม่มีพื้นฐานเกี่ยวกับ Data Science ให้ไปอ่าน Medium ก่อนๆของ Botnoi Classroom ก่อนนะคะ จะได้พอมี Idea คร่าวๆกันก่อนจะได้ไม่งง

สำหรับคนที่อ่าน Medium ก่อนๆของ Botnoi Classroom แล้วเรามาทำความรู้จักกับ Ensemble Method กันเลยดีกว่า

Ensemble Method คืออะไร

Ensemble Method คือหนึ่งในเทคนิคของ Machine learning ที่นำ Model หลายๆ Model มารวมกันเพื่อที่จะทำให้ผลลัพธ์ออกมาดีที่สุด ซึ่ง Model ที่นำมาใช้ สามารถใช้ Algorithm ของ Machine learning อะไรก็ได้อย่างเช่น Linear Regression, Logistic Regression, Naive Bay และอื่นๆ แต่ในบทความนี้เราจะมาพูดถึง Algorithm ของ Machine learning ที่เป็นที่นิยม นั่นก็คือ Decision Tree

Decision Tree คืออะไร

ตามชื่อเลยค่ะ มันก็คือการตัดสินใจในรูปแบบของ Tree นั่นเอง หลายคนคงงงกันใช่มั้ยว่ามันคืออะไร? เรามาอธิบายด้วยตัวอย่างดีกว่า แต่ก่อนอื่นก็ต้องแนะนำก่อนว่า Tree คืออะไร

จากรูป Tree ก็เหมือนต้นไม้ต้นนึง มีรากมีกิ่งแล้วก็มีใบแตกออกมา ตัวบนสุดของ Tree จะเรียกว่า Root node ส่วนตัวที่มีลูกศรชี้ออกมาจะเรียกว่า Internal Node ส่วนตัวสุดท้ายของ Tree จะเรียกว่า Leaf node (ไม่มีลูกศรชี้ออกมา)

พอเราเข้าใจว่าโครงสร้างของ Tree เรามาพูดถึง Decision Tree โดยจะมีตัวอย่างประกอบเพื่อความเข้าใจค่ะ

Dataset ที่คิดขึ้นมาเอง

อันนี้คือ Dataset เล็กๆที่มี Features อยู่ 2 อันคือ อ้วนมั้ย และ ออกกำลังกายรึเปล่า ซึ่งเราจะเอามาทำนายว่าคนที่มีพฤติกรรมแบบนี้นั้นสุขภาพดีรึเปล่า

จุดมุ่งหมายสูงสุดของการทำ Decision Tree ให้ได้ดีที่สุดก็คือการที่เราเลือก Root node ของเรา ให้มีประสิทธิภาพสูงสุด แค่นั้นเอง ซึ่งเราจะสามารถรู้ได้ว่า Split ไหนดีที่สุดโดยการเปรียบเทียบกัน

ดัชนีชี้วัดประสิทธิภาพของ Tree (Metric Used to Determine Tree’s Efficiency)

อย่างที่เราทราบกัน การจัดการกับ data ที่คุ้นเคยกันหลัก ๆ ก็มีสองแบบ ซึ่งก็คือ

  1. Regression — ใช้กับตัวเลข
  2. Classification — ใช้กับ Class value

ด้วยการทำงานที่ต่างกันของทั้งสองวิธี วิธีวัดประสิทธิภาพของ Decision tree ก็จะต่างกันซึ่งจะสามารถทำได้หลายวิธีเช่น

  1. Gini Coefficient — ใช้กับ Classification Model
  2. Mean Squared Error (MSE) — ใช้กับ Regression Model
  3. Cross Entropy — ใช้กับ Classification Model

Gini Coefficient

เจ้าค่า Gini เนี่ย จะได้มาจากการหา Probability ของแต่ละ Class ที่จะเกิดขึ้นในแต่ละ Decision เวลา Decision tree ของเราแยก Data ออกมาเป็น 2 กลุ่ม (แตกกิ่ง) ที่จำนวนของ Sample ต่างกัน ความเป็นไปได้ของ Class ต่าง ๆ ก็จะต่างกันออกไป และความเป็นไปได้ที่ต่างเหล่านี้ก็จะส่งผลกระทบต่อ Gini coefficient ค่ะ

Gini = 1 — ( P(class1)² + P(class2)² + … + P(classN)²)

เราจะเอา Dataset ด้านบน (ที่คิดขึ้นมาเอง) มาสร้างเป็น Tree ออกมาเพื่อคำนวนว่าค่า Gini ของเรานั้นมีค่าเท่าไหร่โดยใช้สูตรด้านบน

ตัวอย่างจาก Dataset ด้านบน

Gini = 1-(True Samples/All Samples in this branch)²-(False Samples/All Samples in this branch)²

มาเริ่มจาก Tree ฝั่งซ้ายก่อน:

Fat — T → Healthy ค่า Gini =1-(20/50)² — (30/50)² = 0.48

Fat — F → Healthy ค่า Gini =0.47

ฝั่งขวา: Exercise — T → Healthy ค่า Gini = 0.18

Exercise — F →Healthy ค่า Gini = 0.32

จากนั้นเราก็จะมาหา Average Gini ของทั้ง 2 Tree

Fat: Average Gini= (50/180)(0.48) + (130/180)(0.47) = 0.47

Exercise Average Gini = 0.32

พอถึงตรงนี้แล้ว ทุกคนคิดว่าค่า Gini สูงหรือต่ำหมายถึงประสิทธิภาพที่ดีกว่ากันคะ

……..

เฉลย: ยิ่งค่า Gini coefficient ยิ่งน้อย ก็จะยิ่งหมายถึงประสิทธิภาพที่ดีขึ้น เพราะว่าค่า Gini จะแปรผันกับ Loss ที่เกิดขึ้น ยิ่ง Loss เยอะ ค่า Gini ก็ยิ่งเยอะ (เข้าใกล้ 1) และถ้า Loss น้อย (ซึ่งแปลว่า Accuracy สูง) ก็จะได้ค่า Gini ที่ต่ำลงค่ะ แปลว่า Dataset นี้ตัว Feature: Excercise จะได้อยู่เป็น Root Node นั่นเอง

Mean Squared Error (MSE)

เนื่องจากเวลาทำ Regression เราจะมีเส้นตรงที่ลากเพื่อจะ Fit กับ Data ให้ได้มากที่สุด เราก็จะมีค่า Error ที่เกิดขึ้นระหว่างค่าจริง (Data) และค่าประมาณ (ค่าบนเส้นตรงเส้นนั้น) เราจะนำผลต่างระหว่างค่านั้นมายกกำลัง 2 เพื่อให้ค่าไม่เป็นค่าติดลบ และหาค่าเฉลี่ยของ Error เหล่านี้ (ตามชื่อเลยค่ะ Mean (ค่าเฉลี่ย) Squared (กำลัง 2) Error (ค่าต่างระหว่างค่าจริงและค่าประมาณ))

Graph ของมันก็จะเป็นแบบนี้

ถ้าเขียนออกมาในรูปแบบสมการ ก็แบบนี้เลยค่า

Cross Entropy

Cross Entropy ก็เป็นอีกวิธีนึงในการคำนวน Error ของเราโดยใช้กับ Classification หลักการของ Cross entropy คือการ Weight ระหว่าง 2 ฝั่งค่ะ ในส่วนตรงนี้อาจจะมีคณิตศาสตร์เข้ามาเกี่ยวข้องด้วยเยอะหน่อยนะคะ สูตรแรกนี้คือสูตรของ Loss function

สูตรที่สองของเรา คือการบอกว่า ตัว Loss function เนี่ย ต้อง Differentiable นะ (สามารถหาอนุพันธ์ได้) เพราะสิ่งเหล่านี้จะเป็นตัวบอกได้ว่า Model ของเรา ดีแล้วหรือยัง

เมื่อเราพอเข้าใจ Concept แล้ว เราไปลุย Concept อันยิ่งใหญ่ของ Ensemble method กันต่อเลยดีกว่าค่ะ

ประเภทของ Ensemble Methods

1. Bagging (Bootstrap Aggregating)

Bagging คือ การเอา Model หลายๆ Model มารวมกันซึ่งเราจะใช้ Model อะไรก็ได้ โดยแต่ละ Model เราจะทำการสุ่ม Sample ออกมา โดยเราจะทำการหยิบ Sample ของ Training set มาใช้กับ Model แล้วนำกลับเข้าไปใส่ใน Training set เหมือนเดิม ซึ่งวิธีการสุ่มแบบนี้จะมีชื่อเรียกว่า “Random with Replacement” (Bootstrapping) ต่อมาเราจะทำการสุ่ม Set ของ Feature เพื่อมาหาว่า Feature ไหนจะทำให้ผลลัพธ์ของการ Split ดีที่สุด พอเราเอา Sample เหล่านั้นมา Train ในแต่ละโมเดล เราก็จะได้ผลลัพธ์ออกมา ซึ่งเราจะมีการจัดการกับผลลัพธ์นี้ 2 วิธี นั่นก็คือ

  1. หาค่าเฉลี่ย (Averaging)
  2. ค่าที่พบมากที่สุด (Voting)

ซึ่งวิธีการทำงานของมันจะเป็นแบบ Parallel method นั่นก็คือ ขั้นตอนในการสุ่มและ Train model นั้นทำไปพร้อมกัน

Parallel Method

ส่วนข้อดีของ Bagging ก็ขออธิบายเป็นตัวอย่างนะคะ ถ้าเรามี Model 1 ชื่อว่า m1 และ Model 2 ชื่อว่า m2 เรา Train sample ไปใน m1 1000 Samples และ m2 2,000 Samples ซึ่งข้อดีของมันคือ m1 อาจจะรู้ข้อมูลบางอย่างที่ m2 ไม่รู้ก็ได้ เพราะว่า Sample ของทั้งสอง Model นั้น ไม่ได้เหมือนกัน 100% หรือถ้ายกตัวอย่างในชีวิตจริงก็เหมือนกับทำงานในบริษัทที่เราจะจ้าง Specialist ในแต่ละด้านมา เพื่อทำให้บริษัทเราโตยิ่งขึ้น

Random Forest:

Random Forest คือ Algorithm หนึ่งที่ใช้ Bagging โดยมี Decision tree เป็น Base Algorithm ขอเรา

2. Boosting

Boosting ก็เป็นอีกวิธีที่นิยมใช้กันมากในปัจจุบัน ซึ่งหลักการง่ายของมันคือการนำข้อผิดพลาด(Error) ของ Model ก่อนๆมา Train ให้กับ Model ใหม่ของเรา โดย Model ทุกตัวจะใช้ Sample ที่เหมือนกันหมดในการ Train แต่ก็จะมี Error ของ Model ตัวก่อนเข้ามาเทรนด้วยเช่นกัน ส่วนวิธีการทำงานของมันจะทำอย่างต่อเนื่องกัน หรือ เรียกว่า Sequencial Method

Sequencial Method

วิธีการหา Error

  1. MSE (Mean Square Error)
  2. Cross Entropy

Gradient Tree Boosting:

Gradient Tree Boosting คือ Algorithm หนึ่งที่ใช้วิธีการ Boosting โดยมี Decision tree เป็น Base algorithm เช่นกัน วิธีการรนี้สามารถใช้ได้กับ Regression และ Classification

และนี่ก็คือ Concept เล็กๆน้อยๆเกี่ยวกับ Ensemble Method ที่ได้เรียนรู้จาก Botnoi Classroom ถ้ามีข้อผิดพลาดตรงไหนหรือมีคำถามก็สามารถ Comment ไว้ได้นะคะ (: จะรีบมาตอบให้เร็วที่สุดเลยค่า สนใจเรียน Data science -> Botnoi Classroom

สนใจใช้บริการในสร้างแชทบอท หรือให้คำปรึกษาเกี่ยวกับ AI & data science ติดต่อได้ผ่านเวป -> Botnoi และ FB Page Botnoi Consulting

Edited by: Arissara Chotivichit and Bhudharhita Teinwan

--

--

Arissara Chotivichit
botnoi-classroom

Freelance Programmer 👩🏻‍💻 Musician 🎸 Environmentalist 🐡