Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Cách dùng cây quyết định xây dựng bộ phân loại (classifier) trong Python

Cây quyết định là khối xây dựng cơ bản của thuật toán rừng ngẫu nhiên. Được coi là một trong những thuật toán phổ biến nhất trong học máy và dùng cho mục đích phân loại. Chúng cực kỳ phổ biến vì dễ hiểu.

Quyết định từ cây quyết định có thể dùng để giải thích tại sao một dự đoán cụ thể được thực hiện. Nghĩa là quy trình đầu vào và đầu ra rõ ràng với người dùng. Chúng còn là nền tảng cho các phương pháp ensemble như bagging, random forests, và gradient boosting. Còn gọi là CART (Classification And Regression Trees). Có thể hình dung như cây nhị phân.

Mỗi nút trong cây đại diện cho một biến đầu vào đơn lẻ, và nút lá (terminal nodes) chứa biến đầu ra. Các nút lá dùng để dự đoán. Khi tạo cây quyết định, ý tưởng cơ bản là không gian đã cho bị chia thành nhiều phần. Tất cả giá trị được đưa ra và các phép chia khác nhau được thử để đạt chi phí thấp và dự đoán tốt nhất. Các giá trị chọn theo cách tham lam.

Việc chia nút tiếp diễn cho đến độ sâu tối đa. Ý tưởng dùng cây quyết định là chia tập dữ liệu đầu vào thành các tập nhỏ hơn dựa trên giá trị đặc trưng cụ thể cho đến khi mọi biến mục tiêu rơi vào một danh mục duy nhất. Phân chia này để đạt lợi ích thông tin (information gain) tối đa mỗi bước.

Mọi cây quyết định bắt đầu bằng gốc (root), nơi phép chia đầu tiên diễn ra. Cần cách hiệu quả để đảm bảo nút được định nghĩa.

Đây là nơi giá trị Gini xuất hiện. Gini là phép đo phổ biến nhất đo lường sự không đồng đều. Sự không đồng đều đề cập đến lớp mục tiêu (đầu ra) mà mọi tập con trong nút có thể thuộc về.

Do đó, giá trị Gini được tính sau mỗi phép chia. Dựa trên giá trị Gini/giá trị không đồng đều, lợi ích thông tin có thể được định nghĩa.

DecisionTreeClassifier dùng để phân loại đa lớp (multiclass classification).

Cú pháp:

class sklearn.tree.DecisionTreeClassifier(*, criterion='gini', ...)

Ví dụ:

Ví dụ

from sklearn import tree
from sklearn.model_selection import train_test_split

my_data = [
    [16,19], [17,32], [13,3], [14,5], [141,28], [13,34], [186,2],
    [126,25], [176,28], [131,32], [166,6], [128,32], [79,110],
    [12,38], [19,91], [71,136], [116,25], [17,200], [15,25],
    [14,32], [13,35]
]
target_vals = [
    'Man','Woman','Man','Woman','Woman','Man','Woman','Woman',
    'Woman','Woman','Woman','Man','Man','Man','Woman','Woman',
    'Woman','Woman','Man','Woman','Woman'
]
data_feature_names = ['Feature_1', 'Feature_2']

X_train, X_test, y_train, y_test = train_test_split(
    my_data, target_vals, test_size=0.2, random_state=1
)

clf = tree.DecisionTreeClassifier()
print("Bộ phân loại cây quyết định đang được gọi")
DTclf = clf.fit(my_data, target_vals)
prediction = DTclf.predict([[135, 29]])
print("Giá trị dự đoán là:")
print(prediction)

Đầu ra

Bộ phân loại cây quyết định đang được gọi
Giá trị dự đoán là ['Woman']

Giải thích

  • Nhập các gói thư viện cần thiết vào môi trường.
  • Code dùng để phân loại giá trị mục tiêu dựa trên giá trị đặc trưng.
  • Định nghĩa vector đặc trưng và giá trị mục tiêu.
  • Chia dữ liệu thành tập huấn luyện và kiểm tra bằng train_test_split.
  • Gọi DecisionTreeClassifier và huấn luyện dữ liệu cho mô hình.
  • Dùng hàm predict dự đoán giá trị cho đặc trưng.
  • Đầu ra hiển thị trên console.

Lưu ý: Tiêu chí mặc định criterion='gini' (Gini impurity). Có thể dùng criterion='entropy' (Information gain). Cần điều chỉnh max_depth, min_samples_split để tránh overfitting.