Scikit Learn - Cây quyết định
Trong chương này, chúng ta sẽ tìm hiểu về phương pháp học tập trong Sklearn được gọi là cây quyết định.
Quyết định tress (DTs) là phương pháp học tập có giám sát phi tham số mạnh mẽ nhất. Chúng có thể được sử dụng cho các nhiệm vụ phân loại và hồi quy. Mục tiêu chính của DTs là tạo ra một mô hình dự đoán giá trị biến mục tiêu bằng cách học các quy tắc quyết định đơn giản được suy ra từ các tính năng dữ liệu. Cây quyết định có hai thực thể chính; một là nút gốc, nơi dữ liệu phân tách, và nút khác là nút quyết định hoặc nút rời, nơi chúng ta nhận được kết quả cuối cùng.
Các thuật toán cây quyết định
Các thuật toán Cây quyết định khác nhau được giải thích bên dưới:
ID3
Nó được phát triển bởi Ross Quinlan vào năm 1986. Nó còn được gọi là Iterative Dichotomiser 3. Mục tiêu chính của thuật toán này là tìm các đặc điểm phân loại đó, cho mọi nút, sẽ mang lại mức tăng thông tin lớn nhất cho các mục tiêu phân loại.
Nó cho phép cây được phát triển đến kích thước tối đa và sau đó để cải thiện khả năng của cây trên các dữ liệu không nhìn thấy, hãy áp dụng một bước cắt tỉa. Đầu ra của thuật toán này sẽ là một cây nhiều đường.
C4.5
Nó là sự kế thừa của ID3 và tự động định nghĩa một thuộc tính rời rạc phân chia giá trị thuộc tính liên tục thành một tập hợp các khoảng rời rạc. Đó là lý do nó loại bỏ hạn chế của các tính năng phân loại. Nó chuyển đổi cây được đào tạo ID3 thành tập hợp các quy tắc 'IF-THEN'.
Để xác định trình tự áp dụng các quy tắc này, trước tiên, độ chính xác của từng quy tắc sẽ được đánh giá.
C5.0
Nó hoạt động tương tự như C4.5 nhưng sử dụng ít bộ nhớ hơn và xây dựng các bộ quy tắc nhỏ hơn. Nó chính xác hơn C4.5.
XE ĐẨY
Nó được gọi là thuật toán phân loại và cây hồi quy. Về cơ bản, nó tạo ra các phân tách nhị phân bằng cách sử dụng các tính năng và ngưỡng mang lại mức tăng thông tin lớn nhất tại mỗi nút (gọi là chỉ số Gini).
Tính đồng nhất phụ thuộc vào chỉ số Gini, giá trị của chỉ số Gini càng cao thì độ đồng nhất càng cao. Nó giống như thuật toán C4.5, nhưng, sự khác biệt là nó không tính toán các bộ quy tắc và cũng không hỗ trợ các biến mục tiêu số (hồi quy).
Phân loại với cây quyết định
Trong trường hợp này, các biến quyết định có tính phân loại.
Sklearn Module - Thư viện Scikit-learning cung cấp tên mô-đun DecisionTreeClassifier để thực hiện phân loại đa lớp trên tập dữ liệu.
Thông số
Bảng sau bao gồm các tham số được sử dụng bởi sklearn.tree.DecisionTreeClassifier mô-đun -
Sr.No | Mô tả về Thông Số |
---|---|
1 | criterion - string, tùy chọn default = “gini” Nó đại diện cho chức năng đo lường chất lượng của một lần tách. Các tiêu chí được hỗ trợ là “gini” và “entropy”. Giá trị mặc định là gini dành cho tạp chất Gini trong khi entropy dành cho thu thập thông tin. |
2 | splitter - chuỗi, mặc định tùy chọn = “tốt nhất” Nó cho mô hình biết chiến lược nào từ “tốt nhất” hoặc “ngẫu nhiên” để chọn phần tách tại mỗi nút. |
3 | max_depth - int hoặc None, mặc định tùy chọn = Không có Thông số này quyết định độ sâu tối đa của cây. Giá trị mặc định là Không có nghĩa là các nút sẽ mở rộng cho đến khi tất cả các lá đều thuần túy hoặc cho đến khi tất cả các lá chứa ít hơn mẫu min_smaples_split. |
4 | min_samples_split - int, float, tùy chọn mặc định = 2 Tham số này cung cấp số lượng mẫu tối thiểu cần thiết để tách một nút bên trong. |
5 | min_samples_leaf - int, float, tùy chọn mặc định = 1 Tham số này cung cấp số lượng mẫu tối thiểu được yêu cầu tại một nút lá. |
6 | min_weight_fraction_leaf - float, tùy chọn mặc định = 0. Với tham số này, mô hình sẽ nhận được phần có trọng số tối thiểu của tổng các trọng số cần thiết ở một nút lá. |
7 | max_features - int, float, string hoặc None, mặc định tùy chọn = None Nó cung cấp cho mô hình số lượng các tính năng được xem xét khi tìm kiếm sự phân chia tốt nhất. |
số 8 | random_state - int, RandomState instance hoặc None, tùy chọn, default = none Tham số này đại diện cho hạt giống của số ngẫu nhiên giả được tạo ra được sử dụng trong khi xáo trộn dữ liệu. Tiếp theo là các tùy chọn -
|
9 | max_leaf_nodes - int hoặc None, mặc định tùy chọn = Không có Tham số này sẽ cho phép phát triển cây với max_leaf_nodes theo cách tốt nhất. Mặc định là không có nghĩa là sẽ có số lượng nút lá không giới hạn. |
10 | min_impurity_decrease - float, tùy chọn mặc định = 0. Giá trị này hoạt động như một tiêu chí cho một nút để tách bởi vì mô hình sẽ tách một nút nếu sự phân tách này làm giảm tạp chất lớn hơn hoặc bằng min_impurity_decrease value. |
11 | min_impurity_split - float, default = 1e-7 Nó đại diện cho ngưỡng cho sự ngừng phát triển sớm của cây. |
12 | class_weight - dict, danh sách các phái, "cân bằng" hoặc Không, mặc định = Không có Nó đại diện cho trọng số liên quan đến các lớp. Biểu mẫu là {class_label: weight}. Nếu chúng ta sử dụng tùy chọn mặc định, điều đó có nghĩa là tất cả các lớp phải có trọng số là một. Mặt khác, nếu bạn chọnclass_weight: balanced, nó sẽ sử dụng các giá trị của y để tự động điều chỉnh trọng số. |
13 | presort - bool, mặc định tùy chọn = Sai Nó cho mô hình biết liệu có nên sắp xếp trước dữ liệu để tăng tốc độ tìm kiếm các phần tách tốt nhất cho phù hợp hay không. Mặc định là false nhưng được đặt thành true, nó có thể làm chậm quá trình đào tạo. |
Thuộc tính
Bảng sau bao gồm các thuộc tính được sử dụng bởi sklearn.tree.DecisionTreeClassifier mô-đun -
Sr.No | Mô tả về Thông Số |
---|---|
1 | feature_importances_ - mảng hình dạng = [n_features] Thuộc tính này sẽ trả về tầm quan trọng của tính năng. |
2 | classes_: - mảng shape = [n_classes] hoặc danh sách các mảng như vậy Nó đại diện cho các nhãn lớp tức là bài toán đầu ra đơn lẻ, hoặc danh sách các mảng nhãn lớp tức là bài toán đa đầu ra. |
3 | max_features_ - int Nó đại diện cho giá trị suy ra của tham số max_features. |
4 | n_classes_ - int hoặc danh sách Nó đại diện cho số lớp tức là bài toán đầu ra đơn lẻ, hoặc danh sách số lớp cho mọi đầu ra tức là bài toán nhiều đầu ra. |
5 | n_features_ - int Nó cung cấp số lượng features khi phương thức fit () được thực hiện. |
6 | n_outputs_ - int Nó cung cấp số lượng outputs khi phương thức fit () được thực hiện. |
Phương pháp
Bảng sau bao gồm các phương pháp được sử dụng bởi sklearn.tree.DecisionTreeClassifier mô-đun -
Sr.No | Mô tả về Thông Số |
---|---|
1 | apply(self, X [, check_input]) Phương thức này sẽ trả về chỉ mục của lá. |
2 | decision_path(self, X [, check_input]) Như tên cho thấy, phương thức này sẽ trả về đường dẫn quyết định trong cây |
3 | fit(bản thân, X, y [, sample_weight,…]) Phương thức fit () sẽ xây dựng một bộ phân loại cây quyết định từ tập huấn luyện đã cho (X, y). |
4 | get_depth(bản thân) Như tên cho thấy, phương pháp này sẽ trả về độ sâu của cây quyết định |
5 | get_n_leaves(bản thân) Như tên cho thấy, phương thức này sẽ trả về số lá của cây quyết định. |
6 | get_params(tự [, sâu]) Chúng ta có thể sử dụng phương pháp này để lấy các tham số cho công cụ ước lượng. |
7 | predict(self, X [, check_input]) Nó sẽ dự đoán giá trị lớp cho X. |
số 8 | predict_log_proba(bản thân, X) Nó sẽ dự đoán xác suất nhật ký lớp của các mẫu đầu vào do chúng tôi cung cấp, X. |
9 | predict_proba(self, X [, check_input]) Nó sẽ dự đoán xác suất lớp của các mẫu đầu vào do chúng tôi cung cấp, X. |
10 | score(bản thân, X, y [, sample_weight]) Như tên của nó, phương thức score () sẽ trả về độ chính xác trung bình trên các nhãn và dữ liệu thử nghiệm đã cho .. |
11 | set_params(bản thân, \ * \ * params) Chúng ta có thể thiết lập các tham số của ước lượng bằng phương pháp này. |
Ví dụ triển khai
Tập lệnh Python bên dưới sẽ sử dụng sklearn.tree.DecisionTreeClassifier mô-đun để xây dựng bộ phân loại để dự đoán nam hay nữ từ tập dữ liệu của chúng tôi có 25 mẫu và hai tính năng là 'chiều cao' và 'độ dài của tóc' -
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)
Đầu ra
['Woman']
Chúng tôi cũng có thể dự đoán xác suất của từng lớp bằng cách sử dụng phương thức python dự đoán_proba () như sau:
Thí dụ
prediction = DTclf.predict_proba([[135,29]])
print(prediction)
Đầu ra
[[0. 1.]]
Hồi quy với cây quyết định
Trong trường hợp này, các biến quyết định là liên tục.
Sklearn Module - Thư viện Scikit-learning cung cấp tên mô-đun DecisionTreeRegressor để áp dụng cây quyết định cho các bài toán hồi quy.
Thông số
Các thông số được sử dụng bởi DecisionTreeRegressor gần giống như những gì đã được sử dụng trong DecisionTreeClassifiermô-đun. Sự khác biệt nằm ở thông số 'tiêu chí'. Đối vớiDecisionTreeRegressor mô-đun ‘criterion: string, tùy chọn default = “mse” 'tham số có các giá trị sau:
mse- Nó là viết tắt của sai số bình phương trung bình. Nó tương đương với việc giảm phương sai như là tiêu chí chọn lọc tính năng. Nó giảm thiểu tổn thất L2 bằng cách sử dụng giá trị trung bình của mỗi nút đầu cuối.
freidman_mse - Nó cũng sử dụng sai số bình phương trung bình nhưng với điểm cải thiện của Friedman.
mae- Nó là viết tắt của sai số tuyệt đối trung bình. Nó giảm thiểu tổn thất L1 bằng cách sử dụng trung vị của mỗi nút đầu cuối.
Một sự khác biệt nữa là nó không có ‘class_weight’ tham số.
Thuộc tính
Các thuộc tính của DecisionTreeRegressor cũng giống như của DecisionTreeClassifiermô-đun. Sự khác biệt là nó không có‘classes_’ và ‘n_classes_' thuộc tính.
Phương pháp
Phương pháp của DecisionTreeRegressor cũng giống như của DecisionTreeClassifiermô-đun. Sự khác biệt là nó không có‘predict_log_proba()’ và ‘predict_proba()’' thuộc tính.
Ví dụ triển khai
Phương thức fit () trong mô hình hồi quy cây quyết định sẽ nhận các giá trị dấu phẩy động của y. chúng ta hãy xem một ví dụ triển khai đơn giản bằng cách sử dụngSklearn.tree.DecisionTreeRegressor -
from sklearn import tree
X = [[1, 1], [5, 5]]
y = [0.1, 1.5]
DTreg = tree.DecisionTreeRegressor()
DTreg = clf.fit(X, y)
Sau khi được trang bị, chúng ta có thể sử dụng mô hình hồi quy này để đưa ra dự đoán như sau:
DTreg.predict([[4, 5]])
Đầu ra
array([1.5])