การวิเคราะห์ข้อมูลขนาดใหญ่ - ต้นไม้แห่งการตัดสินใจ

แผนผังการตัดสินใจคืออัลกอริทึมที่ใช้สำหรับปัญหาการเรียนรู้ที่มีการดูแลเช่นการจำแนกประเภทหรือการถดถอย แผนผังการตัดสินใจหรือแผนผังการจำแนกคือต้นไม้ที่แต่ละโหนดภายใน (ที่ไม่ใช่ลีฟ) มีป้ายกำกับด้วยคุณลักษณะการป้อนข้อมูล ส่วนโค้งที่มาจากโหนดที่มีป้ายกำกับคุณลักษณะจะมีป้ายกำกับด้วยค่าที่เป็นไปได้แต่ละค่าของคุณลักษณะ แต่ละใบของต้นไม้มีป้ายกำกับชั้นเรียนหรือการแจกแจงความน่าจะเป็นเหนือชั้นเรียน

ต้นไม้สามารถ "เรียนรู้" ได้โดยการแยกชุดแหล่งที่มาออกเป็นส่วนย่อยตามการทดสอบค่าแอตทริบิวต์ กระบวนการนี้จะทำซ้ำในแต่ละส่วนย่อยที่ได้รับในลักษณะเรียกซ้ำที่เรียกว่าrecursive partitioning. การเรียกซ้ำจะเสร็จสมบูรณ์เมื่อเซ็ตย่อยที่โหนดมีค่าเดียวกันทั้งหมดของตัวแปรเป้าหมายหรือเมื่อการแยกจะไม่เพิ่มค่าให้กับการคาดคะเนอีกต่อไป กระบวนการเหนี่ยวนำจากบนลงล่างของทรีการตัดสินใจเป็นตัวอย่างของอัลกอริทึมโลภและเป็นกลยุทธ์ที่พบบ่อยที่สุดสำหรับการเรียนรู้ต้นไม้การตัดสินใจ

โครงสร้างการตัดสินใจที่ใช้ในการขุดข้อมูลมีสองประเภทหลัก -

  • Classification tree - เมื่อการตอบกลับเป็นตัวแปรเล็กน้อยเช่นอีเมลเป็นสแปมหรือไม่

  • Regression tree - เมื่อผลการทำนายถือได้ว่าเป็นจำนวนจริง (เช่นเงินเดือนของคนงาน)

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

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

  • Boosting decision trees- การส่งเสริมการไล่ระดับสีรวมผู้เรียนที่อ่อนแอ ในกรณีนี้ต้นไม้ตัดสินใจเป็นผู้เรียนที่เข้มแข็งเพียงคนเดียวในรูปแบบซ้ำ ๆ มันเหมาะกับต้นไม้ที่อ่อนแอต่อข้อมูลและคอยปรับผู้เรียนที่อ่อนแอซ้ำ ๆ เพื่อแก้ไขข้อผิดพลาดของแบบจำลองก่อนหน้านี้

# Install the party package
# install.packages('party') 
library(party) 
library(ggplot2)  

head(diamonds) 
# We will predict the cut of diamonds using the features available in the 
diamonds dataset. 
ct = ctree(cut ~ ., data = diamonds) 

# plot(ct, main="Conditional Inference Tree") 
# Example output 
# Response:  cut  
# Inputs:  carat, color, clarity, depth, table, price, x, y, z  

# Number of observations:  53940  
#  
# 1) table <= 57; criterion = 1, statistic = 10131.878 
#   2) depth <= 63; criterion = 1, statistic = 8377.279 
#     3) table <= 56.4; criterion = 1, statistic = 226.423 
#       4) z <= 2.64; criterion = 1, statistic = 70.393 
#         5) clarity <= VS1; criterion = 0.989, statistic = 10.48 
#           6) color <= E; criterion = 0.997, statistic = 12.829 
#             7)*  weights = 82  
#           6) color > E  

#Table of prediction errors 
table(predict(ct), diamonds$cut) 
#            Fair  Good Very Good Premium Ideal 
# Fair       1388   171        17       0    14 
# Good        102  2912       499      26    27 
# Very Good    54   998      3334     249   355 
# Premium      44   711      5054   11915  1167 
# Ideal        22   114      3178    1601 19988 
# Estimated class probabilities 
probs = predict(ct, newdata = diamonds, type = "prob") 
probs = do.call(rbind, probs) 
head(probs)