3. Dữ liệu và Học máy cơ bản
Ở bài học trước, bạn đã biết:
- Có nhiều hướng tiếp cận để tạo ra AI: dựa trên Luật và Tri thức, dựa trên Dữ liệu (Học máy). Kết hợp học máy với Luật và Tri thức, và một số hướng khác
- Hướng dựa trên Luật: con người phải lập trình sẵn mọi quy tắc; hướng Học máy: máy tự học quy luật từ dữ liệu mẫu
- Hiện nay, Học máy là hướng tiếp cận đang được nhiều người quan tâm
Bài học này, chúng ta sẽ tìm hiểu về:
- Dữ liệu được dùng trong Học máy là gì?
- Máy “học” như thế nào?
- Làm sao để đánh giá là máy đã học tốt hay chưa?
3.1 Dữ liệu là nguyên liệu của AI
Trong Học máy, dữ liệu được tổ chức thành các mẫu (sample). Mỗi mẫu có hai phần:
- Đặc trưng (feature): những thông tin đầu vào dùng để mô tả mẫu
- Nhãn (label): kết quả đúng đã biết của mẫu đó (nếu có)
Ví dụ: trong bài toán “Dự đoán học sinh Đậu hay Rớt” ở bài trước, mỗi học sinh là một mẫu (bảng sau có 3 mẫu):
Chất lượng dữ liệu quyết định chất lượng của mô hình. Có một nguyên tắc rất nổi tiếng: "Rác vào, rác ra" (Garbage in, garbage out - GIGO). Dữ liệu sai, thiếu, lệch hoặc quá ít thì dù thuật toán tốt đến đâu, kết quả cũng không đáng tin.
Một bộ dữ liệu tốt thường cần:
- Đủ lớn: có đủ ví dụ để máy tìm ra quy luật
- Đa dạng: bao phủ nhiều tình huống sẽ gặp ngoài thực tế
- Chính xác: nhãn được gắn đúng
- Không thiên lệch: không thiên về một nhóm nào đó một cách bất hợp lý
3.2 Mô hình và quy trình Học máy
Mô hình (model) là kết quả của quá trình học, nó có thể là một "công thức" hoặc cấu trúc mà máy rút ra từ dữ liệu, dùng để dự đoán cho dữ liệu mới.
Quy trình để tạo ra một hệ thống Học máy thường gồm các bước:
1. Thu thập dữ liệu: gom dữ liệu phù hợp với bài toán
2. Chuẩn bị dữ liệu: làm sạch, xử lý dữ liệu thiếu, hoặc sai, chọn đặc trưng
3. Huấn luyện (training): cho thuật toán học từ dữ liệu để tạo mô hình
4. Kiểm thử (testing): đo xem mô hình dự đoán tốt đến đâu trên dữ liệu chưa từng gặp
5. Triển khai và cải tiến: đưa vào sử dụng, theo dõi, bổ sung dữ liệu và huấn luyện lại khi cần
Xem hình minh họa:
Trong bài toán “Dự đoán học sinh Đậu hay Rớt” (ở bài học trước), chúng ta mới làm bước 3 và dự đoán thử một học sinh.
3.3 Các loại Học máy
Như bạn đã biết, Học máy gồm nhiều loại khác nhau, cụ thể:
Trong học có giám sát, có hai dạng bài toán chính:
- Phân loại (Classification): xếp dữ liệu vào các nhóm định sẵn, ví dụ Đậu/Rớt, thư rác/không phải thư rác
- Hồi quy (Regression): dự đoán một con số, ví dụ giá nhà, nhiệt độ ngày mai
Học sâu (Deep Learning) không phải một loại thứ tư trong nhánh Học máy, mà là một nhóm kỹ thuật dùng mạng nơ-ron nhiều tầng, có thể áp dụng cho cả ba loại Học máy ở trên.
3.4 Đánh giá mô hình
Tập huấn luyện và tập kiểm thử
Hãy hình dung một học sinh ôn thi bằng cách học thuộc đáp án của 10 đề cũ, rồi được kiểm tra bằng đúng 10 đề đó. Nếu học sinh đó đạt điểm cao, cũng chưa thể khẳng định là học sinh đó hiểu bài. Muốn biết học sinh có thật sự hiểu hay không, phải cho học sinh đó làm đề mới.
Trong Học máy cũng vậy. Chúng ta sẽ chia dữ liệu thành hai phần:
- Tập huấn luyện (training set): dùng để máy học, thường chiếm khoảng 70% đến 80% số lượng dữ liệu mẫu
- Tập kiểm thử (test set): giữ riêng, máy không được thấy khi học, chỉ dùng để đánh giá, thường chiếm khoảng 20% đến 30% số lượng dữ liệu mẫu
Độ chính xác
Độ chính xác (accuracy) là tỷ lệ dự đoán đúng trên tổng số mẫu được kiểm tra:
accuracy = số dự đoán đúng / tổng số mẫu
Ví dụ: mô hình dự đoán đúng 45 trên 50 mẫu kiểm thử thì độ chính xác là 45/50 = 0,9 (tức 90%).
Quá khớp và chưa khớp
- Quá khớp (overfitting): mô hình "học vẹt", đạt kết quả rất tốt trên tập huấn luyện nhưng kém trên dữ liệu mới. Thường xảy ra khi mô hình quá phức tạp hoặc dữ liệu quá ít
- Chưa khớp (underfitting): mô hình quá đơn giản, chưa nắm được quy luật, nên kém cả trên tập huấn luyện lẫn tập kiểm thử
Mục tiêu là mô hình có khả năng khái quát hóa tốt: làm tốt trên dữ liệu chưa từng thấy.
Cách nhận biết nhanh một mô hình là tốt hay không:
3.5 Cài đặt ví dụ
Chúng ta sẽ dùng lại thuật toán KNN, nhưng lần này làm đúng quy trình, gồm: chia dữ liệu, huấn luyện, kiểm thử và so sánh nhiều giá trị n_neighbors (số hàng xóm).
Dữ liệu là bộ Iris có sẵn trong scikit-learn: 150 bông hoa, mỗi bông có 4 đặc trưng (chiều dài, chiều rộng của đài hoa và cánh hoa), thuộc 3 loài. Đây là bài toán phân loại.
[phan_loai_hoa.py]
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# 1. Nạp dữ liệu: X là đặc trưng, y là nhãn (loài hoa)
du_lieu = load_iris()
X, y = du_lieu.data, du_lieu.target
# 2. Chia dữ liệu: 70% để huấn luyện, 30% để kiểm thử
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42
)
print("Số mẫu huấn luyện:", len(X_train))
print("Số mẫu kiểm thử:", len(X_test))
# 3. Thử nhiều giá trị “số hàng xóm”
print("\nk | Độ chính xác (train) | Độ chính xác (test)")
for k in [1, 3, 5, 11, 25, 60]:
model = KNeighborsClassifier(n_neighbors=k)
model.fit(X_train, y_train) # học trên tập huấn luyện
acc_train = accuracy_score(y_train, model.predict(X_train))
acc_test = accuracy_score(y_test, model.predict(X_test))
print(f"{k} | {acc_train:.2f} | {acc_test:.2f}")
Bạn chạy chương trình trên và quan sát bảng kết quả. Ví dụ:
So mau huan luyen: 105
So mau kiem thu: 45
k | Độ chính xác (train) | Độ chính xác (test)
1 1.00 | 1.00
3 0.94 | 1.00
5 0.95 | 1.00
11 0.95 | 1.00
25 0.91 | 1.00
60 0.88 | 0.96
Một vài nhận xét:
- train_test_split giữ lại một phần dữ liệu để máy không được thấy khi học. Tham số random_state=42 giúp kết quả lặp lại được mỗi lần chạy
- Với k = 1, mô hình chỉ nhìn đúng 1 hàng xóm. Khi dự đoán lại chính tập huấn luyện, hàng xóm gần nhất của một điểm thường là chính nó, nên độ chính xác trên tập huấn luyện thường rất cao (gần hoặc bằng 1,00). Con số này chưa nói lên khả năng với dữ liệu mới, nên chúng ta phải xem cột test
- Khi k rất lớn (ví dụ 60), mô hình phải "hỏi ý kiến" quá nhiều hàng xóm, kể cả những điểm khá xa, nên mô hình trở nên quá đơn giản và có thể kém đi
- Nhờ so sánh cột train và cột test, chúng ta chọn được giá trị k cho kết quả tốt nhất trên dữ liệu chưa từng thấy. Kết quả cụ thể phụ thuộc vào cách chia dữ liệu, bạn hãy tự chạy và nhận xét
3.6 Xem và đọc thêm
Sử dụng các từ khóa sau, tìm kiếm trên Google, Youtube, Chatbot để xem và đọc thêm: học máy cơ bản, supervised learning, train test split, overfitting là gì; tham số random_state=42
3.7 Bài tập và câu hỏi
Bài tập
Bài tập 3.1: Cài đặt và chạy đoạn mã trong phần lý thuyết. Ghi lại bảng kết quả của bạn.
Bài tập 3.2: Trong ví dụ phần 3.5, đổi test_size=0.3 thành 0.2 rồi 0.5, và đổi random_state sang vài giá trị khác. Kết quả độ chính xác trên tập kiểm thử có thay đổi không? Vì sao?
Bài tập 3.3: Quay lại Ví dụ 2, Phần 2.2, của bài 2 (dự đoán đậu hay rớt). Hãy tự bổ sung thêm khoảng 10 học sinh vào dữ liệu, rồi chia thành tập huấn luyện và kiểm thử, và tính độ chính xác. Dữ liệu càng nhiều thì kết quả có ổn định hơn không?
Câu hỏi
Câu 3a: Trong học máy, "nhãn" (label) của một mẫu dữ liệu là gì?
A. Tên của thuật toán được dùng để huấn luyện mô hình
B. Số thứ tự của mẫu trong bảng dữ liệu
C. Kết quả đúng đã biết gắn với mẫu dữ liệu đó
D. Dung lượng bộ nhớ mà mẫu dữ liệu chiếm
Câu 3b: Loại học máy nào sử dụng dữ liệu đã được gắn nhãn để học cách dự đoán đáp án cho dữ liệu mới?
A. Học có giám sát
B. Học không giám sát
C. Học tăng cường
D. Không loại nào ở trên
Câu 3c: Vì sao khi huấn luyện mô hình, ta phải giữ lại một tập kiểm thử riêng mà máy không được thấy khi học?
A. Để tiết kiệm bộ nhớ cho máy tính
B. Để máy tính học nhanh hơn vì có ít dữ liệu hơn
C. Để mô hình ghi nhớ chính xác từng mẫu trong tập huấn luyện
D. Để đánh giá khả năng của mô hình trên dữ liệu chưa từng thấy, tránh việc chỉ "học vẹt"
Câu 3d: Hiện tượng quá khớp (overfitting) là gì?
A. Mô hình quá đơn giản nên kém ở cả dữ liệu huấn luyện lẫn dữ liệu mới
B. Mô hình đạt kết quả rất tốt trên dữ liệu huấn luyện nhưng kém trên dữ liệu mới
C. Mô hình có kết quả tốt đều trên cả dữ liệu huấn luyện và dữ liệu mới
D. Mô hình không thể chạy được vì dữ liệu bị thiếu
Câu 3e: Một nhóm xây dựng mô hình học máy để lọc thư rác. Kết quả: độ chính xác trên tập huấn luyện là 99%, nhưng trên tập kiểm thử chỉ còn 62%. Nhận định và hướng xử lý đúng đắn nhất là gì?
A. Mô hình rất tốt vì đạt 99%, có thể triển khai ngay
B. Chỉ cần cố làm cho độ chính xác trên tập huấn luyện đạt 100% là xong
C. Mô hình có dấu hiệu quá khớp; nên bổ sung dữ liệu đa dạng hơn hoặc dùng mô hình đơn giản hơn, rồi kiểm thử lại
D. Đưa luôn tập kiểm thử vào huấn luyện để con số 62% tăng lên




