Trong bài viết này, tôi sẽ chỉ cho bạn cách sử dụng Máy học tự động (AutoML) để xây dựng bộ phân loại cho dữ liệu dạng bảng. Và đừng lo lắng – tôi sẽ giải thích tất cả các định nghĩa kỳ lạ 🙂
Sẽ không có bất kỳ toán học nào trong bài viết này (mặc dù tôi thích toán học, nó ngắn gọn). Tôi sẽ cố gắng trình bày mọi thứ theo cách mà bạn có thể hiểu rõ hơn về Machine Learning (và AutoML).
Điều đầu tiên trước tiên: Machine Learning là gì?
Máy học (ML) là một chủ đề rất rộng. Chúng ta có thể sử dụng định nghĩa của nó để giải thích nó là gì: dạy máy thực hiện một nhiệm vụ. Điều này rất giống với lập trình!
Sự khác biệt chính là trong lập trình, bạn cần cung cấp một công thức (mã) chính xác để cho máy biết nó sẽ hoạt động như thế nào. Trong Học máy bạn cũng cung cấp mã, nhưng mã đó sẽ cho máy biết cách học dựa trên các ví dụ trước đó (dữ liệu lịch sử).
Mã này sau đó được sử dụng để tạo một Mô hình học máy. Tất cả các hành động trong tương lai do máy thực hiện sẽ được mô hình tính toán.
Đây là một định nghĩa rất lỏng lẻo, nhưng bạn sẽ hiểu cơ bản về ML từ nó. Tôi đã chuẩn bị một số hình ảnh sơ đồ cho thấy cách thức hoạt động của lập trình so với Học máy. Tôi hy vọng họ sẽ giúp bạn hình dung sự khác biệt.


Trong các hình trên, bạn có thể thấy rằng lập trình thường đơn giản hơn nhiều so với Học máy (tổng số bước ít hơn và không cần dữ liệu lịch sử).
Và thường có cảm giác lập trình dễ hơn nhiều so với ML. Nhưng có những tình huống không thể cung cấp chương trình chính xác.
Ví dụ: nhiệm vụ phân loại hình ảnh – giả sử bạn muốn biết những gì trong hình ảnh dựa trên nội dung của nó. Không thể ghi hết các điều kiện để nhận biết cái gì trong một bức tranh (các bức tranh có thể có kích thước, tỷ lệ khác nhau…). Có thể dễ dàng nhìn thấy bằng mắt người, nhưng viết một chương trình chính xác là điều không thể.
Nhưng với ML, bạn có thể tạo một mô hình có thể nhận dạng hình ảnh. Vì vậy, hãy xem xét một số định nghĩa hơn.
phân loại
Phân loại là quá trình gán nhãn (lớp) cho một mẫu (một thể hiện của dữ liệu). Mô hình ML đang thực hiện phân loại được gọi là phân loại.
Dữ liệu dạng bảng
Dữ liệu dạng bảng chỉ đơn giản là dữ liệu ở định dạng bảng, tương tự như bảng tính. Các định dạng dữ liệu khác có thể là hình ảnh, video, văn bản, tài liệu hoặc âm thanh. Dữ liệu ở định dạng bảng có các hàng đại diện cho các mẫu (quan sát) và các cột đại diện cho các đối tượng địa lý.

