Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Trang Chủ Hướng Dẫn Đồ Án Tạo pipeline học máy đầy đủ từ raw data đến model
Hướng Dẫn Đồ ÁnLập Trình AI

Tạo pipeline học máy đầy đủ từ raw data đến model

Chia sẻ
Chia sẻ

Trong quy trình phát triển một mô hình học máy chuyên nghiệp, việc xây dựng một pipeline hoàn chỉnh từ dữ liệu gốc (raw data) đến mô hình cuối cùng là điều cực kỳ quan trọng. Không chỉ giúp tái sử dụng mã nguồn, pipeline còn giúp đảm bảo quy trình huấn luyện nhất quán, dễ dàng mở rộng, kiểm thử và triển khai thực tế.

Nếu bạn đã từng thực hiện phân tích cảm xúc như Phân tích cảm xúc Facebook bằng Python hay đã nắm được cách đánh giá mô hình qua Confusion Matrix, thì việc tự động hóa toàn bộ quy trình với pipeline sẽ giúp bạn nâng cấp kỹ năng đáng kể.

Chuẩn bị dữ liệu mẫu

Để minh họa, chúng ta sẽ sử dụng bộ dữ liệu nổi tiếng về bệnh tiểu đường: Pima Indians Diabetes Dataset. Dữ liệu này có thể tải từ nguồn công khai và rất phù hợp cho bài toán phân loại nhị phân.

Chúng ta sẽ tải dữ liệu bằng Pandas và kiểm tra các đặc trưng cơ bản trước khi xây dựng pipeline.

import pandas as pd
import numpy as np

url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv'
columns = ['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin',
           'BMI', 'DiabetesPedigreeFunction', 'Age', 'Outcome']
data = pd.read_csv(url, names=columns)
data.head()

Xử lý dữ liệu và tạo tập train/test

Trong dữ liệu y tế, một số giá trị bằng 0 như Glucose hoặc BMI có thể là dữ liệu bị thiếu. Ta sẽ thay thế chúng bằng giá trị trung vị. Sau đó, chia dữ liệu thành tập huấn luyện và kiểm thử.

from sklearn.model_selection import train_test_split

X = data.drop("Outcome", axis=1)
y = data["Outcome"]

# Cột có giá trị 0 bất hợp lý
zero_cols = ['Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI']
for col in zero_cols:
    X[col] = X[col].replace(0, np.nan)
    X[col] = X[col].fillna(X[col].median())

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

Xây dựng pipeline học máy hoàn chỉnh

Pipeline là chuỗi các bước xử lý dữ liệu và huấn luyện mô hình. Trong sklearn, bạn có thể dùng Pipeline để gói gọn toàn bộ quy trình vào một đối tượng duy nhất.

Ở đây, ta sẽ dùng pipeline gồm: chuẩn hóa dữ liệu (StandardScaler) + mô hình Logistic Regression.

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

pipeline = Pipeline([
    ('scaler', StandardScaler()),
    ('clf', LogisticRegression(max_iter=1000))
])

pipeline.fit(X_train, y_train)

Đánh giá mô hình từ pipeline

Sau khi pipeline đã được huấn luyện, bạn có thể sử dụng chính pipeline để dự đoán và đánh giá mô hình một cách đơn giản, thay vì phải xử lý từng bước riêng lẻ.

from sklearn.metrics import classification_report, accuracy_score

y_pred = pipeline.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred))

Bạn cũng có thể lưu pipeline bằng joblib để phục vụ triển khai thực tế.

import joblib
joblib.dump(pipeline, 'diabetes_pipeline.pkl')

Mở rộng pipeline với ColumnTransformer

Khi bạn có nhiều loại dữ liệu khác nhau (số, phân loại, boolean), bạn cần xử lý riêng từng loại. ColumnTransformer giúp bạn áp dụng nhiều pipeline con cho từng cột khác nhau.

Ví dụ dưới đây sẽ phân biệt giữa cột số và cột phân loại, rồi áp dụng chuẩn hóa và one-hot encoding tương ứng.

from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
from sklearn.ensemble import RandomForestClassifier

# Ví dụ đơn giản (giả sử có cột phân loại 'Gender')
X['Gender'] = np.random.choice(['Male', 'Female'], size=len(X))

numeric_features = X.select_dtypes(include=['int64', 'float64']).columns.tolist()
categorical_features = ['Gender']

preprocessor = ColumnTransformer(
    transformers=[
        ('num', StandardScaler(), numeric_features),
        ('cat', OneHotEncoder(), categorical_features)
    ])

full_pipeline = Pipeline([
    ('preprocess', preprocessor),
    ('classifier', RandomForestClassifier())
])

full_pipeline.fit(X_train.assign(Gender=X['Gender']), y_train)

Kết luận

Pipeline là một phần thiết yếu để triển khai hệ thống học máy thực tế. Nó giúp chuẩn hóa toàn bộ quy trình xử lý dữ liệu và mô hình hóa thành một khối thống nhất, dễ quản lý và tối ưu.

Với PipelineColumnTransformer, bạn có thể dễ dàng xử lý dữ liệu số, phân loại, đưa vào huấn luyện, đánh giá, lưu mô hình, và mở rộng hệ thống về sau mà không cần viết lại logic thủ công cho từng bước. Nếu bạn cần triển khai mô hình này thành REST API hoặc dùng trong ứng dụng thực tế, mình có thể viết tiếp phần tiếp theo ngay.

Tham Gia Nhóm – Hỗ Trợ Lập Trình

Hỗ Trợ Đồ Án – ThueDoAn.vn

Liên quan
Hướng Dẫn Đồ Án

Checklist 10 bước kiểm tra cuối cùng trước khi nhấn nút nộp đồ án

Thời điểm chuẩn bị nhấn nút nộp đồ án luôn mang lại...

Hướng Dẫn Đồ Án

Tuyệt chiêu đối phó với những giảng viên hướng dẫn ‘khó tính’ nhất

Giai đoạn làm đồ án tốt nghiệp luôn đi kèm với vô...

Hướng Dẫn Đồ Án

Tại sao việc quản lý Source Code bằng Git lại quan trọng hơn bạn nghĩ?

Trong thế giới lập trình hiện đại, mã nguồn chính là linh...

Hướng Dẫn Đồ Án

Những chức năng ‘thừa’ khiến bạn tốn thời gian mà không được cộng điểm

Làm đồ án tốt nghiệp là một cuộc đua thực thụ với...

Hướng Dẫn Đồ Án

Cách xử lý khi đề tài bị trùng lặp ý tưởng với các khóa trước quá nhiều

Lựa chọn đề tài đồ án luôn là bước khởi đầu đầy...

Hướng Dẫn Đồ Án

Làm sao để giải trình với giảng viên khi code bị nghi ngờ là đi chép?

Trong quá trình thực hiện đồ án, việc tham khảo mã nguồn...

Hướng Dẫn Đồ Án

Cảnh báo: Những nguồn share code ‘rác’ trên mạng cần tuyệt đối tránh

Trong quá trình làm đồ án, việc tìm kiếm sự hỗ trợ...

Hướng Dẫn Đồ Án

Sai lầm khi chọn công nghệ quá khó so với năng lực thực tế của bản thân

Chọn đề tài và công nghệ cho đồ án luôn là bước...

Liên Hệ
Liên hệ để được tư vấn & hỗ trợ đồ án CNTT nhé bạn!