Tối ưu hóa với Scipy
Có thể viết một cách cài đặt numpy cho nghiệm giải tích để tìm giá trị RSS nhỏ nhất. Nhưng với các mô hình phức tạp hơn, không thể tìm được công thức giải tích, nên chúng ta chuyển sang các phương pháp khác.
Trong bài tập này, bạn sẽ dùng scipy.optimize để áp dụng một cách tiếp cận tổng quát hơn nhằm giải cùng một bài toán tối ưu.
Qua đó, bạn sẽ thấy các giá trị trả về bổ sung từ phương thức này cho chúng ta biết “mức tốt nhất” tốt đến đâu. Ở đây, chúng ta sẽ dùng cùng dữ liệu đo được và tham số như ở bài trước để dễ so sánh với cách làm mới bằng scipy.
Bài tập này là một phần của khóa học
Nhập môn Mô hình tuyến tính với Python
Hướng dẫn bài tập
- Định nghĩa hàm
model_func(x, a0, a1)sao cho với một mảngxcho trước, hàm trả vềa0 + a1*x. - Dùng hàm
optimize.curve_fit()củascipyđể tính các giá trị tối ưu choa0vàa1. - Giải nén
param_optđể lưu tham số mô hình thànha0 = param_opt[0]vàa1 = param_opt[1]. - Dùng hàm đã định nghĩa sẵn
compute_rss_and_plot_fitđể kiểm tra và xác nhận câu trả lời của bạn.
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.
# Define a model function needed as input to scipy
def model_func(x, a0, a1):
return ____ + (____*x)
# Load the measured data you want to model
x_data, y_data = load_data()
# call curve_fit, passing in the model function and data; then unpack the results
param_opt, param_cov = optimize.curve_fit(____, x_data, y_data)
a0 = param_opt[0] # a0 is the intercept in y = a0 + a1*x
a1 = param_opt[1] # a1 is the slope in y = a0 + a1*x
# test that these parameters result in a model that fits the data
fig, rss = compute_rss_and_plot_fit(____, ____)