Trong bài viết này, chúng tôi sẽ chỉ phân tích dữ liệu dạng bảng. Nhiệm vụ điển hình trong ML là dự đoán một trong các cột. Một cột như vậy được gọi là Mục tiêu cột.
Bộ dữ liệu Iris
Tôi sẽ chỉ cho bạn cách xây dựng mô hình Machine Leaning với AutoML trên tập dữ liệu rất đơn giản có tên là diên vĩ. Dữ liệu có thể được tải xuống từ nhiều nơi (nó là cùng một dữ liệu!):
Các diên vĩ tập dữ liệu chứa 150 hàng, trong đó mỗi hàng mô tả một bông hoa. Mỗi hàng có 4 đối tượng (cột) mô tả đặc điểm của hoa. Những tính năng này là:
- chiều dài lá đài (cm)
- chiều rộng lá đài (cm)
- chiều dài cánh hoa (cm)
- chiều rộng cánh hoa (cm)
Một nhãn (lớp) được gán cho mỗi bông hoa cho chúng ta biết đó là loại mống mắt nào. Trong tập dữ liệu này có 3 lớp:
- setosa
- nhiều màu
- trinh nữ
Hãy lấy hàng đầu tiên của dữ liệu. Chúng ta có:
- đài hoa dài = 5,1 cm
- đài hoa rộng = 3,5 cm
- chiều dài cánh hoa = 1,4 cm
- chiều rộng cánh hoa = 0,2 cm
- lớp = setosa
Hàng đầu tiên cho chúng ta biết rằng ai đó đã lấy loại mống mắt ‘setosa’, đo các đặc tính của đài hoa và cánh hoa của nó, rồi lưu nó vào tập dữ liệu.
Học máy ở đâu ở đây? Giả sử rằng chúng ta có một bộ hoa diên vĩ nhưng chúng ta không biết chúng thuộc loại (lớp) nào. Chúng ta biết cách đo chiều dài và chiều rộng của đài hoa và cánh hoa nhưng chúng ta không thể nói đó là loại hay lớp mống mắt nào.
Chúng ta có thể sử dụng Machine Learning để phân loại hoa dựa trên các biện pháp của chúng tôi. Mô hình ML sẽ lấy đầu vào là 4 số (số đo của chúng tôi) và sẽ xuất ra loại hoa.
Hãy viết mã!
Tôi sẽ sử dụng python trong hướng dẫn này. Vì vậy, tôi cho rằng bạn đã cài đặt python và biết cách cài đặt các gói.
Chúng tôi sẽ cần một vài gói và tất cả chúng sẽ được cài đặt với gói AutoML được giám sát bởi mljar. Để cài đặt nó chạy:
pip install mljar-supervised
Tất cả mã được trình bày trong bài viết này đều có sẵn trên github. Lúc đầu, hãy nhập các gói chúng tôi cần:
import pandas as pd
import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from supervised.automl import AutoML
Sau đó tải dữ liệu:
data = datasets.load_iris()
X = pd.DataFrame(data["data"], columns=data["feature_names"])
y = pd.Series(data["target"], name="target").map({i:v for i, v in enumerate(data["target_names"])})
Đây là cách dữ liệu của chúng tôi trông giống như:

X
Biến đổi ( print(X)
)
y
Biến đổi ( print(y)
)Chúng tôi sẽ chia dữ liệu của mình thành hai bộ riêng biệt:
- tàu hỏa – các mẫu sẽ được sử dụng để đào tạo mô hình Machine Learning
- kiểm tra – các mẫu mà chúng tôi sẽ sử dụng để kiểm tra xem mô hình Học máy của chúng tôi đang hoạt động như thế nào trên dữ liệu chưa nhìn thấy (trong quá trình đào tạo)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1)
Chúng tôi sẽ sử dụng 90% dữ liệu của mình để đào tạo (90%*150=135 mẫu) và 10% (15 mẫu) để thử nghiệm.
Bây giờ chúng ta đã có sẵn dữ liệu, chúng ta có thể huấn luyện mô hình Machine Learning. Có thể bạn đã nghe nói rằng có nhiều thuật toán ML. Tất cả chúng có thể được sử dụng để đào tạo mô hình, chẳng hạn như các mô hình sau:
- cây quyết định,
- Hồi quy logistic,
- rừng ngẫu nhiên,
- mạng lưới thần kinh,
- Xgboost,
chỉ để đặt tên cho một số ít.
Chúng ta nên sử dụng mô hình nào? Cái nào là tốt nhất?
Không có câu trả lời duy nhất cho các câu hỏi trên. Tất cả phụ thuộc vào chính dữ liệu. Cách tiếp cận phổ biến là kiểm tra càng nhiều càng tốt và chọn mô hình hoạt động tốt nhất. Rất thường các thuật toán đơn giản nhất rất tốt để bắt đầu.
Nhưng đây không phải là kết thúc của vấn đề của chúng tôi. Mỗi thuật toán thường có các tham số kiểm soát cách đào tạo mô hình. Họ được gọi là siêu tham số. Chúng nên được đặt cẩn thận cho thuật toán. Để chọn các giá trị của chúng, chúng ta cũng cần kiểm tra một vài trong số chúng.
Để chọn thuật toán và siêu tham số, chúng ta có thể sử dụng xác thực có thể được thực hiện theo nhiều cách khác nhau. Tôi sẽ không đi vào chi tiết xác nhận. Tôi sẽ chỉ cho bạn công cụ có thể xử lý tất cả các vấn đề trên. Nó là Học máy tự động (AutoML).
AutoML có thể kiểm tra nhiều thuật toán ML khác nhau và điều chỉnh các siêu tham số cho chúng. Nó sẽ tìm kiếm mô hình ML tốt nhất cho dữ liệu có sẵn.
Trong thực tế, AutoML được sử dụng để làm nhiều việc hơn nữa, chẳng hạn như kỹ thuật tính năng (chuẩn bị các tính năng để phân tích và xây dựng các tính năng mới) hoặc triển khai các mô hình dưới dạng API REST.
Tôi đang sử dụng AutoML
từ mljar-supervised
gói (trong đó tôi là tác giả). Nó có một giao diện rất đơn giản. Hãy đào tạo mô hình:
automl = AutoML(algorithms=["Decision Tree", "Linear", "Random Forest"],
total_time_limit=5*60)
automl.fit(X_train, y_train)
Hai dòng trên sẽ kiểm tra 3 thuật toán khác nhau cho chúng tôi: Cây quyết định, Hồi quy logistic và Rừng ngẫu nhiên. Sau đó, nó sẽ chọn một trong những tốt nhất. Có giới hạn thời gian được đặt thành 5 phút (5*60 giây) cho tổng thời gian đào tạo.
Kết quả của việc chạy AutoML
bạn sẽ nhận được đầu ra như thế này:
Create directory AutoML_1
AutoML task to be solved: multiclass_classification
AutoML will use algorithms: ['Decision Tree', 'Linear', 'Random Forest']
AutoML will optimize for metric: logloss
AutoML will try to check about 33 models
Decision Tree final logloss 0.5453226492448378 time 30.04 seconds
Decision Tree final logloss 0.6419811899692177 time 21.25 seconds
Decision Tree final logloss 0.4569697687554296 time 16.73 seconds
Linear final logloss 0.16507067466592637 time 15.68 seconds
Random Forest final logloss 0.11891177026579884 time 28.72 seconds
Random Forest final logloss 0.24256194594421207 time 28.73 seconds
Random Forest final logloss 0.2761028104749779 time 27.61 seconds
Random Forest final logloss 0.2536702528991272 time 29.0 seconds
Random Forest final logloss 0.1752405529204018 time 27.86 seconds
Random Forest final logloss 0.17394416017742964 time 27.69 seconds
Ensemble final logloss 0.11781603875353275 time 0.36 seconds
Kết quả chạy thử nghiệm AutoML này có sẵn trên github. Khi bạn nhìn vào thư mục được tạo bởi AutoML
bạn sẽ thấy README.md
tập tin. Nó chứa các báo cáo từ đào tạo:

