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