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

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

Xem khóa học

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ảng x cho trước, hàm trả về a0 + a1*x.
  • Dùng hàm optimize.curve_fit() của scipy để tính các giá trị tối ưu cho a0a1.
  • Giải nén param_opt để lưu tham số mô hình thành a0 = param_opt[0]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(____, ____)
Chỉnh sửa và Chạy Mã