Machine learning là gì? Machine learning (học máy) là nhánh của trí tuệ nhân tạo cho phép máy tính tự tìm ra quy tắc từ dữ liệu, thay vì được lập trình từng quy tắc bằng tay. Thay vì viết “nếu email có chữ trúng thưởng thì là spam”, bạn đưa cho máy vài nghìn email đã gắn nhãn và để nó tự tìm dấu hiệu. Gọn lại: lập trình truyền thống là quy tắc cộng dữ liệu ra đáp án, còn machine learning là dữ liệu cộng đáp án ra quy tắc.
Bài này dành cho sinh viên IT và lập trình viên mới. Bạn sẽ hiểu bản chất của “máy học”, biết ba loại ML, phân biệt nó với deep learning và tự viết chương trình ML đầu tiên. Mọi code đã chạy thật trên scikit-learn 1.9.1.
Machine learning là gì? Định nghĩa dễ hiểu nhất cho người mới
Học máy là một cách xây dựng chương trình. Bạn không viết logic ra quyết định; bạn đưa dữ liệu và để máy tự suy ra logic đó.
Trả lời câu machine learning là gì theo hai định nghĩa kinh điển. Arthur Samuel (1959): lĩnh vực giúp máy tính học mà không cần được lập trình tường minh. Tom Mitchell (1997): một chương trình “học” nếu hiệu năng ở tác vụ T, đo bằng thước đo P, cải thiện nhờ kinh nghiệm E. Định nghĩa thứ hai buộc bạn hỏi: máy làm gì, đo bằng gì, dữ liệu ở đâu.
Hãy so sánh với việc dạy trẻ nhận biết con mèo. Bạn không đọc định nghĩa “bốn chân, có ria”; bạn cho bé xem mèo vài trăm lần. Bé nhận ra ngay, kể cả con mèo chưa từng thấy — nhưng không giải thích được tại sao.
Khác biệt cốt lõi với lập trình truyền thống
Đây là phần quan trọng nhất của bài. Cùng bài toán lọc spam, cách truyền thống là viết quy tắc bằng tay:
# Lập trình truyền thống: bạn tự viết quy tắc
def is_spam(email: str) -> bool:
tu_khoa_xau = ["trúng thưởng", "miễn phí 100%", "click ngay", "vay nhanh"]
diem = sum(1 for tu in tu_khoa_xau if tu in email.lower())
if diem >= 2:
return True
return email.count("!") > 5
print(is_spam("Chúc mừng bạn TRÚNG THƯỞNG, click ngay để nhận quà!")) # True
print(is_spam("Em gửi anh bản báo cáo tuần, anh xem giúp em nhé")) # False
Hoạt động tốt. Nhưng mỗi khi kẻ gửi spam đổi chiêu, bạn phải sửa code: chúng viết “tr.úng th.ưởng” là quy tắc của bạn vô hiệu. Còn đây là cách machine learning, không viết quy tắc nào:
# Machine learning: bạn đưa dữ liệu + đáp án, máy tự tìm quy tắc
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
emails = [
"Chúc mừng bạn trúng thưởng, click ngay nhận quà",
"Vay nhanh không cần thế chấp, giải ngân trong 5 phút",
"Miễn phí 100% khóa học, đăng ký ngay hôm nay",
"Em gửi anh bản báo cáo tuần, anh xem giúp em nhé",
"Họp nhóm 9h sáng mai ở phòng B201 nhé cả nhà",
"Anh ơi em đã push code lên nhánh develop rồi",
]
nhan = [1, 1, 1, 0, 0, 0] # 1 = spam, 0 = không spam
vec = CountVectorizer()
model = MultinomialNB()
model.fit(vec.fit_transform(emails), nhan) # <- đây là "học"
test = ["Trúng thưởng lớn, click ngay!", "Mai em nghỉ phép nửa ngày anh nhé"]
print(model.predict(vec.transform(test))) # output thật: [1 0]
Hãy để ý: không có câu if nào về nội dung email, không danh sách từ khóa. Chỉ dữ liệu, nhãn và một dòng model.fit(). Khác biệt gọn lại:
- Lập trình truyền thống: quy tắc + dữ liệu → đáp án
- Machine learning: dữ liệu + đáp án → quy tắc
Đổi lại, bạn mất quyền kiểm soát trực tiếp. Khi model sai, bạn sửa dữ liệu hoặc cách train, không sửa code. Đó là cú sốc tư duy lớn nhất với dev mới.
AI, machine learning, deep learning, LLM — cái nào chứa cái nào
Bốn thuật ngữ này lồng nhau theo đúng thứ tự:
AI
└── Machine learning
└── Deep learning
└── LLM (ChatGPT, Claude, Gemini...)
Vậy mọi LLM đều là machine learning, nhưng phần lớn ML trong doanh nghiệp thì không. Đọc thêm deep learning là gì và LLM là gì.
Machine learning hoạt động như thế nào? 5 bước của một bài toán
Hiểu machine learning là gì chưa đủ; bạn cần biết nó chạy ra sao. Mọi dự án ML, từ bài tập trên lớp đến hệ gợi ý của Shopee, đều đi qua năm bước giống nhau.
Bước 1 — Dữ liệu. Feature là đầu vào, thứ bạn biết. Label là đáp án cần dự đoán.
| Điểm chuyên cần | Giờ tự học/tuần | Bài tập đã làm | Kết quả (label) |
|---|---|---|---|
| 9 | 10 | 12 | Đậu |
| 5 | 2 | 3 | Rớt |
| 8 | 7 | 10 | Đậu |
| 4 | 4 | 5 | Rớt |
Ba cột đầu là feature, cột cuối là label. Chất lượng của chúng quyết định gần như toàn bộ kết quả.
Bước 2 — Chọn model. Model là một công thức toán có tham số chưa biết, không phải phần mềm thông minh. Đơn giản nhất là y = a*x + b: bạn biết dạng, chưa biết a và b.
Bước 3 — Train. “Học” chỉ là dò tìm bộ tham số làm sai số nhỏ nhất:
# "Học" = dò tìm tham số làm sai số nhỏ nhất
gio_tu_hoc = [1, 2, 3, 4, 5]
diem_thi = [3, 4.5, 6, 7.5, 9]
def sai_so(a, b):
return sum((a * x + b - y) ** 2 for x, y in zip(gio_tu_hoc, diem_thi)) / 5
a, b = min(((a/10, b/10) for a in range(41) for b in range(41)),
key=lambda p: sai_so(*p))
print(f"a = ${a}, b = ${b}, sai so = ${sai_so(a, b):.4f}")
print(f"Du doan 6 gio tu hoc -> diem ${a*6 + b:.2f}")
Output thật: a = 1.5, b = 1.5, sai so = 0.0000 và Du doan 6 gio tu hoc -> diem 10.50.
Hàm sai_so chính là loss function (hàm mất mát). Vòng lặp duyệt a, b là thuật toán tối ưu ở dạng thô sơ nhất. Thư viện thật dùng gradient descent, nhưng ý tưởng không khác: thử, đo sai số, điều chỉnh, lặp lại.
Bước 4 — Đánh giá. Một model đạt 100% trên chính dữ liệu đã học thì vô nghĩa, giống sinh viên làm lại đề đã có đáp án. Vì vậy ta chia train set để học (70–80%) và test set giữ kín để thi.
Thước đo phổ biến nhất là accuracy — tỷ lệ đoán đúng. Nhưng nếu 99% giao dịch là bình thường, model đoán “bình thường” mọi lần vẫn đạt 99% mà vô dụng. Khi đó ta dùng precision và recall.
Bước 5 — Dự đoán. Model đã train là một file. Bạn lưu, nạp lại trong ứng dụng, rồi gọi như một hàm.
Overfitting và underfitting: “học tủ” và “học không vào”
Overfitting là học tủ: model nhớ cả nhiễu, nên điểm train rất cao mà điểm test thấp. Underfitting là học không vào: model quá đơn giản, cả hai điểm đều thấp.
Các loại machine learning là gì: supervised, unsupervised và reinforcement
Ba họ chia theo việc dữ liệu có đáp án sẵn hay không.
Supervised learning (học có giám sát) dùng dữ liệu có đáp án, và phổ biến nhất trong doanh nghiệp. Nó chia hai nhóm: phân loại dự đoán nhãn rời rạc, hồi quy dự đoán số liên tục. Mẹo nhận biết: trả lời “cái nào” là phân loại, “bao nhiêu” là hồi quy.
Unsupervised learning (học không giám sát) không có đáp án; máy tự tìm cấu trúc ẩn. Ứng dụng quen nhất là phân cụm khách hàng bằng k-means. Điểm khó: không tính được accuracy.
Reinforcement learning (học tăng cường) học qua thưởng và phạt, là họ đứng sau AlphaGo.
| Thuật toán | Bài toán | Khi nào dùng | Độ khó |
|---|---|---|---|
| Linear Regression | Hồi quy | Dự đoán số, cần giải thích đơn giản | Rất dễ |
| Logistic Regression | Phân loại | Bài toán có/không, cần baseline nhanh | Dễ |
| Decision Tree | Cả hai | Cần đọc được quy tắc máy học ra | Dễ |
| k-NN | Cả hai | Dữ liệu nhỏ, muốn thử nhanh | Rất dễ |
| Random Forest | Cả hai | Chính xác hơn cây đơn, ít phải tinh chỉnh | Trung bình |
| Gradient Boosting (XGBoost) | Cả hai | Dữ liệu dạng bảng, cần chính xác nhất | Trung bình |
| k-means | Phân cụm | Chia nhóm khách hàng, không có nhãn | Dễ |
Machine learning và deep learning khác nhau ở đâu?
Deep learning là tập con của học máy, dùng mạng nơ-ron nhiều tầng. Khác biệt lớn nhất là ai chọn feature: ML cổ điển cần bạn tự chọn, deep learning để mạng tự học từ dữ liệu thô.
| Tiêu chí | Machine learning cổ điển | Deep learning |
|---|---|---|
| Dữ liệu cần | Vài trăm đến vài chục nghìn dòng | Thường hàng chục nghìn trở lên |
| Phần cứng | CPU, laptop là đủ | Thường cần GPU |
| Feature | Người chọn và tạo | Mạng tự học từ dữ liệu thô |
| Giải thích được | Cao, nhất là cây và hồi quy | Thấp, thường gọi là hộp đen |
| Ví dụ | Chấm điểm tín dụng, dự đoán rời bỏ | Nhận diện ảnh, dịch máy, LLM |
Quy tắc chọn: dữ liệu dạng bảng thì ML cổ điển, dữ liệu phi cấu trúc như ảnh và văn bản thì deep learning. Chi tiết mạng nơ-ron và transformer ở bài deep learning là gì.
Muốn học machine learning có mentor chấm code và làm project thật? Xem lộ trình AI Coding tại CodeGym Đà Nẵng để biết nên bắt đầu từ đâu với nền Python bạn đang có.
Hướng dẫn viết chương trình machine learning đầu tiên bằng Python
Cách nhanh nhất để hiểu machine learning là gì là tự chạy một model. Bài toán: đoán loài hoa Iris từ bốn số đo. Code dưới đây chạy ngày 10/10/2026 trên Python 3.13.16 và scikit-learn 1.9.1.
Bước 0 — Chuẩn bị môi trường
python --version # cần 3.10 trở lên
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -U scikit-learn pandas joblib
Không muốn cài gì? Mở Google Colab và chạy ngay trên trình duyệt.
Bước 1 — Nạp dữ liệu và xem thử
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df["loai_hoa"] = [iris.target_names[i] for i in iris.target]
print(df.head())
print("số dòng:", len(df)) # output thật: 150
Bốn cột số đo là feature: dài và rộng của lá đài, dài và rộng của cánh hoa. Cột loai_hoa là label.
Bước 2 — Chia train/test
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
iris.data, iris.target, test_size=0.2, random_state=42)
print("train:", len(X_train), "| test:", len(X_test)) # train: 120 | test: 30
random_state=42 cố định cách chia ngẫu nhiên, nhờ đó chạy lại vẫn ra cùng kết quả.
Bước 3 và 4 — Train rồi chấm điểm
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
model = DecisionTreeClassifier(max_depth=3, random_state=42)
model.fit(X_train, y_train) # một dòng này chính là "học"
print("accuracy trên test:", round(accuracy_score(y_test, model.predict(X_test)), 4))
print("accuracy trên train:", round(accuracy_score(y_train, model.predict(X_train)), 4))
Output thật:
accuracy trên test: 1.0
accuracy trên train: 0.9583
Đọc kết quả cho đúng: model đúng 30/30 trên test, 115/120 trên train. Test cao hơn train là bình thường khi test set chỉ 30 dòng — Iris là bộ dữ liệu dễ.
Bước 5 — In quy tắc máy đã tự học
Đây là khoảnh khắc đáng giá nhất của bài:
from sklearn.tree import export_text
print(export_text(model, feature_names=iris.feature_names))
Output thật:
|--- petal length (cm) <= 2.45
| |--- class: 0
|--- petal length (cm) > 2.45
| |--- petal length (cm) <= 4.75
| | |--- petal width (cm) <= 1.65
| | | |--- class: 1
| | |--- petal width (cm) > 1.65
| | | |--- class: 2
| |--- petal length (cm) > 4.75
| | |--- petal width (cm) <= 1.75
| | | |--- class: 1
| | |--- petal width (cm) > 1.75
| | | |--- class: 2
Cái cây này chính là chuỗi if-else bạn sẽ phải tự viết nếu làm cách truyền thống. Khác biệt duy nhất: bạn không chọn con số 2.45, cũng không chọn cột petal length. Máy tự tìm từ dữ liệu.
Thú vị hơn, cây chỉ dùng hai trong bốn feature. Hai cột lá đài bị bỏ vì không giúp phân biệt — đó là feature importance.
Bước 6 — Thí nghiệm overfitting bằng số thật
Tôi thử tăng giảm độ sâu cây trên Iris: max_depth=None cho train 1,0 và test 1,0. Tức là không có overfitting — Iris quá sạch và quá dễ. Nhiều bài hướng dẫn vẫn dùng Iris để “chứng minh overfitting”; đó là chép lý thuyết chứ không chạy thật.
Muốn thấy overfitting, phải có dữ liệu nhiễu. Tôi tạo bộ 300 dòng với 15% nhãn bị đảo:
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=300, n_features=10,
n_informative=3, flip_y=0.15, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42)
for depth in [1, 2, 3, 5, 10, None]:
m = DecisionTreeClassifier(max_depth=depth, random_state=42).fit(X_train, y_train)
tr = accuracy_score(y_train, m.predict(X_train))
te = accuracy_score(y_test, m.predict(X_test))
print(f"max_depth=${str(depth):<5} train=${tr:.4f} test=${te:.4f}")
Output thật:
max_depth=1 train=0.7905 test=0.7222
max_depth=2 train=0.8000 test=0.7444
max_depth=3 train=0.8524 test=0.6778
max_depth=5 train=0.9286 test=0.6556
max_depth=10 train=1.0000 test=0.6444
max_depth=None train=1.0000 test=0.6444
Giờ thì rõ. Cây càng sâu, điểm train càng lên tới 100%, nhưng điểm test tụt dần từ 0,74 xuống 0,64. Model đang học thuộc cả nhiễu — đó là học tủ. Model tốt nhất lại là max_depth=2. Bài học: đừng chọn model theo điểm train.
Bước 7 — Lưu model và gọi lại như một hàm
import joblib
joblib.dump(model, "iris_model.joblib")
m2 = joblib.load("iris_model.joblib")
hoa_moi = [[5.1, 3.5, 1.4, 0.2]]
print("dự đoán:", iris.target_names[m2.predict(hoa_moi)[0]]) # setosa
print("xác suất:", m2.predict_proba(hoa_moi)) # [[1. 0. 0.]]
File .joblib này là toàn bộ “trí tuệ” của model. Bạn đưa nó vào endpoint FastAPI hay Flask, nạp một lần khi khởi động, rồi mỗi request gọi predict.
Ba lỗi người mới hay gặp
ModuleNotFoundError: No module named 'sklearn'— cài ở môi trường này, chạy ở môi trường khác. Kích hoạt lại venv.- Truyền list một chiều vào
predict— scikit-learn luôn chờ mảng hai chiều:predict([[5.1, 3.5, 1.4, 0.2]]). - Chấm điểm trên tập train — nguy hiểm nhất vì không báo lỗi gì. Luôn công bố accuracy trên test set.
Ứng dụng của machine learning trong sản phẩm hằng ngày
- Lọc spam Gmail — phân loại, đúng ví dụ đầu bài, học từ hàng tỷ email đã gắn cờ.
- Gợi ý sản phẩm Shopee, TikTok — học từ lịch sử xem và mua của bạn.
- Phát hiện gian lận thẻ — phát hiện bất thường, gắn cờ trong vài trăm milli-giây.
- Dự đoán giờ giao hàng Grab, Be — hồi quy, feature là khoảng cách và giờ cao điểm.
- ChatGPT, Claude, Copilot — vẫn là machine learning, ở nhánh deep learning quy mô lớn.
Năm 2026 còn cần học machine learning không khi đã có LLM?
Đây là câu sinh viên hỏi tôi nhiều nhất năm nay. Trả lời thẳng: vẫn cần.
Thứ nhất là dữ liệu dạng bảng. Phần lớn dữ liệu doanh nghiệp Việt Nam nằm trong database quan hệ. Trên loại dữ liệu này, gradient boosting vẫn là mặc định của ngành, và nhiều nghiên cứu cho thấy nó ngang hoặc hơn các mô hình deep learning chuyên cho dữ liệu bảng (tổng quan trên arXiv).
Thứ hai là chi phí. Một model gradient boosting train vài phút trên CPU, inference gần như miễn phí. Gọi LLM cho mỗi giao dịch thẻ là bất khả thi về tiền và độ trễ.
Thứ ba là khả năng giải thích. Ngân hàng và bệnh viện phải trả lời được “vì sao từ chối”. Cây quyết định làm được; LLM thì không, và còn có thể bịa ra thông tin.
Quan trọng hơn cả: tư duy ML là nền của nghề AI Engineer. Công việc chính ở đó không phải viết prompt, mà là dựng bộ eval, chọn thước đo, tránh rò rỉ dữ liệu. Ai bỏ qua tầng này sẽ không biết fine-tuning có hiệu quả không.
Cuối cùng, công cụ AI coding viết được code ML trong vài giây. Nhưng chính vì vậy bạn càng phải hiểu: AI sẽ vui vẻ sinh ra đoạn code chấm điểm trên tập train, và bạn là người phát hiện model đang học tủ.
Lộ trình học machine learning cho người mới
Thứ tự tôi khuyên: Python và pandas cho vững, rồi thống kê cơ bản, rồi scikit-learn, rồi hai ba project nhỏ với dữ liệu thật. Sau đó mới sang deep learning. Đừng nhảy thẳng vào PyTorch.
Về toán, cần đủ để đọc hiểu, không cần chứng minh định lý. Ba chủ đề nên nắm: thống kê mô tả, xác suất cơ bản, vector và ma trận ở mức khái niệm.
Các vị trí tại Đà Nẵng thường mang tên Data Analyst, AI Engineer hoặc ML Engineer, và ít hơn hẳn vị trí web hay mobile. Thực tế phổ biến: ML là kỹ năng cộng thêm trong một vai trò rộng hơn. Vì vậy hãy giữ nghề chính backend hoặc data. Một kỳ thực tập IT với dữ liệu thật đáng giá hơn mười khóa online.
Câu hỏi thường gặp về machine learning
Machine learning có phải là AI không?
Machine learning là một nhánh của AI, không phải toàn bộ AI. AI bao gồm cả hệ thống chạy bằng luật logic viết tay. Ngược lại, mọi học máy đều thuộc AI. Thứ tự lồng nhau: AI chứa machine learning, machine learning chứa deep learning, deep learning chứa LLM như ChatGPT.
Machine learning khác deep learning như thế nào?
Deep learning là tập con của học máy, dùng mạng nơ-ron nhiều tầng và tự học feature từ dữ liệu thô. ML cổ điển cần người chọn feature, nhưng chạy tốt với ít dữ liệu và dễ giải thích hơn. Dữ liệu dạng bảng dùng ML cổ điển; ảnh và văn bản nghiêng về deep learning.
Học machine learning có cần giỏi toán không?
Không cần giỏi ở mức chứng minh định lý. Bạn cần hiểu khái niệm ở ba vùng: thống kê mô tả, xác suất cơ bản, vector và ma trận. Toàn bộ code trong bài không dùng đạo hàm nào. Toán sâu chỉ cần khi bạn đi vào nghiên cứu.
Sinh viên IT năm nhất đã học machine learning được chưa?
Được, nếu bạn viết được hàm, vòng lặp và danh sách trong Python. Bài hướng dẫn ở trên chỉ cần đúng mức đó. Nên tránh học ML trước khi Python vững, vì bạn sẽ mắc ở lỗi cú pháp thay vì hiểu khái niệm.
Machine learning có bị ChatGPT và các LLM thay thế không?
Không trong tương lai gần. LLM mạnh ở văn bản, code và hội thoại. Nhưng với dữ liệu dạng bảng, gradient boosting vẫn là mặc định vì rẻ, nhanh và giải thích được. Ngoài ra, tư duy đánh giá của ML chính là thứ AI Engineer dùng để kiểm chứng hệ thống LLM.
Ở Đà Nẵng có việc làm machine learning không?
Có, nhưng ít hơn web và mobile đáng kể. Các vị trí thường mang tên Data Analyst, AI Engineer hoặc ML Engineer tại các công ty IT và outsourcing. Thực tế phổ biến là ML đóng vai trò kỹ năng cộng thêm. Nên giữ nghề chính backend hoặc data.
Kết luận
Ba điều cần mang đi. Thứ nhất, machine learning là gì — là cách để máy tự tìm quy tắc từ dữ liệu. Thứ hai, bạn đã chạy được một chương trình ML thật và thấy overfitting bằng số. Thứ ba, sang 2026, machine learning cổ điển vẫn là nền của mọi vai trò AI.
Bước tiếp theo: chạy lại đoạn code Iris, đổi DecisionTreeClassifier thành RandomForestClassifier rồi so sánh accuracy.
Muốn đi từ bài Iris đến project có dữ liệu thật, có mentor chấm code? Xem lộ trình AI Coding tại CodeGym Đà Nẵng — học từ nền Python, mentor kèm từng project. Bước kế tiếp là bài deep learning là gì.





0 Lời bình