Menu
CoddyTech

Tiến triển của bệnh tiểu đường

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

Một phòng khám tiểu đường lên lịch tái khám dựa trên mức độ tiến triển của bệnh ở mỗi bệnh nhân trong vòng một năm. Ở phần 2, một đặc trưng chỉ cho biết một phần:

Mức độ tiến triển của bệnh theo chỉ số BMI đã chuẩn hóa của các bệnh nhân tại phòng khám, một đám mây điểm rộng với một đường màu cam đi lên xuyên qua, được ghi nhãn chỉ riêng BMI: R bình phương 0.34

Giờ đây, cả mười số đo của load_diabetes đều được đưa vào. Phòng khám nên tin tưởng mô hình nào, và kết quả sẽ lệch bao nhiêu điểm?

Nó cần một lựa chọn công bằng bằng kiểm định chéo (cross-validation), các lỗi đáng tin cậy trên những bệnh nhân chưa từng gặp và kiểm tra phần dư để phát hiện những gì mô hình bỏ sót.

challenge icon

Thử thách

Khó

Chương trình đọc các giá trị alpha của Ridge vào alphas; mã khởi đầu tạo sẵn một biểu đồ có tiêu đề.

  1. Tách một phần tư dữ liệu làm tập kiểm tra với random_state=0.
  2. Chấm điểm LinearRegression và một mô hình Ridge cho mỗi giá trị alpha bằng kiểm định chéo 5 phần trên các hàng dữ liệu huấn luyện. In giá trị R bình phương trung bình (3 chữ số thập phân) của từng mô hình, rồi in mô hình chiến thắng.
  3. Huấn luyện mô hình chiến thắng và in MAE, RMSE trên tập kiểm tra (1 chữ số thập phân) cùng giá trị R bình phương (3 chữ số thập phân).
  4. Vẽ biểu đồ phân tán các phần dư trên tập kiểm tra, giá trị thực trừ giá trị dự đoán, theo các giá trị dự đoán. Thêm đường tại mức 0, rồi hiển thị biểu đồ.

Với một phòng khám khác và các giá trị alpha 0.5 và 2.0:

Linear: CV R squared 0.472
Ridge 0.5: CV R squared 0.481
Ridge 2.0: CV R squared 0.402
Winner: Ridge 0.5
Test errors: MAE 47.3, RMSE 58.9, R squared 0.414

Sau đó, Coddy mô tả biểu đồ phần dư của bạn.

Tự làm thử

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.linear_model import LinearRegression, Ridge
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score

diabetes = load_diabetes(as_frame=True)
X = diabetes.data
y = diabetes.target

# Các giá trị alpha của Ridge cần thử
n = int(input())
alphas = []
for i in range(n):
    alphas.append(float(input()))

fig, ax = plt.subplots()
ax.set_title("Residuals on Test Patients")
ax.set_xlabel("Predicted progression")
ax.set_ylabel("Residual (true - predicted)")

# Viết code 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