วิธีจัดลำดับต้นไม้การจำแนกและการถดถอยใน r


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

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

วิธีหนึ่งดังกล่าวคือ แผนผังการจำแนกประเภทและการถดถอย (CART) ซึ่งใช้ชุดตัวแปรทำนายเพื่อสร้างแผนผังการตัดสินใจที่ทำนายค่าของตัวแปรตอบสนอง

หากตัวแปรตอบสนองเป็นแบบต่อเนื่อง เราสามารถสร้างแผนผังการถดถอยได้ และหากตัวแปรตอบสนองเป็นแบบหมวดหมู่ เราก็สามารถสร้างแผนผังการจำแนกประเภทได้

บทช่วยสอนนี้จะอธิบายวิธีสร้างแผนผังการถดถอยและการจัดหมวดหมู่ใน R

ตัวอย่างที่ 1: การสร้างแผนผังการถดถอยใน R

สำหรับตัวอย่างนี้ เราจะใช้ชุดข้อมูล Hitters จากแพ็คเกจ ISLR ซึ่งมีข้อมูลต่างๆ เกี่ยวกับนักเบสบอลมืออาชีพ 263 คน

เราจะใช้ชุดข้อมูลนี้เพื่อสร้างแผนผังการถดถอยที่ใช้ตัวแปรทำนาย ของการวิ่งกลับบ้าน และ จำนวนปีที่เล่น เพื่อทำนาย เงินเดือน ของผู้เล่นที่กำหนด

ใช้ขั้นตอนต่อไปนี้เพื่อสร้างแผนภูมิการถดถอยนี้

ขั้นตอนที่ 1: โหลดแพ็คเกจที่จำเป็น

ขั้นแรก เราจะโหลดแพ็คเกจที่จำเป็นสำหรับตัวอย่างนี้:

 library (ISLR) #contains Hitters dataset
library (rpart) #for fitting decision trees
library (rpart.plot) #for plotting decision trees

ขั้นตอนที่ 2: สร้างแผนผังการถดถอยเริ่มต้น

ขั้นแรก เราจะสร้างแผนผังการถดถอยเริ่มต้นขนาดใหญ่ เรารับประกันได้ว่าต้นไม้จะมีขนาดใหญ่โดยใช้ค่าเล็กๆ สำหรับ cp ซึ่งย่อมาจาก “complexity parameter”

ซึ่งหมายความว่า เราจะดำเนินการแยกเพิ่มเติมบนแผนผังการถดถอย ตราบใดที่ค่า R-squared โดยรวมของแบบจำลองเพิ่มขึ้นอย่างน้อยตามค่าที่ระบุโดย cp

จากนั้นเราจะใช้ฟังก์ชัน printcp() เพื่อพิมพ์ผลลัพธ์ของโมเดล:

 #build the initial tree
tree <- rpart(Salary ~ Years + HmRun, data=Hitters, control=rpart. control (cp= .0001 ))

#view results
printcp(tree)

Variables actually used in tree construction:
[1] HmRun Years

Root node error: 53319113/263 = 202734

n=263 (59 observations deleted due to missingness)

           CP nsplit rel error xerror xstd
1 0.24674996 0 1.00000 1.00756 0.13890
2 0.10806932 1 0.75325 0.76438 0.12828
3 0.01865610 2 0.64518 0.70295 0.12769
4 0.01761100 3 0.62652 0.70339 0.12337
5 0.01747617 4 0.60891 0.70339 0.12337
6 0.01038188 5 0.59144 0.66629 0.11817
7 0.01038065 6 0.58106 0.65697 0.11687
8 0.00731045 8 0.56029 0.67177 0.11913
9 0.00714883 9 0.55298 0.67881 0.11960
10 0.00708618 10 0.54583 0.68034 0.11988
11 0.00516285 12 0.53166 0.68427 0.11997
12 0.00445345 13 0.52650 0.68994 0.11996
13 0.00406069 14 0.52205 0.68988 0.11940
14 0.00264728 15 0.51799 0.68874 0.11916
15 0.00196586 16 0.51534 0.68638 0.12043
16 0.00016686 17 0.51337 0.67577 0.11635
17 0.00010000 18 0.51321 0.67576 0.11615
n=263 (59 observations deleted due to missingness)

ขั้นตอนที่ 3: ตัดต้นไม้

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

โปรดทราบว่าค่าที่เหมาะสมที่สุดสำหรับ cp คือค่าที่นำไปสู่ ข้อผิดพลาด x ต่ำสุดในเอาต์พุตก่อนหน้า ซึ่งแสดงถึงข้อผิดพลาดในการสังเกตจากข้อมูลการตรวจสอบข้าม

 #identify best cp value to use
best <- tree$cptable[which. min (tree$cptable[," xerror "])," CP "]

#produce a pruned tree based on the best cp value
pruned_tree <- prune (tree, cp=best)

#plot the pruned tree
prp(pruned_tree,
    faclen= 0 , #use full names for factor labels
    extra= 1 , #display number of obs. for each terminal node
    roundint= F , #don't round to integers in output
    digits= 5 ) #display 5 decimal places in output

แผนผังการถดถอยในอาร์

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

ตัวอย่างเช่น เราจะเห็นได้ว่าในชุดข้อมูลดั้งเดิม มีผู้เล่น 90 คนที่มีประสบการณ์น้อยกว่า 4.5 ปี และเงินเดือนเฉลี่ยของพวกเขาอยู่ที่ 225.83K ดอลลาร์

การตีความแผนผังการถดถอยใน R

ขั้นตอนที่ 4: ใช้ต้นไม้เพื่อทำนาย

