Bắt đầu ngayBắt đầu miễn phí

Tối ưu ở chỗ nào?

Hàm np.polyfit() mà bạn dùng để lấy các tham số hồi quy sẽ tìm slope và intercept tối ưu. Nó tối ưu tổng bình phương phần dư, còn gọi là RSS (residual sum of squares). Trong bài này, bạn sẽ vẽ hàm đang được tối ưu — tức RSS — theo tham số slope a. Để làm điều đó, cố định intercept bằng giá trị bạn tìm được khi tối ưu. Sau đó, vẽ RSS theo slope. Giá trị nhỏ nhất nằm ở đâu?

Bài tập này là một phần của khóa học

Tư duy Thống kê với Python (Phần 2)

Xem khóa học

Hướng dẫn bài tập

  • Xác định các giá trị của slope để tính RSS. Dùng np.linspace() để lấy 200 điểm trong khoảng từ 0 đến 0.1. Ví dụ, để lấy 100 điểm trong khoảng từ 0 đến 0.5, bạn có thể dùng np.linspace() như sau: np.linspace(0, 0.5, 100).
  • Khởi tạo một mảng rss để chứa RSS bằng np.empty_like() và mảng bạn vừa tạo ở trên. Hàm empty_like() trả về một mảng mới có cùng shape và kiểu với mảng cho trước (trong trường hợp này là a_vals).
  • Viết vòng lặp for để tính tổng RSS theo slope. Gợi ý: RSS được cho bởi np.sum((y_data - a * x_data - b)**2). Biến b bạn đã tính ở bài trước đã có sẵn trong phạm vi làm việc. Ở đây, fertilityy_datailliteracyx_data.
  • Vẽ RSS (rss) theo slope (a_vals).
  • Nhấn Gửi câu trả lời để xem biểu đồ!

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

# Specify slopes to consider: a_vals
a_vals = ____

# Initialize sum of square of residuals: rss
rss = ____

# Compute sum of square of residuals for each value of a_vals
for i, a in enumerate(a_vals):
    rss[i] = ____((____ - a*____ - b)**2)

# Plot the RSS
plt.plot(____, ____, '-')
plt.xlabel('slope (children per woman / percent illiterate)')
plt.ylabel('sum of square of residuals')

plt.show()
Chỉnh sửa và Chạy Mã