HomeLập trìnhPythonCách thực hiện...

Cách thực hiện phân loại với Máy học tự động (AutoML)


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.

lập trình
Trong lập trình, con người cần cung cấp các bước (mã) chính xác để cho máy biết cách xử lý dữ liệu đầu vào.
ml
Trong Machine Learning, con người cần cung cấp mã và dữ liệu lịch sử để tạo Mô hình Machine Learning. Sau khi đào tạo Mô hình ML, nó có thể được sử dụng để tính toán kết quả đầu ra trên dữ liệu không nhìn thấy.

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.

Đọc thêm  Python Datetime.now() – Cách lấy ngày và giờ của ngày hôm nay

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ý.

dữ liệu dạng bảng_01
Ví dụ về dữ liệu dạng bảng (bộ dữ liệu Titanic).

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ư:

Đọc thêm  Đường dẫn Python – Cách sử dụng Mô-đun Pathlib với các ví dụ
hình ảnh-75
Các X Biến đổi ( print(X) )
hình ảnh-76
Các yBiế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.

Đọc thêm  Hàm Python – Cách xác định và gọi hàm

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:

hình ảnh-77

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ó:

hình ảnh-78

Để 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.



Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status