Scikit Learn - ต้นไม้แห่งการตัดสินใจ

ในบทนี้เราจะเรียนรู้เกี่ยวกับวิธีการเรียนรู้ใน Sklearn ซึ่งเรียกว่าโครงสร้างการตัดสินใจ

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

อัลกอริทึมแผนผังการตัดสินใจ

อัลกอริทึมต้นไม้การตัดสินใจที่แตกต่างกันอธิบายไว้ด้านล่าง -

ID3

ได้รับการพัฒนาโดย Ross Quinlan ในปี 1986 เรียกอีกอย่างว่า Iterative Dichotomiser 3 เป้าหมายหลักของอัลกอริทึมนี้คือการค้นหาคุณลักษณะเชิงหมวดหมู่สำหรับทุกโหนดซึ่งจะให้ข้อมูลที่ได้รับมากที่สุดสำหรับเป้าหมายเชิงหมวดหมู่

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

C4.5

เป็นตัวต่อจาก ID3 และกำหนดแอ็ตทริบิวต์แยกแบบไดนามิกที่แบ่งพาร์ติชันค่าแอ็ตทริบิวต์ต่อเนื่องเป็นชุดช่วงเวลาที่ไม่ต่อเนื่อง นั่นเป็นเหตุผลที่ลบข้อ จำกัด ของคุณสมบัติเด็ดขาด มันแปลงต้นไม้ฝึก ID3 ให้เป็นชุดของกฎ 'IF-THEN'

ในการกำหนดลำดับที่ควรใช้กฎเหล่านี้ความถูกต้องของแต่ละกฎจะได้รับการประเมินก่อน

C5.0

ทำงานคล้ายกับ C4.5 แต่ใช้หน่วยความจำน้อยกว่าและสร้างชุดกฎที่เล็กลง มีความแม่นยำมากกว่า C4.5

รถเข็น

เรียกว่าอัลกอริทึมการจำแนกและการถดถอยต้นไม้ โดยพื้นฐานแล้วจะสร้างการแยกไบนารีโดยใช้คุณสมบัติและเกณฑ์ที่ให้ข้อมูลที่ได้รับมากที่สุดในแต่ละโหนด (เรียกว่าดัชนี Gini)

ความเป็นเนื้อเดียวกันขึ้นอยู่กับดัชนี Gini ค่าของดัชนี Gini สูงกว่าค่าที่สูงกว่าจะเป็นความสม่ำเสมอ มันเหมือนกับอัลกอริทึม C4.5 แต่ความแตกต่างคือไม่คำนวณชุดกฎและไม่รองรับตัวแปรเป้าหมายที่เป็นตัวเลข (การถดถอย) ด้วย

การจำแนกประเภทด้วยต้นไม้การตัดสินใจ

ในกรณีนี้ตัวแปรการตัดสินใจเป็นแบบเด็ดขาด

Sklearn Module - ไลบรารี Scikit-learn ให้ชื่อโมดูล DecisionTreeClassifier สำหรับการจำแนกประเภทหลายคลาสในชุดข้อมูล

พารามิเตอร์

ตารางต่อไปนี้ประกอบด้วยพารามิเตอร์ที่ใช้โดย sklearn.tree.DecisionTreeClassifier โมดูล -

ซีเนียร์ No พารามิเตอร์และคำอธิบาย
1

criterion - สตริงค่าเริ่มต้นที่เป็นทางเลือก =“ gini”

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

2

splitter - สตริงค่าเริ่มต้นที่ไม่บังคับ = "ดีที่สุด"

โดยจะบอกโมเดลว่ากลยุทธ์ใด "ดีที่สุด" หรือ "สุ่ม" เพื่อเลือกการแบ่งที่แต่ละโหนด

3

max_depth - int หรือ None ค่าเริ่มต้นที่เป็นทางเลือก = ไม่มี

พารามิเตอร์นี้กำหนดความลึกสูงสุดของต้นไม้ ค่าดีฟอลต์คือ None ซึ่งหมายความว่าโหนดจะขยายจนกว่าทุกใบจะบริสุทธิ์หรือจนกว่าทุกใบจะมีตัวอย่างน้อยกว่า min_smaples_split

4

min_samples_split - int ลอยค่าเริ่มต้นที่เป็นทางเลือก = 2

พารามิเตอร์นี้ระบุจำนวนตัวอย่างขั้นต่ำที่จำเป็นในการแยกโหนดภายใน

5

min_samples_leaf - int ลอยค่าเริ่มต้นที่เป็นทางเลือก = 1

พารามิเตอร์นี้ระบุจำนวนตัวอย่างต่ำสุดที่จำเป็นต้องอยู่ที่โหนดลีฟ

6

min_weight_fraction_leaf - ลอยค่าเริ่มต้นที่เป็นทางเลือก = 0

ด้วยพารามิเตอร์นี้แบบจำลองจะได้รับเศษส่วนถ่วงน้ำหนักขั้นต่ำของผลรวมของน้ำหนักที่ต้องอยู่ที่โหนดลีฟ

7

max_features - int ลอยสตริงหรือไม่มีค่าเริ่มต้นที่เป็นทางเลือก = ไม่มี

