Cách chuẩn hóa dữ liệu: Hướng dẫn đầy đủ kèm ví dụ
Ngăn gradient biến mất và mô hình thiên lệch. Tìm hiểu cách chuẩn hóa dữ liệu bằng min-max và z-score trong Scikit-learn để cải thiện mô hình machine learning.
Một mạng nơ-ron mãi không chịu hội tụ, loss phẳng lì và gradient thì hoặc biến mất hoặc bùng nổ, thường hóa ra không hề có vấn đề gì với kiến trúc của nó. Vấn đề thường đơn giản hơn nhiều: các đặc trưng đầu vào nằm trên các thang đo hoàn toàn khác nhau, khi một cột dao động từ 0 đến 1 còn cột khác lên tới hàng chục nghìn.
Theo kinh nghiệm của tôi, mẫu hình này xuất hiện liên tục trong thực tế. Năm phút tiền xử lý có thể giải quyết điều mà nhiều ngày tinh chỉnh siêu tham số không làm được.
Trong hướng dẫn này, tôi sẽ chỉ bạn cách chuẩn hóa dữ liệu. Tôi sẽ đi qua các kỹ thuật chuẩn hóa khác nhau, khi nào nên dùng từng kỹ thuật, kèm triển khai Python. Ngoài ra, bạn sẽ học về các sai lầm và hiểu lầm thường gặp cùng cách tránh chúng.
Chuẩn hóa dữ liệu đề cập đến quá trình biến đổi các đặc trưng số sao cho chúng có phạm vi so sánh được hoặc tuân theo một thang đo nhất quán.
Thuật ngữ này mang nghĩa khác nhau tùy ngữ cảnh: trong machine learning, nó thường nghĩa là đưa giá trị đặc trưng về cùng thang đo để tránh độ lớn chi phối tầm quan trọng; còn trong thiết kế cơ sở dữ liệu, nó nói về tổ chức bảng để loại bỏ dư thừa.
Tôi sẽ tập trung chủ yếu vào nghĩa trong machine learning, dù chúng ta sẽ lướt qua chuẩn hóa cơ sở dữ liệu sau đó để làm rõ chồng lấn từ vựng.
Vì sao chuẩn hóa dữ liệu quan trọng
Khi các đặc trưng tồn tại trên các thang đo khác nhau, một số thuật toán sẽ gán trọng số quá mức cho những giá trị lớn hơn về mặt số học.
Một đặc trưng đo thu nhập theo nghìn sẽ lấn át đặc trưng đo tuổi theo thập kỷ, không phải vì thu nhập quan trọng hơn cho bài toán dự đoán, mà chỉ vì các con số lớn hơn. Chuẩn hóa đặt các đặc trưng lên vị thế ngang bằng để mô hình học được cái nào thực sự quan trọng.
Ngoài huấn luyện mô hình, chuẩn hóa còn hữu ích cho:
kết hợp các phép đo dùng đơn vị khác nhau
tích hợp dữ liệu từ nhiều nguồn với quy ước không nhất quán
thiết kế lược đồ cơ sở dữ liệu cần duy trì tính nhất quán theo thời gian.
Chuẩn hóa dữ liệu vs. scaling vs. standardization
Vậy, sự khác biệt giữa normalization, scaling và standardization là gì? Ba thuật ngữ này thường xuất hiện trong tài liệu và hay được dùng lẫn lộn dù có ý nghĩa riêng.
Khác biệt thực tế nằm ở việc mô hình của bạn có cần giá trị trong các giới hạn cụ thể hay không. Chuẩn hóa min-max đảm bảo cận trên/dưới, còn standardization thì không. Bảng sau tóm tắt khác biệt:
Thuật ngữ
Tác dụng
Miền đầu ra
Phù hợp nhất cho
Scaling
Thuật ngữ chung cho mọi biến đổi phạm vi
Khác nhau
Danh mục bao trùm
Normalization (min-max)
Nén vào các cận cố định
Thường 0 đến 1
Dữ liệu có cận, mạng nơ-ron kỳ vọng khoảng đầu vào cụ thể
Standardization (z-score)
Tâm tại trung bình 0, tỉ lệ theo độ lệch chuẩn 1
Không bị chặn (có thể âm)
Dữ liệu không bị chặn, thuật toán giả định phân phối xấp xỉ chuẩn
Giờ khi đã thống nhất thuật ngữ, hãy xem vài trường hợp kinh điển. Chuẩn hóa phục vụ các mục đích khác nhau tùy bối cảnh sử dụng, từ cải thiện động lực huấn luyện mô hình đến cho phép so sánh có ý nghĩa giữa các nguồn dữ liệu không đồng nhất.
Khi độ lớn đặc trưng khác biệt đáng kể, gradient thu được cũng vậy: đặc trưng lớn tạo gradient lớn, đặc trưng nhỏ tạo gradient nhỏ. Sự mất cân bằng này khiến bộ tối ưu hóa bước rất lớn theo một số hướng trong khi gần như không di chuyển theo hướng khác, dẫn tới huấn luyện bất ổn hoặc không hội tụ.
Các thuật toán dựa trên khoảng cách như kNN và K-means gặp vấn đề liên quan. Chúng tính độ tương đồng bằng các thước đo khoảng cách, thường là khoảng cách Euclid, nơi các giá trị số lớn đóng góp nhiều hơn đơn giản vì chúng lớn hơn. Một đặc trưng trải từ 0 đến 10.000 sẽ lấn át đặc trưng trải từ 0 đến 1, bất kể đặc trưng nào thực sự quan trọng cho tác vụ dự đoán.
Scaling đảm bảo mọi đặc trưng đóng góp theo tỷ lệ với giá trị dự đoán thực sự của chúng thay vì phạm vi số học tùy ý.
Cho phép so sánh công bằng giữa các đặc trưng
Khi xây dựng điểm tổng hợp hoặc kết hợp các phép đo với đơn vị khác nhau, giá trị thô có thể dẫn tới so sánh sai lệch.
Một chỉ số sức khỏe khách hàng kết hợp chi tiêu hàng tháng bằng đô-la, tần suất đăng nhập theo số đếm và tuổi tài khoản theo ngày sẽ mặc nhiên đặt nặng số tiền đô-la chỉ vì các con số này lớn hơn.
Chuẩn hóa cho phép bạn kết hợp các phép đo theo cách phản ánh tầm quan trọng thực sự của chúng thay vì độ lớn tình cờ.
Điều này cũng áp dụng cho phân tích thăm dò và trực quan hóa. Vẽ các đặc trưng trên thang đo khác nhau khiến khó phát hiện mẫu hình hoặc so sánh phân phối. Dữ liệu đã chuẩn hóa cho bức tranh rõ ràng hơn về cách các đặc trưng liên hệ với nhau.
Cải thiện chất lượng và tính toàn vẹn dữ liệu
Pipeline sản xuất thường lấy từ nhiều nguồn dữ liệu với quy ước không nhất quán. Doanh thu có thể được báo cáo bằng đô-la ở một hệ thống và theo nghìn ở hệ thống khác. Ngày tháng xuất hiện dưới dạng Unix timestamp ở một API và chuỗi định dạng ở API khác.
Thiết lập thang đo và định dạng nhất quán trước khi xử lý hạ lưu ngăn các lỗi tinh vi khó chẩn đoán về sau.
Trong ngữ cảnh cơ sở dữ liệu, chuẩn hóa mang ý nghĩa khác nhưng liên quan: tổ chức bảng sao cho mỗi thông tin chỉ tồn tại ở đúng một nơi.
Điều này ngăn bất thường khi cập nhật, nơi thay đổi giá trị ở một chỗ để lại giá trị mâu thuẫn ở nơi khác. Dù kỹ thuật khác với scaling đặc trưng, động cơ cơ bản tương tự: giữ dữ liệu nhất quán và dễ dự đoán.
Các kỹ thuật chuẩn hóa dữ liệu phổ biến
Mỗi cách tiếp cận chuẩn hóa đưa ra giả định khác nhau về dữ liệu và tạo ra đặc tính đầu ra khác nhau. Lựa chọn đúng phụ thuộc vào phân phối dữ liệu, sự hiện diện của ngoại lệ, và kỳ vọng của mô hình hạ lưu.
Chuẩn hóa min-max
Chuẩn hóa min-max nén giá trị vào một phạm vi cố định, thường là 0 đến 1, bằng cách trừ đi giá trị nhỏ nhất và chia cho khoảng. Cách này giữ nguyên hình dạng phân phối gốc đồng thời đảm bảo mọi giá trị nằm trong cận đã biết.
Cách hoạt động: Trừ giá trị nhỏ nhất, chia cho khoảng. Hết.
Tác dụng:
Đảm bảo đầu ra nằm trong cận xác định
Giữ nguyên hình dạng phân phối gốc — chỉ thay đổi tỉ lệ
Không trở thành sàn, một trở thành trần
Phù hợp nhất cho:
Cường độ điểm ảnh (luôn 0-255 theo định nghĩa)
Xác suất và phần trăm
Điểm thi, đánh giá, mọi thứ có sàn và trần tự nhiên
Mạng nơ-ron kỳ vọng đầu vào bị chặn, như bộ phân loại ảnh
Cần lưu ý:
Ngoại lệ có thể phá hỏng hoàn toàn chuẩn hóa min-max. Hãy tưởng tượng dữ liệu chủ yếu nằm giữa 10 và 100, nhưng có một giá trị 99.999? Chỉ một điểm đó kéo giãn khoảng của bạn đến mức mọi giá trị bình thường bị nén vào một lát mỏng gần 0. Một quan sát xấu, cả đặc trưng bị hỏng.
Cũng xem xét điều gì xảy ra khi dữ liệu mới nằm ngoài khoảng huấn luyện. Giá trị kiểm thử vượt quá cực đại huấn luyện sẽ cho đầu ra lớn hơn 1. Việc đó có phá vỡ gì hay không phụ thuộc vào mô hình của bạn.
Chuẩn hóa Z-score
Z-score standardization biến đổi dữ liệu sao cho trung bình bằng 0 và độ lệch chuẩn bằng 1, mà không áp đặt cận cố định lên đầu ra. Cách này phù hợp với dữ liệu không có giới hạn tự nhiên rõ ràng và thường được giả định hoặc khuyến nghị bởi nhiều triển khai thuật toán.
Cách hoạt động: Trừ trung bình, chia cho độ lệch chuẩn.
Tác dụng:
Đặt lại tâm sao cho giá trị trung bình bằng 0
Chuẩn hóa sao cho một độ lệch chuẩn bằng một đơn vị
Đầu ra có thể âm, có thể vượt mọi cận cụ thể
Phù hợp nhất cho:
Dữ liệu không có giới hạn tự nhiên rõ ràng
Phân phối xấp xỉ hình chuông
Thuật toán giả định hoặc khuyến nghị standardization (đa số tutorial mạng nơ-ron, triển khai hồi quy logistic)
Khi bạn chưa chắc dùng gì (mặc định hợp lý)
Đánh đổi:
Tính dễ hiểu giảm đi. "Quan sát này cao hơn trung bình 1,7 độ lệch chuẩn" đòi hỏi suy nghĩ nhiều hơn so với "điều này ở mức 80% của khoảng". Nếu các bên liên quan cần hiểu trực tiếp giá trị đã scale, min-max có thể truyền đạt tốt hơn.
Ngoại lệ vẫn làm phồng trung bình và độ lệch chuẩn, bóp méo scaling cho phần lớn dữ liệu, nhưng ít vấn đề hơn so với chuẩn hóa min-max.
Robust scaling
Robust scaling giải quyết độ nhạy với ngoại lệ của cả min-max và z-score bằng cách dùng trung vị và khoảng tứ phân vị (IQR) thay vì trung bình và độ lệch chuẩn. Các thống kê này vẫn ổn định bất kể các giá trị cực trị ở đuôi phân phối.
Cách hoạt động: Trừ trung vị, chia cho IQR (khoảng giữa phần trăm vị thứ 25 và 75).
Tác dụng:
Scale dựa trên phần lõi ở giữa của dữ liệu, bỏ qua cực trị
Các đuôi có thể làm gì thì làm mà không làm méo biến đổi cho giá trị điển hình
Ổn định hơn khi dữ liệu có ngoại lệ hợp lệ mà bạn không thể loại bỏ
Phù hợp nhất cho:
Giao dịch tài chính, nơi hầu hết mua sắm là nhỏ nhưng thỉnh thoảng có giao dịch giá trị cao hợp lệ
Dữ liệu thu nhập, có xu hướng đuôi phải dài
Đọc cảm biến nơi các đỉnh phản ánh sự kiện thực
Phân phối rất lệch và tình huống mà cách tiếp cận dựa trên trung bình bị lôi kéo bởi giá trị cực trị
Vì sao hữu ích với dữ liệu lệch:
Phân phối thu nhập là ví dụ tốt. Phần lớn mọi người kiếm mức vừa phải, và một số kiếm mức khổng lồ: điển hình lệch phải. Độ lệch chuẩn bị phồng lên bởi nhóm thu nhập cao, khiến standardization kém hữu ích cho đa số quan sát. Trung vị và IQR vẫn bám chắc phần giữa của phân phối bất chấp đuôi.
Chuẩn hóa vector chuẩn đơn vị
Chuẩn đơn vị (L1/L2) hoạt động khác với các kỹ thuật trên: thay vì scale theo đặc trưng (cột), nó thường scale theo mẫu (hàng). Mỗi vector mẫu được đưa về độ dài 1 theo một chuẩn đã chọn (thường là L2), từ đó loại bỏ độ lớn tổng thể và chỉ giữ hướng/tỷ lệ.
Đừng nhầm với regularization L1/L2 (Lasso/Ridge): regularization sửa mục tiêu huấn luyện bằng cách thêm phạt lên trọng số mô hình để giảm overfitting, không phải bằng cách scale vector đầu vào.
Cách hoạt động: Trong L2, mỗi hàng được chia cho chuẩn Euclid của nó, sao cho tổng bình phương bằng một. L1 dùng tổng giá trị tuyệt đối thay thế.
Tác dụng:
Loại bỏ độ lớn khỏi phương trình
Biến các hàng trở nên so sánh được theo tỷ lệ thay vì kích thước thô
Góc giữa các vector trở thành tín hiệu; độ dài vector trở nên không liên quan
Phù hợp nhất cho:
Dữ liệu văn bản biểu diễn dưới dạng vector đếm từ: một báo cáo 50.000 từ tự nhiên có số đếm lớn hơn email 500 từ, nhưng L2 cho phép so sánh theo tỷ lệ nội dung
Mọi thứ liên quan đến cosine similarity
Phân loại tài liệu, truy hồi thông tin, và hệ gợi ý dựa trên nội dung
Không hữu ích cho:
Tình huống độ lớn thực sự quan trọng. Nếu tổng số từ có ý nghĩa cho tác vụ của bạn, chuẩn hóa nó đi sẽ làm mất thông tin.
Chuẩn hóa cơ sở dữ liệu
Chuẩn hóa cơ sở dữ liệu đề cập đến tái cấu trúc các bảng quan hệ để loại bỏ dư thừa và cải thiện tính toàn vẹn dữ liệu — ví dụ, đảm bảo email của khách hàng chỉ lưu một nơi thay vì lặp lại trong mọi bản ghi đơn hàng.
Nó không liên quan đến scaling đặc trưng.
Chỉ là trùng thuật ngữ. Trong machine learning, "normalization" gần như luôn ám chỉ scale giá trị số. Trong kỹ thuật dữ liệu hay SQL, nó ám chỉ tổ chức cấu trúc bảng (thường bàn về 1NF, 2NF, hoặc 3NF).
Khác biệt chính:
Chuẩn hóa đặc trưng (ML): Biến đổi con số (ví dụ, scale 0–1) để giúp mô hình học.
Chuẩn hóa CSDL (SQL): Tổ chức schema để ngăn trùng lặp dữ liệu.
Nếu một kỹ sư dữ liệu bảo bạn "chuẩn hóa cơ sở dữ liệu", họ muốn bạn sửa cấu trúc bảng, không phải chạy MinMaxScaler.
Triển khai chuẩn hóa đúng cần chú ý đến thứ tự thao tác, đặc biệt quanh việc tách train/test. Bản thân mã thì đơn giản, nhưng các lỗi tinh vi về trình tự có thể làm vô hiệu toàn bộ đánh giá của bạn.
Chuẩn hóa dữ liệu trong Python
Scikit-learn cung cấp các scaler, nhưng quy tắc chính là về thủ tục, không phải toán học: tách trước, fit chỉ trên train, rồi tái sử dụng transformer đã fit ở mọi nơi khác.
Vì sao phải cẩn thận? Bởi scaling học các con số từ dữ liệu: min/max, mean/std, median/IQR. Nếu các con số đó được tính bằng cách dùng tập kiểm thử, bạn đã âm thầm để thông tin tương lai rò rỉ vào huấn luyện. Không có gì sập, nhưng số đo của bạn không còn mang ý nghĩa như bạn nghĩ.
Ví dụ tối giản:
import pandas as pd
from sklearn.preprocessing import MinMaxScaler, StandardScaler, RobustScaler
from sklearn.model_selection import train_test_split
# Example data
data = pd.DataFrame({'age':[25,32,47,51,62,28,35,44],'income':[30000,45000,72000,85000,120000,38000,55000,67000],'score':[0.2,0.5,0.7,0.4,0.9,0.3,0.6,0.8]})# Split happens before any scaling
train_data, test_data = train_test_split(data, test_size=0.25, random_state=42)Được hỗ trợ bởi
Tại thời điểm này, bạn coi train là “thế giới trông như thế nào khi tôi xây dựng mô hình.” Test là “dữ liệu mới, chưa từng thấy.” Scaler của bạn cần học về thế giới từ phần thứ nhất mà thôi.
MinMaxScaler
Chuẩn hóa min-max rất đơn giản: nó lưu giá trị nhỏ nhất và lớn nhất của mỗi cột trong huấn luyện, rồi áp dụng ánh xạ đó sau này.
scaler = MinMaxScaler()
scaler.fit(train_data)# training only
train_scaled = scaler.transform(train_data)
test_scaled = scaler.transform(test_data)Được hỗ trợ bởi
Nếu bạn thấy mình gọi fit() trên tập kiểm thử, hãy dừng lại. Điều đó phá hỏng mục đích giữ lại tập test ngay từ đầu.
StandardScaler
StandardScaler lưu trung bình và độ lệch chuẩn từ train, rồi dùng các giá trị đó để biến đổi cả train và test.
Dấu hiệu thực tế cho thấy robust scaling đáng dùng: bạn có đuôi dài muốn giữ lại (thanh toán, bồi thường, đỉnh cảm biến), và bạn không muốn một ngày kỳ lạ bóp phần còn lại của đặc trưng về gần 0.
Tính nhanh bằng pandas
Cho công việc thăm dò nhanh, tính trực tiếp bằng pandas là ổn, miễn là bạn trung thực về mục đích: đây là để nhìn phân phối, không phải để đánh giá mô hình.
Nguy cơ ở đây: các thống kê dựa trên toàn bộ tập dữ liệu. Làm việc này trước khi tách, và giá trị test sẽ ảnh hưởng đến biến đổi. Đánh giá mất ý nghĩa vì tiền xử lý đã nhìn trộm vào đáp án mà nó không nên thấy.
Mẫu hình rò rỉ thường như sau:
Làm sai cách:
scaler = MinMaxScaler()
scaled_all = scaler.fit_transform(full_data)# problem
train, test = split(scaled_all)Được hỗ trợ bởi
Cách này chuẩn hóa dữ liệu trước khi tách, nên dữ liệu test đã ảnh hưởng đến biến đổi.
Làm đúng cách:
Bằng cách tách dữ liệu trước, ta đảm bảo scaler học thống kê chỉ từ tập train, giữ cho tập test thực sự chưa từng thấy.
Như đã nói, chúng ta có những nghĩa khác nhau của cùng một từ. Ở đây, “chuẩn hóa” không phải biến đổi số. Nó là quyết định cấu trúc để ngừng lặp lại sự thật.
Nếu bảng orders của bạn lưu customer_email trên mọi dòng, cơ sở dữ liệu sẽ cho phép. Cơ sở dữ liệu cũng sẽ vui vẻ chấp nhận mâu thuẫn sau này: một email ở dòng này, email khác ở dòng kia, và không có cách hiển nhiên để biết cái nào “thật”.
Thông tin khách hàng tồn tại một lần. Truy vấn cần join, nhưng cập nhật chỉ diễn ra ở một chỗ.
Cách chọn kỹ thuật chuẩn hóa phù hợp
Cuối cùng, tôi muốn đưa cho bạn khung ra quyết định cho lần tới khi bạn băn khoăn nên dùng kỹ thuật chuẩn hóa nào.
Min-max khi tồn tại cận
Scale min-max hoạt động tốt nhất khi dữ liệu của bạn có cận đã biết, ổn định và sẽ không thay đổi giữa huấn luyện và triển khai. Giá trị pixel luôn nằm giữa 0 và 255. Điểm xác suất không thể vượt quá 1. Điểm thi có điểm tối thiểu và tối đa xác định.
Cách này cũng phù hợp khi mô hình của bạn cụ thể kỳ vọng đầu vào bị chặn, như một số kiến trúc mạng nơ-ron. Tuy nhiên, tránh scale min-max khi có ngoại lệ, vì một giá trị cực trị có thể nén mọi quan sát bình thường vào dải hẹp gần 0.
Standardization như phương án dự phòng
Standardization là mặc định hợp lý khi bạn không có giả định mạnh về cận hay phân phối của dữ liệu. Nó hoạt động tốt cho các đặc trưng có phạm vi khác nhau, giới hạn không rõ, hoặc phân phối xấp xỉ hình chuông.
Nhiều triển khai thuật toán giả định hoặc khuyến nghị đầu vào đã standardize, bao gồm hầu hết framework mạng nơ-ron và thư viện hồi quy logistic. Nếu bạn không chắc nên dùng cách nào và dữ liệu không có cận tự nhiên rõ ràng, standardization thường là lựa chọn an toàn.
Robust cho sự lộn xộn đời thực
Robust scaling trở thành lựa chọn đúng khi dữ liệu có nhiều ngoại lệ đại diện cho giá trị hợp lệ chứ không phải lỗi. Dữ liệu giao dịch tài chính thường có đặc điểm này: hầu hết giao dịch nhỏ, nhưng các khoản lớn thỉnh thoảng là thật và nên giữ lại trong tập dữ liệu.
Phân phối thu nhập, đọc cảm biến với các đỉnh thỉnh thoảng, và mọi dữ liệu có độ lệch nặng hoặc đuôi dài đều hưởng lợi từ robust scaling. Trung vị và IQR vẫn bám phần lõi của phân phối bất kể chuyện gì xảy ra ở cực trị.
Khi nào không nên chuẩn hóa
Các mô hình dựa trên cây như random forests, XGBoost và gradient boosted trees chia tách theo ngưỡng và không bao giờ tính khoảng cách hay gradient giữa các đặc trưng. Thang đo là vô hình với chúng, nên chuẩn hóa chỉ thêm phức tạp mà không mang lại lợi ích.
Các đặc trưng one-hot đã là nhị phân (0 và 1), nên scale chúng không mang lại điều gì hữu ích. Bộ dữ liệu chỉ có biến phân loại cũng tương tự.
Đôi khi, biến đổi theo miền chuyên môn hiệu quả hơn chuẩn hóa chung:
Log scaling nén đuôi phải dài đồng thời giãn các giá trị nhỏ bị dồn lại, thường hiệu quả hơn cho dữ liệu thu nhập hoặc giá so với cách tiếp cận tiêu chuẩn.
Chia bin hợp lý khi tư cách nhóm quan trọng hơn giá trị số chính xác.
Biến đổi lũy thừa giúp ổn định phương sai trong tình huống cụ thể.
Bảng so sánh tóm tắt
Dưới đây là tổng quan về các kỹ thuật và trường hợp sử dụng:
Kỹ thuật
Dùng khi
Tránh khi
Miền đầu ra
Min-max
Dữ liệu có cận đã biết; mô hình kỳ vọng đầu vào bị chặn
Có ngoại lệ; cận có thể thay đổi
0 đến 1 (cố định)
Standardization
Cận không rõ; phân phối xấp xỉ chuẩn; chưa chắc dùng gì
Cần cận đảm bảo; ngoại lệ nặng
Không bị chặn
Robust scaling
Ngoại lệ đáng kể; phân phối lệch; đuôi dài
Dữ liệu đã sạch và đối xứng
Không bị chặn
Chuẩn hóa L1/L2
Dữ liệu văn bản; cosine similarity; không gian chiều cao
Độ lớn mang ý nghĩa
Vector đơn vị
Không dùng
Mô hình cây; đặc trưng one-hot; có biến đổi theo miền chuyên môn
Mô hình dựa trên gradient hoặc khoảng cách
Gốc
Kết luận
Khác biệt về thang đo gây rắc rối thực sự cho các mô hình quan tâm đến chúng. Thước đo khoảng cách thiên vị các đặc trưng có độ lớn lớn. Gradient descent gặp khó khi gradient chênh nhau hàng bậc độ lớn. Huấn luyện dừng lại hoặc bùng nổ vì những lý do không hiển nhiên khi nhìn vào mã hay kiến trúc.
Chuẩn hóa giải quyết điều đó. Dùng chuẩn hóa min-max cho dữ liệu có cận, robust scaling khi ngoại lệ là thật và không thể loại bỏ, và standardization như mặc định hợp lý. Cơ chế thì đơn giản: fit trong huấn luyện, áp dụng thống nhất ở mọi nơi.
Theo kinh nghiệm của tôi, thứ tốn thời gian là không nhận ra khi nào scaling quan trọng, rồi gỡ lỗi hành vi mô hình suốt nhiều ngày trong khi câu trả lời nằm ở tiền xử lý. Hoặc sai lầm ngược lại, như áp dụng scaling một cách máy móc cho các mô hình không quan tâm, thêm phức tạp mà không có lợi.
Sẵn sàng nâng tầm? Lộ trình Machine Learning Engineer toàn diện của chúng tôi dạy bạn mọi điều cần biết về quy trình làm việc machine learning.
Câu hỏi thường gặp về chuẩn hóa dữ liệu
Sự khác nhau giữa normalization và standardization là gì?⌄
Dù các thuật ngữ thường được dùng thay thế cho nhau trong tài liệu, chúng ám chỉ các kỹ thuật khác biệt. Chuẩn hóa (cụ thể là Min-Max scaling) thường liên quan đến việc đưa dữ liệu về một khoảng cố định, thường là 0 - 1. Standardization (Z-score normalization) biến đổi dữ liệu sao cho có trung bình 0 và độ lệch chuẩn 1.
Có phải mọi mô hình machine learning đều cần scale dữ liệu không?⌄
Không. Các thuật toán dựa trên tính khoảng cách (như K-Nearest Neighbors) hoặc gradient descent (như Mạng nơ-ron) cần scaling để hoạt động đúng. Tuy nhiên, các mô hình dựa trên cây như Random Forests và XGBoost xử lý từng đặc trưng dựa trên quy tắc chia tách và thường bất biến với scaling.
Ở giai đoạn nào trong pipeline tôi nên fit scaler?⌄
Bạn phải fit scaler chỉ trên dữ liệu huấn luyện, cụ thể là sau khi tách train-test. Nếu fit scaler trên toàn bộ dữ liệu trước khi tách, thông tin từ tập test sẽ ảnh hưởng đến quá trình huấn luyện, dẫn đến chỉ số đánh giá gây hiểu lầm.
Hậu quả của việc bỏ qua chuẩn hóa là gì?⌄
Ảnh hưởng thay đổi theo thuật toán. Mạng nơ-ron có thể gặp khó hội tụ, dẫn đến huấn luyện thất thường hoặc thất bại hoàn toàn. K-Nearest Neighbors (KNN) sẽ cho kết quả thiên lệch vì thuật toán sẽ đặt nặng các đặc trưng có độ lớn lớn (ví dụ, lương) hơn nhiều so với đặc trưng có độ lớn nhỏ (ví dụ, tuổi).
Có tình huống nào việc scale phản tác dụng không?⌄
Có. Nếu tập dữ liệu của bạn có nhiều ngoại lệ, chuẩn hóa Min-Max có thể nén phần lớn dữ liệu “bình thường” vào một khoảng rất nhỏ và gần như triệt tiêu mọi phương sai hữu ích. Ngoài ra, scaling thường không cần thiết cho các đặc trưng phân loại đã được one-hot encode, vì chúng vốn đã là nhị phân (0 và 1).
Josep là một Nhà khoa học dữ liệu tự do chuyên về các dự án châu Âu, có chuyên môn về lưu trữ dữ liệu, xử lý, phân tích nâng cao và kể chuyện bằng dữ liệu tạo tác động.
Với vai trò giảng dạy, anh phụ trách môn Dữ liệu lớn trong chương trình Thạc sĩ tại Đại học Navarra và chia sẻ góc nhìn qua các bài viết trên các nền tảng như Medium, KDNuggets và DataCamp. Josep cũng viết về Dữ liệu và Công nghệ trong bản tin Databites (databites.tech).
Anh có bằng Cử nhân Vật lý Kỹ thuật từ Đại học Bách khoa Catalonia và bằng Thạc sĩ Hệ thống Tương tác Thông minh từ Đại học Pompeu Fabra.
Một mạng nơ-ron mãi không chịu hội tụ, loss phẳng lì và gradient thì hoặc biến mất hoặc bùng nổ, thường hóa ra không hề có vấn đề gì với kiến trúc của nó. Vấn đề thường đơn giản hơn nhiều: các đặc trưng đầu vào nằm trên các thang đo hoàn toàn khác nhau, khi một cột dao động từ 0 đến 1 còn cột khác lên tới hàng chục nghìn.
Theo kinh nghiệm của tôi, mẫu hình này xuất hiện liên tục trong thực tế. Năm phút tiền xử lý có thể giải quyết điều mà nhiều ngày tinh chỉnh siêu tham số không làm được.
Trong hướng dẫn này, tôi sẽ chỉ bạn cách chuẩn hóa dữ liệu. Tôi sẽ đi qua các kỹ thuật chuẩn hóa khác nhau, khi nào nên dùng từng kỹ thuật, kèm triển khai Python. Ngoài ra, bạn sẽ học về các sai lầm và hiểu lầm thường gặp cùng cách tránh chúng.
Nếu bạn muốn tìm hiểu thêm về cách chuẩn bị dữ liệu cho các thuật toán machine learning, tôi khuyến nghị khóa học Preprocessing for Machine Learning in Python của chúng tôi.
Chuẩn hóa dữ liệu là gì?
Chuẩn hóa dữ liệu đề cập đến quá trình biến đổi các đặc trưng số sao cho chúng có phạm vi so sánh được hoặc tuân theo một thang đo nhất quán.
Thuật ngữ này mang nghĩa khác nhau tùy ngữ cảnh: trong machine learning, nó thường nghĩa là đưa giá trị đặc trưng về cùng thang đo để tránh độ lớn chi phối tầm quan trọng; còn trong thiết kế cơ sở dữ liệu, nó nói về tổ chức bảng để loại bỏ dư thừa.
Tôi sẽ tập trung chủ yếu vào nghĩa trong machine learning, dù chúng ta sẽ lướt qua chuẩn hóa cơ sở dữ liệu sau đó để làm rõ chồng lấn từ vựng.
Vì sao chuẩn hóa dữ liệu quan trọng
Khi các đặc trưng tồn tại trên các thang đo khác nhau, một số thuật toán sẽ gán trọng số quá mức cho những giá trị lớn hơn về mặt số học.
Một đặc trưng đo thu nhập theo nghìn sẽ lấn át đặc trưng đo tuổi theo thập kỷ, không phải vì thu nhập quan trọng hơn cho bài toán dự đoán, mà chỉ vì các con số lớn hơn. Chuẩn hóa đặt các đặc trưng lên vị thế ngang bằng để mô hình học được cái nào thực sự quan trọng.
Ngoài huấn luyện mô hình, chuẩn hóa còn hữu ích cho:
Chuẩn hóa dữ liệu vs. scaling vs. standardization
Vậy, sự khác biệt giữa normalization, scaling và standardization là gì? Ba thuật ngữ này thường xuất hiện trong tài liệu và hay được dùng lẫn lộn dù có ý nghĩa riêng.
Khác biệt thực tế nằm ở việc mô hình của bạn có cần giá trị trong các giới hạn cụ thể hay không. Chuẩn hóa min-max đảm bảo cận trên/dưới, còn standardization thì không. Bảng sau tóm tắt khác biệt:
Thuật ngữ
Tác dụng
Miền đầu ra
Phù hợp nhất cho
Scaling
Thuật ngữ chung cho mọi biến đổi phạm vi
Khác nhau
Danh mục bao trùm
Normalization (min-max)
Nén vào các cận cố định
Thường 0 đến 1
Dữ liệu có cận, mạng nơ-ron kỳ vọng khoảng đầu vào cụ thể
Standardization (z-score)
Tâm tại trung bình 0, tỉ lệ theo độ lệch chuẩn 1
Không bị chặn (có thể âm)
Dữ liệu không bị chặn, thuật toán giả định phân phối xấp xỉ chuẩn
Để so sánh sâu hơn về khi nào mỗi cách tiếp cận phản tác dụng, bài viết Giải thích Normalization vs. Standardization của chúng tôi bao quát khá tốt các trường hợp rìa.
Các trường hợp sử dụng chuẩn hóa dữ liệu
Giờ khi đã thống nhất thuật ngữ, hãy xem vài trường hợp kinh điển. Chuẩn hóa phục vụ các mục đích khác nhau tùy bối cảnh sử dụng, từ cải thiện động lực huấn luyện mô hình đến cho phép so sánh có ý nghĩa giữa các nguồn dữ liệu không đồng nhất.
Cải thiện hiệu năng mô hình machine learning
Mạng nơ-ron và hồi quy logistic cập nhật trọng số thông qua gradient descent, nơi đóng góp của mỗi đặc trưng vào lỗi dự đoán quyết định mức điều chỉnh trọng số tương ứng.
Khi độ lớn đặc trưng khác biệt đáng kể, gradient thu được cũng vậy: đặc trưng lớn tạo gradient lớn, đặc trưng nhỏ tạo gradient nhỏ. Sự mất cân bằng này khiến bộ tối ưu hóa bước rất lớn theo một số hướng trong khi gần như không di chuyển theo hướng khác, dẫn tới huấn luyện bất ổn hoặc không hội tụ.
Các thuật toán dựa trên khoảng cách như kNN và K-means gặp vấn đề liên quan. Chúng tính độ tương đồng bằng các thước đo khoảng cách, thường là khoảng cách Euclid, nơi các giá trị số lớn đóng góp nhiều hơn đơn giản vì chúng lớn hơn. Một đặc trưng trải từ 0 đến 10.000 sẽ lấn át đặc trưng trải từ 0 đến 1, bất kể đặc trưng nào thực sự quan trọng cho tác vụ dự đoán.
Scaling đảm bảo mọi đặc trưng đóng góp theo tỷ lệ với giá trị dự đoán thực sự của chúng thay vì phạm vi số học tùy ý.
Cho phép so sánh công bằng giữa các đặc trưng
Khi xây dựng điểm tổng hợp hoặc kết hợp các phép đo với đơn vị khác nhau, giá trị thô có thể dẫn tới so sánh sai lệch.
Một chỉ số sức khỏe khách hàng kết hợp chi tiêu hàng tháng bằng đô-la, tần suất đăng nhập theo số đếm và tuổi tài khoản theo ngày sẽ mặc nhiên đặt nặng số tiền đô-la chỉ vì các con số này lớn hơn.
Chuẩn hóa cho phép bạn kết hợp các phép đo theo cách phản ánh tầm quan trọng thực sự của chúng thay vì độ lớn tình cờ.
Điều này cũng áp dụng cho phân tích thăm dò và trực quan hóa. Vẽ các đặc trưng trên thang đo khác nhau khiến khó phát hiện mẫu hình hoặc so sánh phân phối. Dữ liệu đã chuẩn hóa cho bức tranh rõ ràng hơn về cách các đặc trưng liên hệ với nhau.
Cải thiện chất lượng và tính toàn vẹn dữ liệu
Pipeline sản xuất thường lấy từ nhiều nguồn dữ liệu với quy ước không nhất quán. Doanh thu có thể được báo cáo bằng đô-la ở một hệ thống và theo nghìn ở hệ thống khác. Ngày tháng xuất hiện dưới dạng Unix timestamp ở một API và chuỗi định dạng ở API khác.
Thiết lập thang đo và định dạng nhất quán trước khi xử lý hạ lưu ngăn các lỗi tinh vi khó chẩn đoán về sau.
Trong ngữ cảnh cơ sở dữ liệu, chuẩn hóa mang ý nghĩa khác nhưng liên quan: tổ chức bảng sao cho mỗi thông tin chỉ tồn tại ở đúng một nơi.
Điều này ngăn bất thường khi cập nhật, nơi thay đổi giá trị ở một chỗ để lại giá trị mâu thuẫn ở nơi khác. Dù kỹ thuật khác với scaling đặc trưng, động cơ cơ bản tương tự: giữ dữ liệu nhất quán và dễ dự đoán.
Các kỹ thuật chuẩn hóa dữ liệu phổ biến
Mỗi cách tiếp cận chuẩn hóa đưa ra giả định khác nhau về dữ liệu và tạo ra đặc tính đầu ra khác nhau. Lựa chọn đúng phụ thuộc vào phân phối dữ liệu, sự hiện diện của ngoại lệ, và kỳ vọng của mô hình hạ lưu.
Chuẩn hóa min-max
Chuẩn hóa min-max nén giá trị vào một phạm vi cố định, thường là 0 đến 1, bằng cách trừ đi giá trị nhỏ nhất và chia cho khoảng. Cách này giữ nguyên hình dạng phân phối gốc đồng thời đảm bảo mọi giá trị nằm trong cận đã biết.
Cách hoạt động: Trừ giá trị nhỏ nhất, chia cho khoảng. Hết.
Tác dụng:
Phù hợp nhất cho:
Cần lưu ý:
Ngoại lệ có thể phá hỏng hoàn toàn chuẩn hóa min-max. Hãy tưởng tượng dữ liệu chủ yếu nằm giữa 10 và 100, nhưng có một giá trị 99.999? Chỉ một điểm đó kéo giãn khoảng của bạn đến mức mọi giá trị bình thường bị nén vào một lát mỏng gần 0. Một quan sát xấu, cả đặc trưng bị hỏng.
Cũng xem xét điều gì xảy ra khi dữ liệu mới nằm ngoài khoảng huấn luyện. Giá trị kiểm thử vượt quá cực đại huấn luyện sẽ cho đầu ra lớn hơn 1. Việc đó có phá vỡ gì hay không phụ thuộc vào mô hình của bạn.
Chuẩn hóa Z-score
Z-score standardization biến đổi dữ liệu sao cho trung bình bằng 0 và độ lệch chuẩn bằng 1, mà không áp đặt cận cố định lên đầu ra. Cách này phù hợp với dữ liệu không có giới hạn tự nhiên rõ ràng và thường được giả định hoặc khuyến nghị bởi nhiều triển khai thuật toán.
Cách hoạt động: Trừ trung bình, chia cho độ lệch chuẩn.
Tác dụng:
Phù hợp nhất cho:
Đánh đổi:
Tính dễ hiểu giảm đi. "Quan sát này cao hơn trung bình 1,7 độ lệch chuẩn" đòi hỏi suy nghĩ nhiều hơn so với "điều này ở mức 80% của khoảng". Nếu các bên liên quan cần hiểu trực tiếp giá trị đã scale, min-max có thể truyền đạt tốt hơn.
Ngoại lệ vẫn làm phồng trung bình và độ lệch chuẩn, bóp méo scaling cho phần lớn dữ liệu, nhưng ít vấn đề hơn so với chuẩn hóa min-max.
Robust scaling
Robust scaling giải quyết độ nhạy với ngoại lệ của cả min-max và z-score bằng cách dùng trung vị và khoảng tứ phân vị (IQR) thay vì trung bình và độ lệch chuẩn. Các thống kê này vẫn ổn định bất kể các giá trị cực trị ở đuôi phân phối.
Cách hoạt động: Trừ trung vị, chia cho IQR (khoảng giữa phần trăm vị thứ 25 và 75).
Tác dụng:
Phù hợp nhất cho:
Vì sao hữu ích với dữ liệu lệch:
Phân phối thu nhập là ví dụ tốt. Phần lớn mọi người kiếm mức vừa phải, và một số kiếm mức khổng lồ: điển hình lệch phải. Độ lệch chuẩn bị phồng lên bởi nhóm thu nhập cao, khiến standardization kém hữu ích cho đa số quan sát. Trung vị và IQR vẫn bám chắc phần giữa của phân phối bất chấp đuôi.
Chuẩn hóa vector chuẩn đơn vị
Chuẩn đơn vị (L1/L2) hoạt động khác với các kỹ thuật trên: thay vì scale theo đặc trưng (cột), nó thường scale theo mẫu (hàng). Mỗi vector mẫu được đưa về độ dài 1 theo một chuẩn đã chọn (thường là L2), từ đó loại bỏ độ lớn tổng thể và chỉ giữ hướng/tỷ lệ.
Đừng nhầm với regularization L1/L2 (Lasso/Ridge): regularization sửa mục tiêu huấn luyện bằng cách thêm phạt lên trọng số mô hình để giảm overfitting, không phải bằng cách scale vector đầu vào.
Cách hoạt động: Trong L2, mỗi hàng được chia cho chuẩn Euclid của nó, sao cho tổng bình phương bằng một. L1 dùng tổng giá trị tuyệt đối thay thế.
Tác dụng:
Phù hợp nhất cho:
Không hữu ích cho:
Tình huống độ lớn thực sự quan trọng. Nếu tổng số từ có ý nghĩa cho tác vụ của bạn, chuẩn hóa nó đi sẽ làm mất thông tin.
Chuẩn hóa cơ sở dữ liệu
Chuẩn hóa cơ sở dữ liệu đề cập đến tái cấu trúc các bảng quan hệ để loại bỏ dư thừa và cải thiện tính toàn vẹn dữ liệu — ví dụ, đảm bảo email của khách hàng chỉ lưu một nơi thay vì lặp lại trong mọi bản ghi đơn hàng.
Nó không liên quan đến scaling đặc trưng.
Chỉ là trùng thuật ngữ. Trong machine learning, "normalization" gần như luôn ám chỉ scale giá trị số. Trong kỹ thuật dữ liệu hay SQL, nó ám chỉ tổ chức cấu trúc bảng (thường bàn về 1NF, 2NF, hoặc 3NF).
Khác biệt chính:
Nếu một kỹ sư dữ liệu bảo bạn "chuẩn hóa cơ sở dữ liệu", họ muốn bạn sửa cấu trúc bảng, không phải chạy
MinMaxScaler.Để đào sâu, hãy xem hướng dẫn về chuẩn hóa cơ sở dữ liệu trong SQL.
Cách chuẩn hóa dữ liệu trong thực tế
Triển khai chuẩn hóa đúng cần chú ý đến thứ tự thao tác, đặc biệt quanh việc tách train/test. Bản thân mã thì đơn giản, nhưng các lỗi tinh vi về trình tự có thể làm vô hiệu toàn bộ đánh giá của bạn.
Chuẩn hóa dữ liệu trong Python
Scikit-learn cung cấp các scaler, nhưng quy tắc chính là về thủ tục, không phải toán học: tách trước, fit chỉ trên train, rồi tái sử dụng transformer đã fit ở mọi nơi khác.
Vì sao phải cẩn thận? Bởi scaling học các con số từ dữ liệu: min/max, mean/std, median/IQR. Nếu các con số đó được tính bằng cách dùng tập kiểm thử, bạn đã âm thầm để thông tin tương lai rò rỉ vào huấn luyện. Không có gì sập, nhưng số đo của bạn không còn mang ý nghĩa như bạn nghĩ.
Ví dụ tối giản:
Tại thời điểm này, bạn coi train là “thế giới trông như thế nào khi tôi xây dựng mô hình.” Test là “dữ liệu mới, chưa từng thấy.” Scaler của bạn cần học về thế giới từ phần thứ nhất mà thôi.
MinMaxScaler
Chuẩn hóa min-max rất đơn giản: nó lưu giá trị nhỏ nhất và lớn nhất của mỗi cột trong huấn luyện, rồi áp dụng ánh xạ đó sau này.
Nếu bạn thấy mình gọi
fit()trên tập kiểm thử, hãy dừng lại. Điều đó phá hỏng mục đích giữ lại tập test ngay từ đầu.StandardScaler
StandardScalerlưu trung bình và độ lệch chuẩn từ train, rồi dùng các giá trị đó để biến đổi cả train và test.Đây là cái dễ “hỏng trong im lặng” khi rò rỉ xảy ra, vì mean/std rất dễ được “ổn định hóa” bằng cách vô tình dùng nhiều dữ liệu hơn mức nên dùng.
RobustScaler
RobustScalercũng “fit một lần, dùng mãi”, nhưng dùng trung vị và IQR, nên vài điểm cực trị không quyết định thang đo.Dấu hiệu thực tế cho thấy robust scaling đáng dùng: bạn có đuôi dài muốn giữ lại (thanh toán, bồi thường, đỉnh cảm biến), và bạn không muốn một ngày kỳ lạ bóp phần còn lại của đặc trưng về gần 0.
Tính nhanh bằng pandas
Cho công việc thăm dò nhanh, tính trực tiếp bằng pandas là ổn, miễn là bạn trung thực về mục đích: đây là để nhìn phân phối, không phải để đánh giá mô hình.
Ngăn rò rỉ dữ liệu
Nguy cơ ở đây: các thống kê dựa trên toàn bộ tập dữ liệu. Làm việc này trước khi tách, và giá trị test sẽ ảnh hưởng đến biến đổi. Đánh giá mất ý nghĩa vì tiền xử lý đã nhìn trộm vào đáp án mà nó không nên thấy.
Mẫu hình rò rỉ thường như sau:
Làm sai cách:
Cách này chuẩn hóa dữ liệu trước khi tách, nên dữ liệu test đã ảnh hưởng đến biến đổi.
Làm đúng cách:
Bằng cách tách dữ liệu trước, ta đảm bảo scaler học thống kê chỉ từ tập train, giữ cho tập test thực sự chưa từng thấy.
Cùng thao tác, khác thứ tự. Và thứ tự mới là điều cốt lõi.
Nếu bạn muốn thực hành tiền xử lý end-to-end (bao gồm chuẩn hóa đúng và tránh rò rỉ), khóa học này dành cho bạn: Preprocessing for Machine Learning in Python.
Chuẩn hóa trong SQL
Như đã nói, chúng ta có những nghĩa khác nhau của cùng một từ. Ở đây, “chuẩn hóa” không phải biến đổi số. Nó là quyết định cấu trúc để ngừng lặp lại sự thật.
Nếu bảng orders của bạn lưu
customer_emailtrên mọi dòng, cơ sở dữ liệu sẽ cho phép. Cơ sở dữ liệu cũng sẽ vui vẻ chấp nhận mâu thuẫn sau này: một email ở dòng này, email khác ở dòng kia, và không có cách hiển nhiên để biết cái nào “thật”.Trước khi chuẩn hóa:
Thông tin khách hàng bị lặp trên mọi dòng. Cập nhật email nghĩa là phải tìm và sửa mọi đơn hàng của họ.
Sau khi chuẩn hóa:
Thông tin khách hàng tồn tại một lần. Truy vấn cần join, nhưng cập nhật chỉ diễn ra ở một chỗ.
Cách chọn kỹ thuật chuẩn hóa phù hợp
Cuối cùng, tôi muốn đưa cho bạn khung ra quyết định cho lần tới khi bạn băn khoăn nên dùng kỹ thuật chuẩn hóa nào.
Min-max khi tồn tại cận
Scale min-max hoạt động tốt nhất khi dữ liệu của bạn có cận đã biết, ổn định và sẽ không thay đổi giữa huấn luyện và triển khai. Giá trị pixel luôn nằm giữa 0 và 255. Điểm xác suất không thể vượt quá 1. Điểm thi có điểm tối thiểu và tối đa xác định.
Cách này cũng phù hợp khi mô hình của bạn cụ thể kỳ vọng đầu vào bị chặn, như một số kiến trúc mạng nơ-ron. Tuy nhiên, tránh scale min-max khi có ngoại lệ, vì một giá trị cực trị có thể nén mọi quan sát bình thường vào dải hẹp gần 0.
Standardization như phương án dự phòng
Standardization là mặc định hợp lý khi bạn không có giả định mạnh về cận hay phân phối của dữ liệu. Nó hoạt động tốt cho các đặc trưng có phạm vi khác nhau, giới hạn không rõ, hoặc phân phối xấp xỉ hình chuông.
Nhiều triển khai thuật toán giả định hoặc khuyến nghị đầu vào đã standardize, bao gồm hầu hết framework mạng nơ-ron và thư viện hồi quy logistic. Nếu bạn không chắc nên dùng cách nào và dữ liệu không có cận tự nhiên rõ ràng, standardization thường là lựa chọn an toàn.
Robust cho sự lộn xộn đời thực
Robust scaling trở thành lựa chọn đúng khi dữ liệu có nhiều ngoại lệ đại diện cho giá trị hợp lệ chứ không phải lỗi. Dữ liệu giao dịch tài chính thường có đặc điểm này: hầu hết giao dịch nhỏ, nhưng các khoản lớn thỉnh thoảng là thật và nên giữ lại trong tập dữ liệu.
Phân phối thu nhập, đọc cảm biến với các đỉnh thỉnh thoảng, và mọi dữ liệu có độ lệch nặng hoặc đuôi dài đều hưởng lợi từ robust scaling. Trung vị và IQR vẫn bám phần lõi của phân phối bất kể chuyện gì xảy ra ở cực trị.
Khi nào không nên chuẩn hóa
Các mô hình dựa trên cây như random forests, XGBoost và gradient boosted trees chia tách theo ngưỡng và không bao giờ tính khoảng cách hay gradient giữa các đặc trưng. Thang đo là vô hình với chúng, nên chuẩn hóa chỉ thêm phức tạp mà không mang lại lợi ích.
Các đặc trưng one-hot đã là nhị phân (0 và 1), nên scale chúng không mang lại điều gì hữu ích. Bộ dữ liệu chỉ có biến phân loại cũng tương tự.
Đôi khi, biến đổi theo miền chuyên môn hiệu quả hơn chuẩn hóa chung:
Bảng so sánh tóm tắt
Dưới đây là tổng quan về các kỹ thuật và trường hợp sử dụng:
Kỹ thuật
Dùng khi
Tránh khi
Miền đầu ra
Min-max
Dữ liệu có cận đã biết; mô hình kỳ vọng đầu vào bị chặn
Có ngoại lệ; cận có thể thay đổi
0 đến 1 (cố định)
Standardization
Cận không rõ; phân phối xấp xỉ chuẩn; chưa chắc dùng gì
Cần cận đảm bảo; ngoại lệ nặng
Không bị chặn
Robust scaling
Ngoại lệ đáng kể; phân phối lệch; đuôi dài
Dữ liệu đã sạch và đối xứng
Không bị chặn
Chuẩn hóa L1/L2
Dữ liệu văn bản; cosine similarity; không gian chiều cao
Độ lớn mang ý nghĩa
Vector đơn vị
Không dùng
Mô hình cây; đặc trưng one-hot; có biến đổi theo miền chuyên môn
Mô hình dựa trên gradient hoặc khoảng cách
Gốc
Kết luận
Khác biệt về thang đo gây rắc rối thực sự cho các mô hình quan tâm đến chúng. Thước đo khoảng cách thiên vị các đặc trưng có độ lớn lớn. Gradient descent gặp khó khi gradient chênh nhau hàng bậc độ lớn. Huấn luyện dừng lại hoặc bùng nổ vì những lý do không hiển nhiên khi nhìn vào mã hay kiến trúc.
Chuẩn hóa giải quyết điều đó. Dùng chuẩn hóa min-max cho dữ liệu có cận, robust scaling khi ngoại lệ là thật và không thể loại bỏ, và standardization như mặc định hợp lý. Cơ chế thì đơn giản: fit trong huấn luyện, áp dụng thống nhất ở mọi nơi.
Theo kinh nghiệm của tôi, thứ tốn thời gian là không nhận ra khi nào scaling quan trọng, rồi gỡ lỗi hành vi mô hình suốt nhiều ngày trong khi câu trả lời nằm ở tiền xử lý. Hoặc sai lầm ngược lại, như áp dụng scaling một cách máy móc cho các mô hình không quan tâm, thêm phức tạp mà không có lợi.
Sẵn sàng nâng tầm? Lộ trình Machine Learning Engineer toàn diện của chúng tôi dạy bạn mọi điều cần biết về quy trình làm việc machine learning.