Menu
CoddyTech

Đo lường sai số

Thuộc phần Học có giám sát trong hành trình Machine Learning của Coddy. Bài học 13 trên 58.

Mô hình dự đoán lệch bao nhiêu đô la? Đây là mô hình giá nhà trên năm căn nhà kiểm tra mà mô hình chưa từng thấy:

Năm cột, mỗi cột ứng với một căn nhà kiểm tra, cho thấy mức chênh lệch giá mà mô hình dự đoán: 20, 40, 10, 90 và 30 nghìn đô la. Đường nét đứt đánh dấu MAE ở mức 38, đường chấm đánh dấu RMSE ở mức 47.1, cao hơn vì có một lần dự đoán lệch nhiều là 90

sklearn.metrics đo lường các sai số giúp bạn:

from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score

y_test = np.array([290, 410, 235, 520, 330])  # nghìn đô la
pred = np.array([270, 450, 245, 430, 360])
print(mean_absolute_error(y_test, pred))
print(np.round(np.sqrt(mean_squared_error(y_test, pred)), 1))
print(np.round(r2_score(y_test, pred), 3))

Kết quả in ra:

38.0
47.1
0.776

MAE, sai số tuyệt đối trung bình, là mức lệch điển hình: 38 nghìn. RMSE bình phương các mức lệch, tính trung bình rồi lấy căn bậc hai: một mức lệch lớn khiến con số này tăng lên 47.

Cả hai đều dùng đơn vị của giá trị mục tiêu. r2_score là R bình phương của bạn: mô hình giải thích được 78% độ phân tán của giá.

challenge icon

Thử thách

Trung bình

Một cửa hàng định giá máy ảnh đã qua sử dụng bằng một mô hình. Thêm một đặc trưng nữa có giúp ích không? Chương trình đọc shutter_k (số nghìn bức ảnh đã chụp) hoặc megapixels. Phần code ban đầu huấn luyện hai mô hình, một mô hình chỉ dùng age_years và một mô hình dùng thêm đặc trưng kia, rồi lưu các dự đoán trên tập kiểm tra của chúng vào preds.

  1. Với mỗi mô hình, in MAE, RMSE (1 chữ số thập phân) và R bình phương (3 chữ số thập phân).
  2. In mô hình có MAE nhỏ hơn.

Với một cửa hàng khác và shutter_k:

age_years: MAE 212.4, RMSE 268.1, R squared 0.853
age_years + shutter_k: MAE 98.7, RMSE 121.0, R squared 0.97
Better: age_years + shutter_k, off by 98.7 dollars on a typical camera

Tự làm thử

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

# Mỗi máy ảnh đã bán chiếm một hàng: tuổi máy, số lần chụp tính bằng nghìn, số megapixel, giá tính bằng đô la
cameras = pd.read_csv("cameras.csv")
extra = input()
names = ["age_years", "age_years + " + extra]
columns = [["age_years"], ["age_years", extra]]
# Chia dữ liệu theo hàng nguyên vẹn; mỗi mô hình bên dưới chọn các cột riêng
X_train, X_test, y_train, y_test = train_test_split(cameras, cameras["price"], test_size=0.25, random_state=0)
# Mỗi danh sách cột có một mô hình cùng các giá trị dự đoán cho những máy ảnh dùng để kiểm tra
preds = []
for cols in columns:
    model = LinearRegression()
    model.fit(X_train[cols], y_train)
    preds.append(model.predict(X_test[cols]))

# Viết code của bạn bên dưới
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Học có giám sát

Tự luyện tập: Trình biên dịch Python online