aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
SAVED POSTS
aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
aedev.net
No Result
View All Result
Minh họa các khái niệm AI, mạng nơ-ron và lập trình trên máy tính

StandardScaler: hiểu ddof=0 và cách xử lý cột hằng số

Suong Nguyen by Suong Nguyen
11/11/2026
in AI
0
585
SHARES
3.2k
VIEWS
Summarize with ChatGPTShare to Facebook

Bạn tính độ lệch chuẩn bằng một hàm thống kê, rồi thấy kết quả chuẩn hóa khác với pipeline machine learning. Trước khi nghi dữ liệu bị đọc sai, hãy kiểm tra mẫu số: tổng bình phương độ lệch đang chia cho N hay N trừ một? Với tập nhỏ, hai lựa chọn cho ra khác biệt dễ thấy.

Bài này dùng dữ liệu tự tạo để đọc công thức, không huấn luyện mô hình. Mục tiêu là giúp bạn viết một phép kiểm tra nhỏ khi phải chuyển bước tiền xử lý giữa hai môi trường.

Điều kiện và phạm vi

Nguồn được đối chiếu ngày 11/11/2026: scikit-learn 1.9.1 và NumPy 2.5. Ví dụ bên dưới chỉ dùng thư viện chuẩn Python, đã chạy bằng Python 3.9.6; không cài hay chạy hai thư viện trên. Đây là phép minh họa một cột số hữu hạn, không thay thế bộ chuẩn hóa dùng trong sản phẩm.

StandardScaler mặc định trừ trung bình rồi chia độ lệch chuẩn của từng feature. Tài liệu ghi độ lệch chuẩn tương ứng ddof=0. NumPy mô tả mẫu số tổng quát là N - ddof. Khi so sánh hai cách triển khai, hãy ghi cả quy ước này vào dữ liệu kiểm thử.

1. Tính hai kết quả từ cùng ba giá trị

Chọn cột giả lập [2, 4, 6]. Trung bình bằng 4; bình phương các độ lệch là 4, 0 và 4. Tổng bằng 8. Chia cho 3 được phương sai theo quy ước ddof bằng 0; chia cho 2 được phương sai theo ddof bằng 1.

from math import sqrt, isclose

values = [2.0, 4.0, 6.0]
mean = sum(values) / len(values)
sum_squares = sum((x - mean) ** 2 for x in values)
std0 = sqrt(sum_squares / len(values))
std1 = sqrt(sum_squares / (len(values) - 1))
z0 = [(x - mean) / std0 for x in values]
z1 = [(x - mean) / std1 for x in values]

assert isclose(std0, sqrt(8 / 3))
assert std1 == 2.0
assert isclose(z0[0], -sqrt(1.5))
assert z1 == [-1.0, 0.0, 1.0]
print(round(std0, 6), z1)

Fixture chạy cho dòng in 1.632993 [-1.0, 0.0, 1.0]. Hai dãy cùng có trung bình bằng 0, nhưng độ lớn khác nhau. Vì vậy, chỉ kiểm tra tổng các giá trị sau chuẩn hóa gần 0 chưa đủ chứng minh hai pipeline giống nhau.

Hãy kiểm tra thêm trung bình bình phương của z0: nó gần 1 theo mẫu số N. Nếu bạn dùng công thức chia cho N trừ một để kiểm tra chính dãy này, kết quả sẽ khác. Cần dùng cùng quy ước cho bước biến đổi và bước đối chiếu.

2. Không chia cho độ lệch chuẩn bằng 0

Cột [7, 7, 7] có phương sai bằng 0. StandardScaler dùng hệ số scale bằng 1 khi không thể đưa phương sai về 1. Với thiết lập có trừ trung bình, các giá trị của cột hằng số sau biến đổi bằng 0.

from math import sqrt

constant = [7.0, 7.0, 7.0]
center = sum(constant) / len(constant)
variance = sum((x - center) ** 2 for x in constant) / len(constant)
scale = sqrt(variance) if variance != 0 else 1.0
transformed = [(x - center) / scale for x in constant]
assert scale == 1.0
assert transformed == [0.0, 0.0, 0.0]
print(transformed)

Đây là fixture số nhỏ, có phương sai bằng 0 chính xác. Đừng lấy phép so sánh này làm thuật toán phát hiện feature gần hằng số cho mọi kiểu số, mọi kích thước dữ liệu. Sai số số học và ngưỡng ổn định cần được xử lý bởi triển khai thư viện bạn chọn.

Kiểm tra khi nối hai hệ thống