ทำให้โมเดลมีจำนวนคุณสมบัติที่ต้องพิจารณาเมื่อต้องการแยกที่ดีที่สุด

8

random_state - int, RandomState instance หรือ None, optional, default = none

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

  • int- ในกรณีนี้random_stateคือเมล็ดพันธุ์ที่ใช้โดยเครื่องสร้างตัวเลขสุ่ม

  • RandomState instance - ในกรณีนี้ random_state คือตัวสร้างตัวเลขสุ่ม

  • None - ในกรณีนี้ตัวสร้างตัวเลขสุ่มคืออินสแตนซ์ RandonState ที่ใช้โดย np.random

9

max_leaf_nodes - int หรือ None ค่าเริ่มต้นที่เป็นทางเลือก = ไม่มี

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

10

min_impurity_decrease - ลอยค่าเริ่มต้นที่เป็นทางเลือก = 0

ค่านี้ใช้เป็นเกณฑ์สำหรับโหนดที่จะแยกเนื่องจากโมเดลจะแยกโหนดหากการแยกนี้ทำให้สิ่งเจือปนลดลงมากกว่าหรือเท่ากับ min_impurity_decrease value.

11

min_impurity_split - ลอยค่าเริ่มต้น = 1e-7

แสดงถึงเกณฑ์สำหรับการหยุดต้นในการเจริญเติบโตของต้นไม้

12

class_weight - เขียนตามรายการของคำสั่ง "สมดุล" หรือไม่มีค่าเริ่มต้น = ไม่มี

แสดงถึงน้ำหนักที่เกี่ยวข้องกับชั้นเรียน แบบฟอร์มคือ {class_label: weight} ถ้าเราใช้ตัวเลือกเริ่มต้นหมายความว่าทุกชั้นเรียนควรมีน้ำหนัก ในทางกลับกันถ้าคุณเลือกclass_weight: balancedมันจะใช้ค่าของ y เพื่อปรับน้ำหนักโดยอัตโนมัติ

13

presort - บูล, ค่าเริ่มต้นที่เป็นทางเลือก = เท็จ

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

คุณลักษณะ

ตารางต่อไปนี้ประกอบด้วยแอตทริบิวต์ที่ใช้โดย sklearn.tree.DecisionTreeClassifier โมดูล -

ซีเนียร์ No พารามิเตอร์และคำอธิบาย
1

feature_importances_ - อาร์เรย์ของรูปร่าง = [n_features]

แอตทริบิวต์นี้จะส่งกลับความสำคัญของคุณลักษณะ

2

classes_: - อาร์เรย์ของรูปร่าง = [n_classes] หรือรายการอาร์เรย์ดังกล่าว

มันแสดงถึงเลเบลคลาสเช่นปัญหาเอาต์พุตเดี่ยวหรือรายการอาร์เรย์ของคลาสเลเบล ได้แก่ ปัญหาแบบหลายเอาต์พุต

3

max_features_ - int

แสดงถึงค่าที่อนุมานของพารามิเตอร์ max_features

4

n_classes_ - int หรือรายการ

มันแสดงถึงจำนวนของคลาสเช่นปัญหาเอาต์พุตเดี่ยวหรือรายการจำนวนคลาสสำหรับทุกเอาต์พุตเช่นปัญหาหลายเอาต์พุต

5

n_features_ - int

จะให้จำนวน features เมื่อใช้วิธี fit ()

6

n_outputs_ - int

จะให้จำนวน outputs เมื่อใช้วิธี fit ()

วิธีการ

ตารางต่อไปนี้ประกอบด้วยวิธีการที่ใช้โดย sklearn.tree.DecisionTreeClassifier โมดูล -

ซีเนียร์ No พารามิเตอร์และคำอธิบาย
1

apply(ตัวเอง X [check_input])

วิธีนี้จะคืนค่าดัชนีของใบ

2

decision_path(ตัวเอง X [check_input])

ตามชื่อแนะนำวิธีนี้จะส่งคืนเส้นทางการตัดสินใจในแผนภูมิ

3

fit(ตัวเอง X, y [, น้ำหนักตัวอย่าง, …])

วิธี fit () จะสร้างลักษณนามทรีการตัดสินใจจากชุดฝึกที่กำหนด (X, y)

4

get_depth(ตัวเอง)

ตามชื่อแนะนำวิธีนี้จะคืนค่าความลึกของโครงสร้างการตัดสินใจ

5

get_n_leaves(ตัวเอง)

ตามชื่อแนะนำวิธีนี้จะส่งคืนจำนวนใบของต้นไม้ตัดสินใจ

6

get_params(ตัวเอง [ลึก])

เราสามารถใช้วิธีนี้เพื่อรับพารามิเตอร์สำหรับตัวประมาณค่า

7

predict(ตัวเอง X [check_input])

มันจะทำนายค่าคลาสสำหรับ X

8

predict_log_proba(ตัวเอง X)

มันจะทำนายความน่าจะเป็นในการบันทึกคลาสของตัวอย่างอินพุตที่เราจัดหาให้ X.

9

predict_proba(ตัวเอง X [check_input])

