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

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

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

Bạn đang đánh giá một bộ dự đoán giá trị số, chẳng hạn số phút cần cho một tác vụ. Một phương án sai ít ở phần lớn mẫu nhưng có một lỗi lớn; phương án khác sai đều hơn. Chỉ đổi metric từ MAE sang RMSE có thể đổi thứ tự ưu tiên, dù nhãn thật và các dự đoán vẫn giữ nguyên.

Bài đối chiếu tài liệu scikit-learn 1.9.1 ngày 10/11/2026. Phép tính chạy bằng Python 3.9.6 với thư viện chuẩn, không gọi scikit-learn hoặc huấn luyện mô hình. Dữ liệu được dựng để minh họa, không phải số đo thời gian hay chất lượng của một hệ thống thực tế.

Hai cách gộp cùng một danh sách sai số

MAE lấy trung bình độ lớn sai số tuyệt đối. RMSE lấy trung bình bình phương sai số rồi căn bậc hai. Bạn có thể đọc định nghĩa API trong mean_absolute_error và root_mean_squared_error.

Giả sử đầu ra đo bằng phút. Cả MAE lẫn RMSE cuối cùng đều có đơn vị phút, nhưng bước bình phương khiến các sai số lớn có ảnh hưởng khác. Đừng diễn giải RMSE như “mọi mẫu đều sai khoảng bằng ấy”, vì nó là một cách tổng hợp, không phải mô tả từng mẫu.

Tính trên hai phương án có thứ tự trái nhau

import math

def regression_errors(truth, predicted):
    if not truth or len(truth) != len(predicted):
        raise ValueError("Expected non-empty, equally sized lists")
    if any(type(x) not in (int, float) or not math.isfinite(x)
           for x in truth + predicted):
        raise ValueError("Expected finite numbers")
    errors = [abs(y - p) for y, p in zip(truth, predicted)]
    squares = [error * error for error in errors]
    if any(not math.isfinite(x) for x in errors + squares):
        raise ValueError("Magnitude outside this example's range")
    count = len(errors)
    mae = math.fsum(error / count for error in errors)
    rmse = math.sqrt(math.fsum(square / count for square in squares))
    return mae, rmse

truth = [10, 10, 10, 10]
candidate_a = [11, 11, 11, 19]
candidate_b = [14, 14, 14, 14]
for name, predicted in [("A", candidate_a), ("B", candidate_b)]:
    mae, rmse = regression_errors(truth, predicted)
    print(name, round(mae, 6), round(rmse, 6))

Kết quả là A 3.0 4.582576 và B 4.0 4.0. Theo MAE, A có điểm nhỏ hơn; theo RMSE, B có điểm nhỏ hơn. Sai số tuyệt đối của A là 1, 1, 1, 9; B có bốn sai số cùng bằng 4. Một lần sai 9 đã làm hai cách gộp đưa ra cách nhìn khác nhau.

Hàm chỉ nhận hai list số hữu hạn có cùng độ dài. Nó từ chối số có độ lớn khiến phép tính trung gian không còn hữu hạn. Đây là helper minh họa một đầu ra và trọng lượng mẫu bằng nhau, không tái hiện toàn bộ khả năng multioutput hoặc sample_weight của thư viện.

Nhìn lại từng mẫu trước khi chọn metric chính

Đừng kết luận A hoặc B “tốt hơn” mà bỏ qua kiểu lỗi sản phẩm chấp nhận được. Nếu một lỗi lớn gây hậu quả khác nhiều so với nhiều lỗi nhỏ, cần thể hiện điều đó trong tiêu chí đánh giá. Ngược lại, một giá trị nhãn bị nhập sai có thể làm điểm tổng bị kéo lệch; metric không tự phát hiện nguồn dữ liệu sai.

Trong fixture, hãy tính tay tổng sai số tuyệt đối của A là 12 và tổng bình phương là 84. Chia cho 4 sẽ ra MAE 3 và MSE 21; căn 21 cho RMSE xấp xỉ 4.582576. Kiểm tra này giúp phát hiện việc quên căn hoặc báo nhầm MSE dưới tên RMSE.

Kiểm tra đơn vị và tập mẫu

Nếu đổi cả nhãn thật lẫn dự đoán từ phút sang giây bằng cách nhân 60, hai metric cũng tăng theo cùng hệ số 60. Không so trực tiếp một báo cáo tính bằng phút với báo cáo tính bằng giây. Cũng cần giữ cùng tập đánh giá trước khi so hai phương án.

Thử thêm ca dự đoán hoàn toàn đúng, một mẫu duy nhất và hai list lệch chiều dài. Ca đúng hoàn toàn phải trả cả hai điểm bằng 0. Ca chỉ một mẫu có MAE và RMSE bằng cùng độ lớn sai số. Các đầu vào rỗng hoặc không hữu hạn cần được xử lý rõ, không bỏ âm thầm rồi thay đổi mẫu số.

Phạm vi dùng trong báo cáo

Bài không xác minh phân bố sai số, độ tin cậy thống kê hoặc mức độ phù hợp của mô hình cho dữ liệu thật. Một bảng báo cáo có thể giữ cả MAE, RMSE và vài mẫu sai lớn để người đọc biết con số đến từ đâu. Không tự xóa mẫu khó chỉ để điểm đẹp hơn; nếu loại dữ liệu lỗi, ghi quy tắc và lý do.

Hãy chọn metric chính theo mục tiêu đã thống nhất trước khi xem kết quả cuối. Sau đó dùng metric còn lại như một góc kiểm tra bổ sung. Khác biệt giữa hai con số là tín hiệu cần đọc kỹ phân bố lỗi, thay vì lý do chọn tên metric làm phương án mình thích đứng đầu.

Nguồn tham khảo

  • scikit-learn 1.9.1: mean_absolute_error
  • scikit-learn 1.9.1: root_mean_squared_error

Tags: Đánh giá mô hìnhMachine LearningRegression
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

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.

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

Top-k accuracy: nhãn đúng nằm trong danh sách chưa có nghĩa dự đoán đầu tiên đúng

by Suong Nguyen
06/11/2026
0

Tính top-1 và top-2 trên cùng bộ score để phân biệt hệ thống chọn một nhãn với hệ thống gợi ý nhiều nhã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 Text selectable: cho người dùng chọn và sao chép mã hiển thị
  • Phỏng vấn JavaScript: object mặc định của tham số được tạo khi nào?
  • Android runOnUiThread và Handler.post: chạy ngay hay đưa vào hàng đợi?

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