Limio— Learn your way
🏆 Đấu trường
Đăng nhậpĐăng ký

Thiết kế và phát triển: @Limio team - Khoa Khoa học và Công nghệ Giáo dục, Đại học Bách Khoa Hà Nội

← Fundamental of Machine Learning

Bạn đang xem thử công khai

Đăng nhập để lưu tiến độ, làm bài tập, thảo luận và nhận phản hồi.

Đăng nhập
Module 3: Model Evaluation and Optimization

Áp dụng quy trình học máy hoàn chỉnh

In / Lưu PDF

Áp dụng quy trình học máy hoàn chỉnh

Bài này nối lại tất cả những gì đã học thành một quy trình duy nhất.

Chín bước

#BướcCâu hỏi cần trả lời
1Xác định bài toánDự đoán cái gì? Regression hay classification?
2Thu thập dữ liệuĐủ chưa? Có đại diện cho thực tế không?
3Khám phá (EDA)Phân phối ra sao? Thiếu bao nhiêu? Có ngoại lai không?
4Chia train/testCó cần stratify không?
5Tiền xử lýĐiền thiếu, chuẩn hoá, mã hoá — fit chỉ trên train
6BaselineMô hình đơn giản làm mốc so sánh
7Huấn luyện & tinh chỉnhCross-validation trên tập train
8Đánh giá cuốiChạy tập test một lần
9Diễn giải & triển khaiMô hình sai kiểu gì? Sai đó có chấp nhận được không?

Mã khung đầy đủ

import pandas as pd
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, confusion_matrix

data = pd.read_csv("data.csv")
target = "Outcome"
x, y = data.drop(target, axis=1), data[target]

x_train, x_test, y_train, y_test = train_test_split(
    x, y, test_size=0.2, random_state=1009, stratify=y)

pipe = Pipeline([
    ("imputer", SimpleImputer(strategy="median")),
    ("scaler",  StandardScaler()),
    ("model",   RandomForestClassifier(random_state=100)),
])

grid = {"model__max_depth": [5, 10, None], "model__n_estimators": [100, 300]}
search = GridSearchCV(pipe, grid, cv=5, scoring="f1", n_jobs=-1)
search.fit(x_train, y_train)

y_pred = search.best_estimator_.predict(x_test)   # test chạy MỘT lần
print(classification_report(y_test, y_pred))
print(confusion_matrix(y_test, y_pred))

Bước 9 là bước hay bị bỏ qua nhất

Có được classification_report chưa phải là xong. Hãy hỏi tiếp:

  • Mô hình sai kiểu nào nhiều hơn — FP hay FN? Kiểu đó có chấp nhận được trong bối cảnh thật không?
  • Nó sai trên nhóm nào? Một mô hình chính xác 85% tổng thể nhưng chỉ 60% trên một nhóm người dùng cụ thể là vấn đề công bằng, không phải vấn đề kỹ thuật.
  • Dữ liệu thật khi triển khai có giống dữ liệu huấn luyện không?

Lỗi thường gặp nhất

Dừng lại ở con số accuracy. Mô hình được dùng bởi người thật, để ra quyết định thật. Hiểu nó sai ở đâu quan trọng không kém việc nó đúng bao nhiêu phần trăm.