มันจะทำนายความน่าจะเป็นของคลาสของตัวอย่างอินพุตที่เราจัดเตรียมไว้ X.

10

score(ตัวเอง X, y [น้ำหนักตัวอย่าง])

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

11

set_params(ตัวเอง \ * \ * params)

เราสามารถตั้งค่าพารามิเตอร์ของตัวประมาณค่าได้ด้วยวิธีนี้

ตัวอย่างการใช้งาน

สคริปต์ Python ด้านล่างจะใช้ sklearn.tree.DecisionTreeClassifier โมดูลเพื่อสร้างลักษณนามสำหรับทำนายชายหรือหญิงจากชุดข้อมูลของเราซึ่งมี 25 ตัวอย่างและคุณสมบัติสองอย่างคือ 'ความสูง' และ 'ความยาวของผม' -

from sklearn import tree
from sklearn.model_selection import train_test_split
X=[[165,19],[175,32],[136,35],[174,65],[141,28],[176,15]
,[131,32],[166,6],[128,32],[179,10],[136,34],[186,2],[12
6,25],[176,28],[112,38],[169,9],[171,36],[116,25],[196,2
5], [196,38], [126,40], [197,20], [150,25], [140,32],[136,35]]
Y=['Man','Woman','Woman','Man','Woman','Man','Woman','Ma
n','Woman','Man','Woman','Man','Woman','Woman','Woman','
Man','Woman','Woman','Man', 'Woman', 'Woman', 'Man', 'Man', 'Woman', 'Woman']
data_feature_names = ['height','length of hair']
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.3, random_state = 1)
DTclf = tree.DecisionTreeClassifier()
DTclf = clf.fit(X,Y)
prediction = DTclf.predict([[135,29]])
print(prediction)

เอาต์พุต

['Woman']

นอกจากนี้เรายังสามารถทำนายความน่าจะเป็นของแต่ละคลาสได้โดยใช้ python Predict_proba () วิธีการดังต่อไปนี้ -

ตัวอย่าง

prediction = DTclf.predict_proba([[135,29]])
print(prediction)

เอาต์พุต

[[0. 1.]]

การถดถอยกับต้นไม้การตัดสินใจ

ในกรณีนี้ตัวแปรการตัดสินใจจะต่อเนื่อง

Sklearn Module - ไลบรารี Scikit-learn ให้ชื่อโมดูล DecisionTreeRegressor สำหรับการใช้ต้นไม้ตัดสินใจกับปัญหาการถดถอย

พารามิเตอร์

พารามิเตอร์ที่ใช้โดย DecisionTreeRegressor เกือบจะเหมือนกับที่ใช้ใน DecisionTreeClassifierโมดูล. ความแตกต่างอยู่ในพารามิเตอร์ "เกณฑ์" สำหรับDecisionTreeRegressor โมดูล ‘criterion: string, optional default = พารามิเตอร์“ mse” 'มีค่าดังต่อไปนี้ -

  • mse- หมายถึงข้อผิดพลาดกำลังสองเฉลี่ย เท่ากับการลดความแปรปรวนเป็นเกณฑ์การเลือกคุณลักษณะ ลดการสูญเสีย L2 โดยใช้ค่าเฉลี่ยของโหนดเทอร์มินัลแต่ละโหนด

  • freidman_mse - นอกจากนี้ยังใช้ค่าเฉลี่ยข้อผิดพลาดกำลังสอง แต่มีคะแนนการปรับปรุงของฟรีดแมน

  • mae- หมายถึงข้อผิดพลาดสัมบูรณ์เฉลี่ย ลดการสูญเสีย L1 โดยใช้ค่ามัธยฐานของแต่ละโหนดเทอร์มินัล

ความแตกต่างอีกประการหนึ่งก็คือมันไม่มี ‘class_weight’ พารามิเตอร์.

คุณลักษณะ

คุณสมบัติของ DecisionTreeRegressor ก็เหมือนกับที่เป็นของ DecisionTreeClassifierโมดูล. ความแตกต่างก็คือมันไม่มี‘classes_’ และ ‘n_classes_' คุณลักษณะ.

วิธีการ

วิธีการของ DecisionTreeRegressor ก็เหมือนกับที่เป็นของ DecisionTreeClassifierโมดูล. ความแตกต่างก็คือมันไม่มี‘predict_log_proba()’ และ ‘predict_proba()’' คุณลักษณะ.

ตัวอย่างการใช้งาน

วิธีการพอดี () ในแบบจำลองการถดถอยทรีการตัดสินใจจะใช้ค่าทศนิยมของ y มาดูตัวอย่างการใช้งานง่ายๆโดยใช้Sklearn.tree.DecisionTreeRegressor -

from sklearn import tree
X = [[1, 1], [5, 5]]
y = [0.1, 1.5]
DTreg = tree.DecisionTreeRegressor()
DTreg = clf.fit(X, y)

เมื่อติดตั้งแล้วเราสามารถใช้แบบจำลองการถดถอยนี้เพื่อทำการทำนายได้ดังนี้ -

DTreg.predict([[4, 5]])

เอาต์พุต

array([1.5])