3 คะแนน โดย GN⁺ 2026-03-02 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เป็นโครงสร้างที่ แบ่งพื้นที่คุณลักษณะซ้ำ ๆ เพื่อจัดประเภทข้อมูล โดยในแต่ละขั้นจะเลือกการแบ่งที่ให้ Information Gain สูงที่สุด
  • ใช้ Entropy เพื่อวัด ความบริสุทธิ์ (purity) ของข้อมูล และคำนวณ Information Gain จากพื้นฐานนี้
  • อัลกอริทึม ID3 จะคำนวณความต่างของ Entropy ระหว่างโหนดแม่กับโหนดลูกเพื่อหาจุดแบ่งที่เหมาะสมที่สุด และขยายต้นไม้แบบเรียกซ้ำ
  • สามารถใช้ Gini impurity แทน Entropy ได้เช่นกัน โดยทั้งสองวิธีมักให้ผลลัพธ์คล้ายกัน แต่มีประสิทธิภาพในการคำนวณต่างกัน
  • การแบ่งมากเกินไปทำให้เกิด overfitting และ ความไม่เสถียร จึงใช้ pruning หรือ Random Forest เพื่อลดปัญหานี้

แนวคิดพื้นฐานของต้นไม้การตัดสินใจ

  • ต้นไม้การตัดสินใจจะแบ่งข้อมูลจากบนลงล่าง โดยในแต่ละขั้นจะใช้ กฎเงื่อนไข เพื่อแบ่งข้อมูลออกเป็นพื้นที่ที่แยกกันได้ชัดเจน
    • การแบ่งแต่ละครั้งถูกกำหนดโดย คุณลักษณะ (feature) และ ค่าเกณฑ์ (cutoff value) บางตัวของข้อมูล
    • เป้าหมายคือการสร้างโหนดที่บริสุทธิ์ ซึ่งสามารถแยกคลาสได้ชัดเจนในการทำ classification

นิยามและคุณสมบัติของ Entropy

  • Entropy เป็นตัวชี้วัด ความไม่แน่นอนของข้อมูล โดยสำหรับความน่าจะเป็น (p_i) นิยามเป็น (H = -\sum p_i \log_2(p_i))
  • คุณสมบัติสำคัญ
    1. เมื่อมีเพียงเหตุการณ์เดียวที่มีความน่าจะเป็น 1 และที่เหลือเป็น 0 จะได้ (H=0) หมายถึงไม่มีความไม่แน่นอน
    2. เมื่อความน่าจะเป็นของทุกเหตุการณ์เท่ากัน Entropy จะมีค่าสูงสุดและแสดงถึงสถานะที่ไม่บริสุทธิ์ที่สุด
    3. ยิ่งความน่าจะเป็นกระจายตัวเท่า ๆ กันมากขึ้น Entropy ก็ยิ่งเพิ่มขึ้น
  • ดังนั้น โหนดที่บริสุทธิ์ จะมี Entropy เท่ากับ 0 ส่วน โหนดที่มีข้อมูลปะปนกัน จะมีค่า Entropy สูง

Information Gain และอัลกอริทึม ID3

  • Information Gain คำนวณจากความต่างของ Entropy ก่อนและหลังการแบ่ง และบ่งบอกถึง ประสิทธิภาพของการแบ่งข้อมูล
    • สูตร: (\Delta IG = H_{\text{parent}} - \frac{1}{N}\sum N_{\text{child}} \cdot H_{\text{child}})
  • ขั้นตอนของอัลกอริทึม ID3
    1. คำนวณ Entropy ของแต่ละคุณลักษณะ
    2. แบ่งชุดข้อมูลด้วยเกณฑ์การแบ่งหลายแบบและคำนวณ Information Gain
    3. เลือกการแบ่งที่มี Information Gain สูงสุดเพื่อสร้างโหนดตัดสินใจ
    4. เมื่อไม่สามารถแบ่งต่อได้อีก ให้สร้างโหนดใบ
    5. ทำซ้ำแบบเรียกซ้ำกับทุกชุดย่อย แต่หยุดเมื่อองค์ประกอบทั้งหมดเป็นคลาสเดียวกัน
  • ตัวอย่างเช่น เงื่อนไข Diameter ≤ 0.45 ถูกเลือกเป็นการแบ่งครั้งแรก เพราะมี Information Gain สูงสุดที่ 0.574

Gini impurity และตัวชี้วัดทางเลือก

  • Gini impurity เป็นอีกทางเลือกหนึ่งแทน Entropy สำหรับวัดความไม่บริสุทธิ์ของข้อมูล
    • ไม่มีการคำนวณลอการิทึม จึง คำนวณได้เร็วกว่า
    • ในชุดข้อมูลที่ไม่สมดุล Entropy อาจเป็นตัวเลือกที่รอบคอบกว่า
  • โดยทั่วไปทั้งสองวิธีให้ผลลัพธ์คล้ายกัน

