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:
- Tạo một Colab mới sổ tay.
- 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
- 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:
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.
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ể:
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 đó.
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.
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()
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.