Ngoài ra, bạn có thể kiểm tra từng mô hình được đào tạo bằng cách nhấp vào liên kết của nó:

Để tính toán dự đoán, chỉ cần chạy các dòng sau:
y_predicted = automl.predict(X_test)
print(pd.DataFrame({"Predicted": y_predicted["label"], "Target": np.array(y_test)}))
Bạn sẽ nhận được những điều sau đây:
Predicted Target
0 setosa setosa
1 virginica versicolor
2 versicolor versicolor
3 virginica virginica
4 versicolor versicolor
5 setosa setosa
6 setosa setosa
7 versicolor versicolor
8 setosa setosa
9 versicolor versicolor
10 virginica virginica
11 versicolor versicolor
12 virginica virginica
13 virginica virginica
14 versicolor versicolor
Từ những điều trên, bạn có thể thấy rằng có 1 lỗi trong các dự đoán (hàng có chỉ số 1). Lớp dự đoán mô hình ML virginica
nhưng nó nên được versicolor
. Độ chính xác của mô hình ML là:
Accuracy = 14 (correct answers) / 15 (total samples) = 93.33%
Tóm lược
Trong bài viết này tôi đã cho bạn thấy sự khác biệt giữa lập trình và Machine Learning. Tôi hy vọng bạn hiểu nó tốt hơn một chút.
Machine Learning là một chủ đề rất rộng và chắc chắn không thể trình bày hết trong một bài viết. Tuy nhiên, việc học và áp dụng ML có thể mang lại cho bạn rất nhiều sự hài lòng, vì vậy tôi khuyến khích mọi người khám phá thêm.
Máy học tự động cải thiện quy trình đào tạo mô hình bằng cách tự động hóa thuật toán và tìm kiếm siêu tham số. Tôi hy vọng rằng AutoML sẽ làm cho ML dễ tiếp cận hơn đối với nhiều nhà phát triển ngoài kia.
Nếu bạn có bất kỳ câu hỏi nào hoặc muốn đọc thêm các bài viết như thế này, vui lòng cho tôi biết.