ปัญหา overfitting และความไม่เสถียร

  • อัลกอริทึม ID3 จะทำการแบ่งต่อเนื่องเพื่อทำให้ Entropy ต่ำที่สุด จึงอาจทำให้ ต้นไม้ลึกเกินไป
    • สิ่งนี้ก่อให้เกิด overfitting และทำให้ความสามารถในการทำให้เป็นนัยทั่วไปกับข้อมูลใหม่ลดลง
  • นอกจากนี้ยังมีปัญหา ความไม่เสถียร (high variance) ที่โครงสร้างต้นไม้อาจเปลี่ยนไปมากแม้ข้อมูลเปลี่ยนเพียงเล็กน้อย
    • ตัวอย่าง: แม้เพิ่ม Gaussian noise เล็กน้อยให้กับข้อมูลฝึกเพียง 5% ก็อาจได้ต้นไม้ที่แตกต่างออกไปโดยสิ้นเชิง
  • แนวทางแก้คือใช้ pruning เพื่อจำกัดความลึกของต้นไม้ จำนวนใบ หรือจำนวนตัวอย่างขั้นต่ำ เป็นต้น

การขยายไปสู่ Random Forest

  • เพื่อลดความไม่เสถียรของต้นไม้การตัดสินใจเดี่ยว จึงมีการใช้วิธี ฝึกหลายต้นไม้ด้วยตัวอย่างข้อมูลที่แตกต่างกัน แล้วรวมผลการทำนายเข้าด้วยกัน
    • แนวทางนี้เรียกว่า Random Forest ซึ่งให้ทั้งความเสถียรและความสามารถในการทำให้เป็นนัยทั่วไปที่สูง
  • วิธีนี้ช่วยชดเชยข้อเสียของต้นไม้การตัดสินใจ และได้รับการประเมินว่าเป็นหนึ่งในอัลกอริทึมแมชชีนเลิร์นนิงที่ประสบความสำเร็จมากที่สุดจนถึงปัจจุบัน

บทสรุปและการเรียนรู้เพิ่มเติม

  • ต้นไม้การตัดสินใจเป็น โมเดลที่ตีความได้ง่าย เรียนรู้ได้รวดเร็ว และมีการเตรียมข้อมูลไม่ซับซ้อน
  • อย่างไรก็ตาม เพื่อแก้ปัญหา overfitting และความไม่เสถียร จำเป็นต้องใช้ pruning หรือ เทคนิค ensemble
  • บทความนี้ไม่ได้กล่าวถึงต้นไม้สำหรับการถดถอย ความชอบแบบ end-cut ไฮเปอร์พารามิเตอร์ เป็นต้น และแนะนำให้ศึกษาต่อจากแหล่งข้อมูลที่เกี่ยวข้อง

