05

Kỹ sư ML · Bước 5/8 · 8 phút

Những model cổ điển vẫn thắng

Bạn biết khi nào dùng model tuyến tính, cây quyết định và gradient boosting, và vì sao chúng thắng deep learning trên phần lớn dữ liệu dạng bảng.

Hồi quy tuyến tính và hồi quy logistic

Hồi quy tuyến tính (linear regression) vẽ đường thẳng khớp nhất với dữ liệu để dự đoán một con số, ví dụ giá nhà theo diện tích. Hồi quy logistic (logistic regression) làm việc tương tự cho câu hỏi có hoặc không, và trả về một xác suất.

Chúng nhanh, khó hỏng và dễ giải thích: mỗi feature có một trọng số, nên bạn nói được 'mỗi phòng ngủ thêm làm giá tăng khoảng chừng này'. Luôn thử chúng trước. Đó là baseline trung thực của bạn.

Cây quyết định và random forest

Cây quyết định (decision tree) đặt một chuỗi câu hỏi có hoặc không: thu nhập trên X không? Khách đã gọi tổng đài hai lần chưa? Nó xử lý tốt dữ liệu hỗn hợp và các khuôn mẫu lạ, nhưng một cây quá sâu sẽ học thuộc dữ liệu huấn luyện.

Random forest huấn luyện hàng trăm cây trên các phần dữ liệu ngẫu nhiên rồi cho chúng bỏ phiếu. Cả đám đông đáng tin hơn hẳn một cây đơn lẻ, và gần như không cần tinh chỉnh.

Gradient boosting: con ngựa thồ

Gradient boosting cũng xây nhiều cây, nhưng nối tiếp nhau: mỗi cây mới tập trung sửa lỗi của các cây trước. Các thư viện như XGBoost, LightGBM và CatBoost là lựa chọn tiêu chuẩn cho dữ liệu dạng bảng, kiểu dữ liệu hàng và cột mà phần lớn công ty đang có.

Trên dữ liệu bảng, một model gradient boosting được tinh chỉnh tốt thường vẫn thắng mạng nơ-ron, huấn luyện vài phút trên laptop và chạy rẻ hơn. Deep learning thắng ở ảnh, âm thanh và văn bản. Hãy chọn công cụ theo dữ liệu.

Tinh chỉnh mà không tự lừa mình

Mỗi model có các thiết lập gọi là hyperparameter (siêu tham số), như độ sâu của cây hay learning rate. Hãy tinh chỉnh chúng bằng cross-validation trên dữ liệu huấn luyện, đừng bao giờ dùng tập test. Cải thiện nhỏ mà trung thực tốt hơn một con số lớn không lặp lại được.

Thử ngay

Ba model, một bộ dữ liệu

  1. 1.Trong notebook Colab hoặc Kaggle, nạp bộ dữ liệu ung thư vú của scikit-learn (load_breast_cancer).
  2. 2.Nhờ chatbot viết code theo prompt bên dưới.
  3. 3.So sánh ba điểm số. Sau đó hỏi chatbot vì sao khoảng cách giữa chúng nhỏ hay lớn trên bộ dữ liệu này.
Viết code Python nạp bộ dữ liệu breast cancer của scikit-learn, rồi dùng cross-validation 5 lần để so sánh LogisticRegression (có scaling trong pipeline), RandomForestClassifier và HistGradientBoostingClassifier. Báo cáo recall và precision trung bình của từng model. Viết ngắn gọn và có chú thích.
Dữ liệu của bạn là một bảng hồ sơ khách hàng với 40 cột. Model nghiêm túc đầu tiên thường mạnh nhất là gì?

Tự kiểm tra

Dữ liệu của bạn là một bảng hồ sơ khách hàng với 40 cột. Model nghiêm túc đầu tiên thường mạnh nhất là gì?

Đọc thêm