Tạo cây quyết định

Trong bài này, bạn sẽ sử dụng YDF (Yggdrasil Thư viện Decision Forest (Khu rừng quyết định) sẽ huấn luyện và diễn giải cây quyết định.

Bài này được lấy cảm hứng từ 🧭 Bắt đầu sử dụng YDF của chúng tôi.

Đấu loại

Trước khi nghiên cứu tập dữ liệu, hãy làm như sau:

  1. Tạo một Colab mới sổ tay.
  2. Cài đặt thư viện YDF bằng cách đặt và thực thi dòng mã sau trong sổ tay Colab mới:
    !pip install ydf -U
    
  3. Nhập các thư viện sau:
    import ydf
    import numpy as np
    import pandas as pd
    

Tập dữ liệu về loài chim cánh cụt Palmer

Colab này sử dụng Tập dữ liệu Palmer Chim cánh cụt, trong đó chứa các số đo kích thước của ba các loài chim cánh cụt:

  • Dây đeo
  • Gentoo
  • Adelie

Đây là một vấn đề phân loại—mục tiêu là dự đoán loài chim cánh cụt dựa trên dữ liệu trong bộ dữ liệu về Chim cánh cụt của Palmer. Sau đây là những chú chim cánh cụt:

Ba chú chim cánh cụt khác nhau
loài.

Hình 16. Ba loài chim cánh cụt khác nhau. Hình ảnh của @allisonhorst

 

Mã sau đây gọi một gấu trúc để tải tập dữ liệu Palmer Manifests vào bộ nhớ:

path = "https://storage.googleapis.com/download.tensorflow.org/data/palmer_penguins/penguins.csv"
dataset = pd.read_csv(path)
label = "species"

# Display the first 3 examples.
dataset.head(3)

Bảng sau đây định dạng 3 ví dụ đầu tiên trong Palmer Insights tập dữ liệu:

Bảng 3. 3 ví dụ đầu tiên về Chim cánh cụt Palmer

loài đảo bill_length_mm bill_depth_mm flipper_length_mm body_mass_g tình dục năm
0 Adelie Torgersen 39,1 18,7 181,0 3750,0 nam 2007
1 Adelie Torgersen 39,5 17,4 186,0 3800,0 nữ giới 2007
2 Adelie Torgersen 40,3 18.0 195,0 3250,0 nữ giới 2007

Tập dữ liệu đầy đủ chứa tổ hợp số (ví dụ: bill_depth_mm), phân loại (ví dụ: island) và thiếu tính năng. Không giống mạng nơron các mạng, nhóm này hỗ trợ sẵn tất cả các loại tính năng này, vì vậy, bạn không cần phải thực hiện mã hoá một lần, chuẩn hoá hoặc sử dụng thêm tính năng is_present.

Ô chứa mã sau đây chia tập dữ liệu thành nhóm huấn luyện và kiểm thử đặt:

# Use the ~20% of the examples as the testing set
# and the remaining ~80% of the examples as the training set.
np.random.seed(1)
is_test = np.random.rand(len(dataset)) < 0.2

train_dataset = dataset[~is_test]
test_dataset = dataset[is_test]

print("Training examples: ", len(train_dataset))
# >> Training examples: 272

print("Testing examples: ", len(test_dataset))
# >> Testing examples: 72

Huấn luyện cây quyết định bằng các siêu tham số mặc định

Bạn có thể huấn luyện cây quyết định đầu tiên bằng phương pháp GIỎI (Phân loại và Thuật toán học hồi quy (còn gọi là người học) mà không chỉ định bất kỳ thuật toán nào siêu tham số. Đó là vì trình học ydf.CartLearner cung cấp chế độ mặc định phù hợp các giá trị siêu tham số. Bạn sẽ tìm hiểu thêm về cách hoạt động của loại mô hình này trong phần sau của khoá học này.

model = ydf.CartLearner(label=label).train(train_dataset)

Lệnh gọi trước đó không chỉ định cột để sử dụng làm các tính năng nhập. Do đó, mọi cột trong tập huấn luyện đều được sử dụng. Cuộc gọi cũng không chỉ định ngữ nghĩa (ví dụ: số, phân loại, văn bản) của các tính năng nhập. Do đó, ngữ nghĩa của tính năng được tự động suy luận.

Gọi model.plot_tree() để cho thấy cây quyết định kết quả:

model.plot_tree()

Trong Colab, bạn có thể dùng chuột để hiển thị thông tin chi tiết về các phần tử cụ thể như làm phân phối lớp trong mỗi nút.

Cây quyết định được huấn luyện theo mặc định
siêu tham số.

Hình 17. Cây quyết định được huấn luyện bằng các siêu tham số mặc định.

Colab cho thấy điều kiện gốc chứa 243 ví dụ. Tuy nhiên, bạn có thể hãy nhớ rằng tập dữ liệu huấn luyện chứa 272 ví dụ. 29 quốc gia còn lại các ví dụ đã được tự động dành riêng để xác thực và cắt tỉa cây.

Điều kiện đầu tiên kiểm tra giá trị của bill_depth_mm. Bảng 4 và 5 cho thấy khả năng của các loài khác nhau tuỳ thuộc vào kết quả của điều kiện đầu tiên.

Bảng 4. Khả năng của các loài khác nhau nếu bill_depth_mm ≥ 42.3

Loài Khả năng
Adelie (đỏ) 8%
Gentoo (xanh lam) Giảm 58%
Chinstrap (xanh lục) 36%

 

Bảng 5. Khả năng của các loài khác nhau nếu bill_depth_mm < 42.3

Loài Khả năng
Adelie (đỏ) Giảm 97%
Gentoo (xanh lam) 2%
Chinstrap (xanh lục) 0%

bill_depth_mm là một đối tượng dạng số. Do đó, giá trị 42,3 đã được tìm thấy sử dụng phương pháp phân tách chính xác để phân loại nhị phân bằng các thuộc tính số tính năng.

Nếu bill_depth_mm ≥ 42.3 là True, hãy kiểm tra thêm xem giá trị flipper_length_mm ≥ 207.5 có thể gần như hoàn toàn phân tách Gentoos và Gentoos+Adelie.

Mã sau đây cung cấp độ chính xác huấn luyện và kiểm thử cho mô hình này:

train_evaluation = model.evaluate(train_dataset)
print("train accuracy:", train_evaluation.accuracy)
# >> train accuracy:  0.9338

test_evaluation = model.evaluate(test_dataset)
print("test accuracy:", test_evaluation.accuracy)
# >> test accuracy:  0.9167

Trường hợp này hiếm khi xảy ra, nhưng có thể xảy ra trường hợp độ chính xác của bài kiểm tra cao hơn chương trình huấn luyện sự chính xác. Trong trường hợp đó, tập kiểm thử có thể khác với tập huấn luyện. Tuy nhiên, ở đây không phải là trường hợp tàu hoả & thử nghiệm đã được tách một cách ngẫu nhiên. Nhiều khả năng giải thích là tập dữ liệu thử nghiệm rất nhỏ (chỉ 72 ví dụ), vì vậy việc ước tính độ chính xác bị nhiễu.

Trong thực tế, đối với một tập dữ liệu nhỏ như vậy, việc sử dụng xác thực chéo sẽ được ưu tiên hơn vì hệ thống sẽ tính toán các giá trị chỉ số đánh giá chính xác hơn. Tuy nhiên, trong ví dụ này, chúng ta tiếp tục với khoá đào tạo & để thử nghiệm tính đơn giản.

Cải thiện siêu tham số của mô hình

Mô hình này là một cây quyết định duy nhất được huấn luyện bằng siêu tham số mặc định giá trị. Để nhận được thông tin dự đoán chính xác hơn, bạn có thể:

  1. Sử dụng một học viên có năng lực hơn, chẳng hạn như khu rừng ngẫu nhiên hoặc cây được tăng cường độ dốc mô hình. Trang tiếp theo sẽ giải thích về các thuật toán học tập đó.

  2. Tối ưu hoá siêu thông số bằng cách sử dụng quan sát và trực quan. Chiến lược phát hành đĩa đơn hướng dẫn cải thiện mô hình có thể hữu ích.

  3. Sử dụng tính năng điều chỉnh siêu tham số để tự động kiểm tra một số lượng lớn các siêu tham số có thể có.

Vì chúng ta chưa nhìn thấy khu rừng ngẫu nhiên và những cây được tăng cường độ dốc Do số lượng ví dụ quá ít nên không thể tự động điều chỉnh siêu tham số, bạn sẽ cải thiện mô hình theo cách thủ công.

Cây quyết định ở trên có kích thước nhỏ và lá với ví dụ 61 chứa kết hợp nhãn Adelie và Chinstrap. Tại sao thuật toán không chia lá này không? Có hai lý do có thể xảy ra:

  • Số lượng mẫu tối thiểu trên mỗi lá (min_examples=5 theo mặc định) có thể có .
  • Cây có thể đã được phân chia rồi cắt tỉa để tránh việc che lấp quá mức.

Giảm số lượng ví dụ tối thiểu xuống còn 1 và xem kết quả:

model = ydf.CartLearner(label=label, min_examples=1).train(train_dataset)
model.plot_tree()

Cây quyết định được huấn luyện bằng
min_examples=1.

Hình 18. Cây quyết định được huấn luyện bằng min_examples=1.

 

Nút lá chứa 61 ví dụ đã được chia thêm bội số lần.

Để xem liệu việc chia nút tiếp tục có giá trị hay không, chúng tôi đánh giá chất lượng của mô hình mới này trên tập dữ liệu thử nghiệm:

print(model.evaluate(test_dataset).accuracy)
# >> 0.97222

Chất lượng của mô hình được cải thiện với độ chính xác khi kiểm tra từ 0,9167 đến 0,97222. Thay đổi siêu tham số này là một ý tưởng hay.

Trước cảnh báo quyết định

Bằng cách tiếp tục cải thiện các siêu tham số, chúng tôi có thể đạt được kết quả sự chính xác. Tuy nhiên, thay vì quy trình thủ công này, chúng tôi có thể huấn luyện một quy trình chẳng hạn như một khu rừng ngẫu nhiên và xem liệu mô hình đó có hoạt động tốt hơn không.

model = ydf.RandomForestLearner(label=label).train(pandas_train_dataset)
print("Test accuracy: ", model.evaluate(pandas_test_dataset).accuracy)
# >> Test accuracy: 0.986111

Độ chính xác của khu rừng ngẫu nhiên tốt hơn cây đơn giản của chúng ta. Bạn sẽ hãy tìm hiểu lý do tại các trang tiếp theo.

Mức sử dụng và giới hạn

Như đã đề cập trước đó, cây quyết định đơn lẻ thường có chất lượng thấp hơn so với phương pháp học máy như những khu rừng ngẫu nhiên, cây được tăng cường độ dốc và mạng nơron mạng. Tuy nhiên, cây quyết định vẫn hữu ích trong các trường hợp sau:

  • Là một đường cơ sở đơn giản và ít tốn kém để đánh giá các phương pháp tiếp cận phức tạp hơn.
  • Khi có sự đánh đổi giữa chất lượng và mức độ diễn giải của mô hình.
  • Là một proxy cho việc diễn giải mô hình rừng quyết định, điều này khoá học sẽ khám phá sau.