Trong đơn vị này, bạn sẽ sử dụng thư viện YDF (Rừng quyết định Yggdrasil) để huấn luyện và diễn giải một cây quyết định.
Đơn vị này được lấy cảm hứng từ hướng dẫn 🧭 YDF Getting Started (YDF Bắt đầu) của YDF.
Đấ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 sổ tay Colab mới.
- 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 Palmer Penguins
Colab này sử dụng tập dữ liệu Chim cánh cụt Palmer. Tập dữ liệu này chứa các số đo kích thước của 3 loài chim cánh cụt:
- Quai nón
- 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 tập dữ liệu Chim cánh cụt của Palmer. Đâ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
Đoạn mã sau đây gọi một hàm pandas để tải tập dữ liệu Palmer Penguins 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 tập dữ liệu Palmer Penguins:
Bảng 3. 3 ví dụ đầu tiên trong Palmer Penguins
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 | nam | 2007 |
1 | Adelie | Torgersen | 39,5 | 17,4 | 186,0 | 3800 | nữ giới | 2007 |
2 | Adelie | Torgersen | 40,3 | 18.0 | 195 | 3250,0 | nữ giới | 2007 |
Tập dữ liệu đầy đủ chứa nhiều tính năng số (ví dụ: bill_depth_mm
), phân loại (ví dụ: island
) và tính năng bị thiếu. Không giống như mạng nơ-ron, rừng quyết định hỗ trợ tất cả các loại đối tượng này một cách tự nhiên, 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 thêm đối tượng is_present.
Ô mã sau đây chia tập dữ liệu thành tập huấn luyện và tập kiểm thử:
# 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 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 thuật toán học CART (Cây phân loại và hồi quy) (còn gọi là người học) mà không cần chỉ định bất kỳ siêu tham số nào.
Đó là vì trình học ydf.CartLearner
cung cấp các giá trị siêu tham số mặc định phù hợp. 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 khoá học.
model = ydf.CartLearner(label=label).train(train_dataset)
Lệnh gọi trước đó không chỉ định các cột sẽ dùng làm tính năng đầu vào. Do đó, mọi cột trong tập hợp huấn luyện đều được sử dụng. Lệnh gọi này cũng không chỉ định ngữ nghĩa (ví dụ: số, danh mục, văn bản) của các đối tượng đầu vào. Do đó, ngữ nghĩa của đối tượng được suy luận tự động.
Gọi model.plot_tree()
để hiển thị cây quyết định thu được:
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ể, chẳng hạn như 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ể nhớ rằng tập dữ liệu huấn luyện chứa 272 ví dụ. 29 ví dụ còn lại đã được tự động dành riêng cho việc 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 xuất hiện 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 xuất hiện của các loài khác nhau nếu bill_depth_mm ≥
42.3
Loài | Khả năng |
---|---|
Adelie (màu đỏ) | 8% |
Gentoo (xanh dương) | 58% |
Quai nón (xanh lục) | 36% |
Bảng 5. Khả năng xuất hiện của các loài khác nhau nếu bill_depth_mm < 42.3
Loài | Khả năng |
---|---|
Adelie (màu đỏ) | 97% |
Gentoo (xanh dương) | 2% |
Quai nón (xanh lục) | 0% |
bill_depth_mm
là một đặc điểm bằng số. Do đó, giá trị 42,3 được tìm thấy bằng cách sử dụng thuật toán phân tách chính xác để phân loại nhị phân bằng các đặc điểm số.
Nếu bill_depth_mm ≥ 42.3
là True, hãy kiểm tra thêm xem flipper_length_mm ≥ 207.5
có thể tách biệt gần như hoàn hảo giữa Gentoos và Gentoos+Adelie hay không.
Đoạn mã sau đây cung cấp độ chính xác của quá trình huấn luyện và kiểm thử của mô hình:
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
Mặc dù hiếm gặp nhưng có thể độ chính xác của kiểm thử cao hơn độ chính xác của huấn luyện. Trong trường hợp đó, tập dữ liệu kiểm thử có thể khác với tập dữ liệu huấn luyện. Tuy nhiên, điều này không xảy ra ở đây vì tập huấn luyện và tập kiểm thử được chia tách ngẫu nhiên. Một lời giải thích hợp lý hơn là tập dữ liệu kiểm thử rất nhỏ (chỉ có 72 ví dụ), vì vậy, việc ước tính độ chính xác có thể không chính xác.
Trên thực tế, đối với một tập dữ liệu nhỏ như vậy, bạn nên sử dụng xác thực chéo vì phương pháp này 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 việc huấn luyện và kiểm thử để đơn giản hoá.
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 các giá trị siêu tham số mặc định. Để nhận được thông tin dự đoán chính xác hơn, bạn có thể:
Sử dụng một người học mạnh mẽ hơn, chẳng hạn như rừng ngẫu nhiên hoặc mô hình cây tăng cường độ dốc. Những thuật toán học này sẽ được giải thích trong trang tiếp theo.
Tối ưu hoá siêu tham số bằng cách quan sát và cảm nhận. Bạn có thể tham khảo hướng dẫn cải thiện mô hình.
Sử dụng điều chỉnh siêu tham số để tự động kiểm thử một số lượng lớn các siêu tham số có thể.
Vì chúng ta chưa thấy thuật toán rừng ngẫu nhiên và cây tăng cường độ dốc, đồng thời số lượng ví dụ quá nhỏ để thực hiện việc điều chỉnh siêu tham số tự động, nên 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à nút lá có 61 ví dụ chứa hỗn hợp nhãn Adelie và Chinstrap. Tại sao thuật toán không chia nhỏ lá này hơn nữa? Có hai lý do có thể xảy ra:
- Số lượng mẫu tối thiểu trên mỗi nút lá (theo mặc định là
min_examples=5
) có thể đã đạt đến. - Cây có thể đã được chia và sau đó được cắt tỉa để ngăn chặn tình trạng khớp quá mức.
Giảm số lượng ví dụ tối thiểu xuống 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 nhỏ nhiều lần.
Để xem liệu việc chia nhỏ thêm nút có mang lại giá trị hay không, chúng ta sẽ đánh giá chất lượng của mô hình mới này trên tập dữ liệu kiểm thử:
print(model.evaluate(test_dataset).accuracy)
# >> 0.97222
Chất lượng của mô hình đã tăng lên với độ chính xác của thử nghiệm từ 0,9167 lên 0,97222. Việc thay đổi siêu tham số này là một ý tưởng hay.
Xem trước rừng quyết định
Bằng cách tiếp tục cải thiện các siêu tham số, chúng ta có thể đạt được độ chính xác hoàn hảo. Tuy nhiên, thay vì quy trình thủ công này, chúng ta có thể huấn luyện một mô hình mạnh mẽ hơn, chẳng hạn như rừng ngẫu nhiên và xem liệu mô hình này có hoạt động hiệu quả hơn hay không.
model = ydf.RandomForestLearner(label=label).train(train_dataset)
print("Test accuracy: ", model.evaluate(test_dataset).accuracy)
# >> Test accuracy: 0.986111
Độ chính xác của rừng ngẫu nhiên cao hơn cây đơn giản của chúng ta. Bạn sẽ tìm hiểu lý do trong các trang tiếp theo.
Mức sử dụng và giới hạn
Như đã đề cập trước đó, một cây quyết định thường có chất lượng thấp hơn so với các phương pháp học máy hiện đại như rừng ngẫu nhiên, cây tăng cường độ dốc và mạng nơ-ron. Tuy nhiên, cây quyết định vẫn hữu ích trong các trường hợp sau:
- Là một cơ sở đơn giản và không tốn kém để đánh giá các phương pháp phức tạp hơn.
- Khi có sự đánh đổi giữa chất lượng mô hình và khả năng diễn giải.
- Là một proxy cho việc diễn giải mô hình rừng quyết định mà khoá học sẽ khám phá sau này.