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)
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ấy200điểm trong khoảng từ0đến0.1. Ví dụ, để lấy100điểm trong khoảng từ0đến0.5, bạn có thể dùngnp.linspace()như sau:np.linspace(0, 0.5, 100). - Khởi tạo một mảng
rssđể chứa RSS bằngnp.empty_like()và mảng bạn vừa tạo ở trên. Hàmempty_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ởinp.sum((y_data - a * x_data - b)**2). Biếnbbạn đã tính ở bài trước đã có sẵn trong phạm vi làm việc. Ở đây,fertilitylày_datavàilliteracylàx_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()