Menu
CoddyTech

Kiểm định K-Fold

Thuộc phần Học có giám sát trong hành trình Machine Learning của Coddy. Bài học 37 trên 58.

Chương này giúp bạn tin tưởng vào điểm số của mình. Đến cuối chương, bạn sẽ tinh chỉnh mô hình bằng biểu đồ như sau:

Các cột biểu thị độ chính xác trung bình qua 5 fold với k từ 1 đến 41. Các cột tăng từ 0.85 tại k = 1 lên mức cao nhất được đánh dấu là 0.91 tại k = 15, rồi giảm xuống

Một lần chia dữ liệu có thể cho kết quả may mắn. Kiểm định chéo K-fold chia các hàng thành các nhóm, ở đây là 5 nhóm, rồi lần lượt kiểm tra trên từng nhóm và huấn luyện trên phần còn lại:

Năm hàng gồm năm ô. Trong mỗi lần chia, một ô, mỗi lần là một ô khác nhau, làm nhóm kiểm tra; bốn ô còn lại dùng để huấn luyện. Điểm số của cây Iris bên cạnh: 0.967, 0.967, 0.900, 0.967, 1.000

Một lần gọi chạy cả năm lần, ở đây là cho một cây quyết định trên bộ dữ liệu hoa iris:

from sklearn.model_selection import cross_val_score

tree = DecisionTreeClassifier(random_state=0)
scores = cross_val_score(tree, X, y, cv=5)
print(np.round(scores, 3))
print(f"{scores.mean():.3f} {scores.std():.3f}")

Kết quả in ra:

[0.967 0.967 0.9   0.967 1.   ]
0.960 0.033

Hãy dùng giá trị trung bình làm điểm số, còn độ lệch chuẩn cho biết điểm số dao động nhiều đến mức nào.

challenge icon

Thử thách

Trung bình

Một cơ sở sản xuất kombucha dự đoán các mẻ bị hỏng dựa trên 5 lần đo trong phòng thí nghiệm. Mô hình của họ ổn định đến mức nào? Chương trình đọc số fold; phần code có sẵn tạo dữ liệu và mô hình.

  1. Kiểm định chéo mô hình với số fold đó.
  2. In độ chính xác của từng fold, sau đó in giá trị trung bình và độ lệch chuẩn, tất cả với 3 chữ số thập phân.
  3. In số thứ tự của fold yếu nhất, tính từ 1.

Với các mẻ khác và 4:

Fold 1: 0.917
Fold 2: 0.933
Fold 3: 0.883
Fold 4: 0.917
Mean 0.912, std 0.018
Weakest fold: 3

Tự làm thử

import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression

n_folds = int(input())

# Đừng thay đổi các dòng bên dưới: 240 mẻ kombucha, mỗi mẻ có 5 kết quả đo trong phòng thí nghiệm; nhãn 1 nghĩa là đã hỏng
X, y = make_classification(n_samples=240, n_features=5, n_informative=3, n_redundant=0,
                           flip_y=0.08, class_sep=0.9, random_state=2)
model = LogisticRegression(max_iter=1000)

# Viết code của bạn bên dưới
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Học có giám sát

Tự luyện tập: Trình biên dịch Python online