Lưu một fixture gồm ba hàng bình thường và một cột hằng số. Ghi tên cột, thứ tự, trung bình, scale và kết quả mong đợi. Khi chuyển sang hệ thống phục vụ dự đoán, kiểm tra từng cột với sai số cho phép thay vì so chuỗi số đã làm tròn.

Nếu đầu ra khác nhau, kiểm tra lần lượt: dữ liệu đầu vào có cùng thứ tự không; có cùng bước trừ trung bình không; mẫu số tính phương sai là gì; cột hằng số được xử lý thế nào. Đổi nhiều thiết lập cùng lúc khiến việc tìm nguyên nhân khó hơn.

Lỗi thường gặp và giới hạn

Đừng thay scale đã lưu bằng độ lệch chuẩn tính lại trên một request riêng lẻ. Một request một hàng không mang cùng thông tin với tập đã dùng để tạo thống kê. Trong ví dụ này, [2, 4, 6] là toàn bộ fixture dùng để tính thống kê; bài không đánh giá chất lượng dự đoán hay rò rỉ dữ liệu thực tế.

Code minh họa chưa xử lý dữ liệu rỗng, NaN, vô cực, trọng số, sparse matrix hoặc số cực lớn. Nếu ứng dụng cần những trường hợp ấy, dùng API chính thức và thêm test đúng hợp đồng dữ liệu. Các kết quả ở đây chỉ xác nhận phép tính trên fixture đã nêu, không phải benchmark.

Kết luận

Khi chuẩn hóa khác nhau, hãy so quy ước độ lệch chuẩn trước. Một fixture có cả cột biến thiên và cột hằng số giúp phát hiện lỗi chuyển đổi rõ hơn một ví dụ chỉ có dữ liệu thông thường.

Nguồn tham khảo

  • scikit-learn: StandardScaler
  • NumPy: std và tham số ddof

Tags: Machine LearningPythonTiền xử lý
SummarizeShare234
Suong Nguyen

Suong Nguyen

Related Stories

Minh họa các khái niệm AI, mạng nơ-ron và lập trình trên máy tính

MAE và RMSE: một sai số lớn có thể đổi cách xếp hạng dự đoán

by Suong Nguyen
10/11/2026
0

Tính MAE và RMSE trên cùng dữ liệu để thấy vì sao hai bộ dự đoán có thể được xếp hạng khác nhau khi xuất hiện một lỗi...

Minh họa các khái niệm AI, mạng nơ-ron và lập trình trên máy tính

Macro F1 và weighted F1: lớp ít mẫu có đang bị che khuất?

by Suong Nguyen
09/11/2026
0

Tính F1 theo từng lớp rồi so sánh macro và weighted trên dữ liệu lệch lớp, với ví dụ Python nhỏ có thể kiểm tra lại.

Minh họa các khái niệm AI, mạng nơ-ron và lập trình trên máy tính

Log loss: vì sao dự đoán sai càng tự tin càng bị phạt nặng?

by Suong Nguyen
08/11/2026
0

Tính log loss nhị phân bằng Python, quan sát mức phạt khi xác suất cho nhãn đúng giảm và phân biệt công thức với clipping của thư viện.

Minh họa các khái niệm AI, mạng nơ-ron và lập trình trên máy tính

Softmax: trừ max logit trước khi tính exp để tránh overflow

by Suong Nguyen
07/11/2026
0

Tái hiện overflow bằng Python thuần và kiểm tra phép dịch logits giữ nguyên phân phối softmax trên một vector hữu hạn.

0 0 votes
Article Rating
Subscribe
Login
Notify of
guest
guest
0 Comments
Oldest
Newest Most Voted
AE Dev

AE Dev mang đến các bài viết về lập trình, mobile app, backend, frontend, WordPress và công nghệ, phù hợp cho developer muốn học hỏi và cập nhật kiến thức thực tế.

Recent Posts

  • React Native: thông báo nội dung đổi cho TalkBack bằng accessibilityLiveRegion
  • Promise.finally: return giá trị mới có thay kết quả của chuỗi không?
  • Android TextUtils.isEmpty không loại chuỗi toàn khoảng trắng

Categories

  • AI
  • Backend
  • Đánh giá
  • DevOps
  • Flutter
  • Hướng dẫn
  • Lập trình Mobile
  • Phỏng vấn
  • React Native
  • Uncategorized

Weekly Newsletter

  • Buy JNews
  • Support Forum
  • Pre-sale Question
  • Contact Us

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In
No Result
View All Result
  • Trang chủ
  • AI
  • Mobile
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
  • Flutter

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.

wpDiscuz
0
0
Would love your thoughts, please comment.x
()
x
| Reply