1 ความคิดเห็น

 
GN⁺ 2026-03-02
ความคิดเห็นบน Hacker News
  • ตอนเรียนรู้ตัวจำแนกประเภท อาวุธลับ ที่ได้ผลดีกับผมมากคือฝึกตัวจำแนกเชิงเส้นที่ดีให้ได้ก่อน
    จากนั้นใช้ ค่าเอาต์พุตที่ยังไม่ผ่าน threshold ของตัวจำแนกเชิงเส้นนั้นเป็นมิติคุณลักษณะเพิ่มเติมหนึ่งตัวเพื่อฝึก decision tree แล้วครอบมันด้วยระบบ boosted tree
    วิธีนี้ทำให้โมเดลเชิงเส้นมาชดเชยจุดอ่อนของ decision tree และในทางกลับกัน tree ก็จัดการส่วนที่โมเดลเชิงเส้นทำได้ยาก
    จะพิจารณาการหมุนข้อมูลหรือการทำ normalization ตามแกนก็ได้ แต่ส่วนใหญ่ไม่จำเป็น
    อย่างไรก็ตาม ถ้าคุณลักษณะมีความ sparse มาก tree จะหาจุดแบ่งได้ยาก

    • คิดดูแล้ว นี่ก็เป็นแนวทางที่ใช้คล้ายกันใน reinforcement learning ด้วย
      คือเอาสถานะดิบ (raw state) มาคำนวณเพิ่มเพื่อสร้างเป็น สถานะที่สังเกตได้ (observed state) แล้วค่อยเรียนรู้
      ตัวอย่างเช่น ในเกมงู นอกจากพิกัดของงูแล้วก็ยังคำนวณคุณลักษณะอนุพันธ์อย่างจำนวนเส้นทางหนีเพื่อนำมาใช้เรียนรู้
    • จุดตาย ของ decision tree สุดท้ายก็คือ feature engineering
      ถ้าไม่ทำความสะอาดข้อมูลและออกแบบคุณลักษณะให้ดี ผลลัพธ์จะออกมาแย่กว่าโมเดลกล่องดำอย่าง neural network มาก
      ที่น่าขันคือ neural network กลับค้นหาคุณลักษณะแฝงเหล่านี้ได้เอง แต่ก็อธิบายได้ยากว่าทำไมมันถึงทำงานแบบนั้น
    • มี tree แบบดัดแปลงหลายชนิดให้เลือกใช้ตามวัตถุประสงค์
      ตัวอย่างเช่น Oblique Decision Tree, Model Tree (M5), Logistic Model Tree (LMT), Hierarchical Mixture of Experts (HME)
    • สงสัยว่าคำว่า “บริเวณ equi-label มีโครงสร้างแบบถูกแบ่งย่อย” หมายถึงอะไรแน่
    • ไอเดียนี้ก็คล้ายกับแกนหลักของ งานวิจัย IRM ที่ Arjovsky, Bottou และคนอื่น ๆ เขียนไว้
  • ตอนทำงานที่ CERN ราวปี 2010 Boosted Decision Tree เป็นตัวจำแนกที่ได้รับความนิยมมากที่สุด
    เพราะมันสมดุลดีระหว่างความอธิบายได้กับความสามารถในการแทนรูปแบบ และในตอนนั้นก็มีแรงต้านทางวัฒนธรรมต่อการใช้ neural network ในการวิเคราะห์ฟิสิกส์
    ตอนนี้ยุคสมัยเปลี่ยนไปมากแล้ว

    • ผมกังวลกับความเปลี่ยนแปลงนี้เล็กน้อย
      ในฟิสิกส์ สิ่งสำคัญไม่ใช่แค่การ fit curve ให้ดี แต่คือการเข้าใจ กลไกเชิงเหตุและผล
      เหมือนกับที่ระบบ epicycle ของปโตเลมีทำนายการเคลื่อนที่ของวัตถุท้องฟ้าได้ดีกว่า แต่ไม่ได้อธิบายสาเหตุ
    • ผมก็มาจากสายฟิสิกส์ (ทฤษฎี) เหมือนกัน และพอได้ลองใช้ decision tree ในสาขาอื่นก็พบว่าเรื่อง “ความอธิบายได้” นั้นถูกประเมินค่าสูงเกินไปอยู่บ้าง
      พอลึกขึ้นอีกนิดมันก็กลายเป็น ป่ารก ที่ตีความแทบไม่ไหว
      neural network ก็คล้ายกัน คือคุณไล่ดูการคำนวณภายในได้ แต่สุดท้ายก็ยังไม่รู้ว่าทำไมมันถึงตัดสินใจแบบนั้น
    • สงสัยว่า Boosted Decision Tree กับ Boosted Random Forest คือสิ่งเดียวกันหรือเปล่า
  • ในเว็บเดียวกันมีคำอธิบาย Random Forest ด้วย → mlu-explain/random-forest

  • ข้อเท็จจริงที่น่าสนใจ: single-bit neural network แท้จริงแล้วก็คือ decision tree
    ในทางทฤษฎี neural network ส่วนใหญ่สามารถ “คอมไพล์” เป็นสายโซ่ if-else ได้ แต่ยังไม่ชัดเจนว่ามันใช้ได้ดีเมื่อไร

    • ผมลองอ่านงาน “neural network คือ decision tree” (arXiv:2210.05189) แล้ว แต่ในทางปฏิบัติ tree จะ ใหญ่มหาศาล
      มันเหมือนเป็นการขยายแนวคิดมากกว่า จึงแมปตรง ๆ ได้ยาก
      ถ้าช่วยอธิบายเพิ่มว่าเขาหมายถึงอะไรในเชิงรูปธรรมก็น่าจะดี
    • สงสัยว่ามี ซอฟต์แวร์หรือเปเปอร์ ที่ทำการแปลงแบบนี้จริง ๆ หรือไม่ น่าจะเป็นโปรเจกต์สุดสัปดาห์ที่สนุกดี
  • ข้อดีใหญ่ที่สุด ของ decision tree คือความเร็ว
    ในสภาพแวดล้อมที่ต้องการ latency ต่ำ ผมเคยพยายามแทนที่ตัวจำแนกแบบ tree-based ด้วย neural network ขนาดเล็ก แต่แม้ neural network จะให้ความแม่นยำสูงขึ้นเล็กน้อย latency ตอนอนุมาน (inference) ก็สูงกว่าเกิน 100 เท่า

    • นอกจากนี้ decision tree ต้นเดียวก็ยัง พอร์ตไปยัง edge device ได้ง่ายโดยตรง
      แต่ tree ที่ผ่าน boosting หรือ bagging จะซับซ้อนขึ้น และอัลกอริทึม ML แบบดั้งเดิมอื่น ๆ ก็พกพาไปใช้ได้ยากกว่า
  • ในตำรา ML เล่มหนึ่ง (น่าจะเป็น ESL) อธิบาย decision tree ไว้ว่า
    “มันอธิบายได้ เร็ว ใช้ได้ดีกับข้อมูลหลากหลายประเภท ไม่ค่อยไวต่อการสเกล และมีพารามิเตอร์ให้จูนไม่มาก... แต่ มันทำงานได้ไม่ดี
    อย่างไรก็ตาม สามารถชดเชยข้อเสียนี้ได้ด้วย bagging หรือ boosting แต่ก็ต้องแลกกับการสูญเสียข้อดีเดิมบางส่วนไป

  • ผมชอบ decision tree มาก มันเป็น อัลกอริทึม ML แบบดั้งเดิม ที่ผมชอบที่สุด
    ผมเคยทำ implementation แบบฟังก์ชันล้วนและขนานได้ด้วย GNU Guileลิงก์โค้ด
    แต่ Guile ไม่มีอะไรอย่าง NumPy หรือ DataFrame เลย ทำให้การแทนข้อมูลไม่มีประสิทธิภาพ

    • สงสัยว่า NumPy หรือ DataFrame ได้เปรียบกว่า Guile ในด้านไหน
      Guile เหมาะกับการจัดการ tree อยู่แล้ว จึงดูเป็นธรรมชาติสำหรับการทำ decision tree
      แต่ถ้า คอมไพล์เป็น machine code ก็น่าจะมีประสิทธิภาพมากขึ้น
      สำหรับอ้างอิง อาจลองดู Lush(https://lush.sourceforge.net/) หรือ aiscm(https://wedesoft.github.io/aiscm/) ด้วย
  • การ ตัดสินใจแบบกำกวม ของผู้เชี่ยวชาญก็มักโมเดลได้ด้วย decision tree หรือ decision chain แบบง่าย ๆ
    ตัวผู้เชี่ยวชาญเองอาจคิดว่ามันซับซ้อน แต่ในความเป็นจริง tree ง่าย ๆ มักอธิบายได้ดีกว่า
    เมื่อก่อน regression หรือ clustering แบบอิงระยะทางอาจดูหรูหรากว่า แต่ tree มีประสิทธิภาพกว่ามาก
    เรื่องนี้อธิบายไว้อย่างละเอียดในบทที่ 7 ของ Oxford Handbook of Expertise

    • เคยเห็นภาพ visualization แบบหนึ่งที่แสดงการตัดสินใจเป็น การแบ่งพื้นที่ บนระนาบ 2D
      ท้ายที่สุด decision tree ก็คือโครงสร้างที่แบ่งปริภูมิความเป็นไปได้เหมือน kD-Tree แล้วกำหนดพฤติกรรมให้แต่ละบริเวณ
      การตัดสินใจอันละเอียดอ่อนของผู้เชี่ยวชาญมาจากความประณีตของเส้นขอบเขต แต่ tree ก็ยังให้ค่าประมาณที่ดีได้มาก
  • เว็บนี้น่าสนใจและงานนำเสนอก็ดีมาก
    แต่สีของข้อความบางส่วน คอนทราสต์ต่ำ จนอ่านยาก

    • ผมก็คิดเหมือนกัน Firefox Reader View ช่วยได้มาก
      accessibility ไม่ได้มีไว้เพื่อคนพิการเท่านั้น แต่เป็นองค์ประกอบพื้นฐานของ ความอ่านง่าย
  • ในยุค deep learning ทุกวันนี้ decision tree ถูกประเมินค่าต่ำเกินไป
    แต่มันก็ยัง อธิบายได้ เร็ว และใช้งานได้จริงเพียงพอ
    ผมเคยสร้างระบบให้คะแนนสำหรับวิเคราะห์เว็บไซต์โดยใช้ tree-based model
    มันประเมินเงื่อนไขอย่าง “มี meta description หรือไม่?”, “โหลดภายใน 3 วินาทีหรือไม่?”, “รองรับมือถือหรือไม่?”
    ผู้ใช้จึงเข้าใจได้ทันทีว่าทำไมถึงได้คะแนนแบบนั้น
    เป็นไปไม่ได้ที่จะอธิบายว่าทำไม neural network ถึงให้ 73 คะแนน แต่ tree ทำได้ง่าย