เราสามารถใช้ต้นไม้ที่ถูกตัดขั้นสุดท้ายเพื่อทำนายเงินเดือนของผู้เล่นที่กำหนดโดยพิจารณาจากประสบการณ์หลายปีและการวิ่งในบ้านโดยเฉลี่ย

ตัวอย่างเช่น ผู้เล่นที่มีประสบการณ์ 7 ปีและโฮมรันโดยเฉลี่ย 4 ครั้งจะมีเงินเดือนที่คาดหวังอยู่ที่ 502.81,000 ดอลลาร์

ตัวอย่างแผนผังการถดถอยใน R

เราสามารถใช้ฟังก์ชัน คาดการณ์() ใน R เพื่อยืนยันสิ่งนี้:

 #define new player
new <- data.frame(Years=7, HmRun=4)

#use pruned tree to predict salary of this player
predict(pruned_tree, newdata=new)

502.8079

ตัวอย่างที่ 2: การสร้างแผนผังการจัดหมวดหมู่ใน R

สำหรับตัวอย่างนี้ เราจะใช้ชุดข้อมูล ptitanic จากแพ็คเกจ rpart.plot ซึ่งมีข้อมูลต่างๆ เกี่ยวกับผู้โดยสารบนเรือ Titanic

เราจะใช้ชุดข้อมูลนี้เพื่อสร้างแผนผังการจำแนกประเภทที่ใช้ตัวแปรทำนาย class เพศ และ อายุ เพื่อคาดการณ์ว่าผู้โดยสารรายนั้นจะรอดชีวิตหรือไม่

ใช้ขั้นตอนต่อไปนี้เพื่อสร้างแผนผังการจัดประเภทนี้

ขั้นตอนที่ 1: โหลดแพ็คเกจที่จำเป็น

ขั้นแรก เราจะโหลดแพ็คเกจที่จำเป็นสำหรับตัวอย่างนี้:

 library (rpart) #for fitting decision trees
library (rpart.plot) #for plotting decision trees

ขั้นตอนที่ 2: สร้างแผนผังการจำแนกประเภทเริ่มต้น

ขั้นแรก เราจะสร้างแผนผังการจำแนกประเภทเริ่มต้นขนาดใหญ่ เรารับประกันได้ว่าต้นไม้จะมีขนาดใหญ่โดยใช้ค่าเล็กๆ สำหรับ cp ซึ่งย่อมาจาก “complexity parameter”

ซึ่งหมายความว่า เราจะดำเนินการแยกเพิ่มเติมในแผนผังการจำแนกประเภท ตราบใดที่โมเดลโดยรวมพอดีเพิ่มขึ้นอย่างน้อยตามค่าที่ระบุโดย cp

จากนั้นเราจะใช้ฟังก์ชัน printcp() เพื่อพิมพ์ผลลัพธ์ของโมเดล:

 #build the initial tree
tree <- rpart(survived~pclass+sex+age, data=ptitanic, control=rpart. control (cp= .0001 ))

#view results
printcp(tree)

Variables actually used in tree construction:
[1] age pclass sex   

Root node error: 500/1309 = 0.38197

n=1309 

      CP nsplit rel error xerror xstd
1 0.4240 0 1.000 1.000 0.035158
2 0.0140 1 0.576 0.576 0.029976
3 0.0095 3 0.548 0.578 0.030013
4 0.0070 7 0.510 0.552 0.029517
5 0.0050 9 0.496 0.528 0.029035
6 0.0025 11 0.486 0.532 0.029117
7 0.0020 19 0.464 0.536 0.029198
8 0.0001 22 0.458 0.528 0.029035

ขั้นตอนที่ 3: ตัดต้นไม้

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

โปรดทราบว่าค่าที่เหมาะสมที่สุดสำหรับ cp คือค่าที่นำไปสู่ ข้อผิดพลาด x ต่ำสุดในเอาต์พุตก่อนหน้า ซึ่งแสดงถึงข้อผิดพลาดในการสังเกตจากข้อมูลการตรวจสอบข้าม

 #identify best cp value to use
best <- tree$cptable[which. min (tree$cptable[," xerror "])," CP "]

#produce a pruned tree based on the best cp value
pruned_tree <- prune (tree, cp=best)

#plot the pruned tree
prp(pruned_tree,
    faclen= 0 , #use full names for factor labels
    extra= 1 , #display number of obs. for each terminal node
    roundint= F , #don't round to integers in output
    digits= 5 ) #display 5 decimal places in output

การจำแนกต้นไม้ในอาร์

เราจะเห็นได้ว่าต้นไม้ที่ถูกตัดสุดท้ายจะมีโหนดปลาย 10 โหนด แต่ละโหนดของอาคารผู้โดยสารจะระบุจำนวนผู้โดยสารที่เสียชีวิตและจำนวนผู้รอดชีวิต

ตัวอย่างเช่น ในโหนดด้านซ้ายสุด เราจะเห็นว่าผู้โดยสารเสียชีวิต 664 ราย และรอดชีวิต 136 ราย

การตีความแผนผังการจำแนกประเภทใน R

ขั้นตอนที่ 4: ใช้ต้นไม้เพื่อทำนาย

เราสามารถใช้ต้นไม้ที่ถูกตัดขั้นสุดท้ายเพื่อทำนายความน่าจะเป็นที่ผู้โดยสารจะรอดชีวิตโดยพิจารณาจากประเภท อายุ และเพศ

ตัวอย่างเช่น ผู้โดยสารชายอายุ 8 ปีและชั้น 1 มีความน่าจะเป็นในการรอดชีวิต 11/29 = 37.9%

การจำแนกต้นไม้ในอาร์

คุณสามารถค้นหาโค้ด R แบบเต็มที่ใช้ในตัวอย่างเหล่านี้ ได้ที่นี่

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *