Menu
CoddyTech

Biểu đồ phần dư

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 14 trên 58.

Một điểm số tốt có thể che giấu hình dạng không phù hợp. Đường thẳng này đạt R bình phương 0.82 trên dữ liệu bột nhào đang nở, nhưng các sai số lại tạo thành hình vòng cung:

Bên trái: chiều cao bột nhào theo số giờ, tăng nhanh rồi chậm lại, cùng một đường thẳng khớp dữ liệu, R bình phương 0.82. Bên phải: phần dư so với giá trị dự đoán tăng từ -1.3 lên +0.7 rồi giảm xuống -0.7, tạo thành hình vòng cung quanh đường số không nét đứt

Biểu đồ bên phải là biểu đồ phần dư: mỗi phần dư, bằng giá trị thực tế trừ giá trị dự đoán, được biểu diễn theo giá trị dự đoán, cùng một đường tại 0:

residuals = y_test - pred
fig, ax = plt.subplots()
ax.scatter(pred, residuals)
ax.axhline(0, color="gray", linestyle="--")
plt.show()

Phần dư lành tính phân tán quanh 0 như nhiễu. Một mô hình cho thấy mô hình còn bỏ sót điều gì đó: ở đây, tốc độ tăng chậm lại.

Với nhiều đặc trưng, hãy vẽ phần dư theo từng đặc trưng: đặc trưng có biểu đồ cong sẽ che khuất đường cong.

challenge icon

Thử thách

Trung bình

Một trường dạy lái xe đã khớp một đường thẳng với 80 bài kiểm tra phanh: speed_kmh và braking_m. Mã khởi đầu lưu các giá trị dự đoán của bài kiểm tra trong pred và gắn nhãn cho biểu đồ.

  1. Tính các phần dư.
  2. Vẽ biểu đồ phân tán các phần dư theo các giá trị dự đoán trên một đường ngang nét đứt màu xám tại 0, rồi hiển thị biểu đồ.

Đường thẳng có bỏ sót một đường cong không? Ở phía bên trái, nó thậm chí còn dự đoán khoảng cách phanh âm.

Biểu đồ của một đường thẳng phù hợp, dựa trên dữ liệu khác, trông như thế này:

Biểu đồ phần dư có tiêu đề Một đường thẳng phù hợp: hai mươi chấm phân tán không theo quy luật nào ở phía trên và phía dưới một đường nét đứt tại 0

Coddy mô tả biểu đồ của bạn.

Tự làm thử

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

brakes = pd.read_csv("braking.csv")
X_train, X_test, y_train, y_test = train_test_split(brakes[["speed_kmh"]], brakes["braking_m"], test_size=0.25, random_state=0)
model = LinearRegression()
model.fit(X_train, y_train)
pred = model.predict(X_test)

fig, ax = plt.subplots()
ax.set_title("Braking Line Check")
ax.set_xlabel("Predicted braking distance (m)")
ax.set_ylabel("Residual (m)")

# 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