Curve_fit 2d trăn

Mô-đun này cung cấp các trình bao bọc, được gọi là Fitters, xung quanh một số chức năng khớp Numpy và Scipy. Tất cả Fitters có thể được gọi là chức năng. Họ lấy một thể hiện của # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 9 làm đầu vào và sửa đổi thuộc tính # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 0 của nó. Ý tưởng là làm cho điều này có thể mở rộng và cho phép người dùng dễ dàng thêm các bộ điều chỉnh khác

Khớp tuyến tính được thực hiện bằng chức năng # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 1 của Numpy. Hiện tại có những bộ điều chỉnh phi tuyến tính sử dụng # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 2, # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 3 và # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 4

Các quy tắc để chuyển đầu vào cho người lắp là

  • Bộ điều chỉnh phi tuyến tính hiện chỉ hoạt động với các mô hình đơn lẻ (không phải bộ mô hình)

  • Bộ điều chỉnh tuyến tính có thể điều chỉnh một đầu vào cho nhiều bộ mô hình để tạo ra nhiều mô hình phù hợp. Điều này có thể yêu cầu chỉ định đối số # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 0 giống như được sử dụng khi đánh giá các mô hình;

  • # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 1 hiện chỉ hoạt động với các mô hình đơn giản (không phức hợp)

  • Các bộ điều chỉnh hiện tại chỉ hoạt động với các mô hình có một đầu ra duy nhất (bao gồm các hàm hai biến như # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 2 chứ không phải các mô hình phức hợp ánh xạ # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 3)

  • Các đơn vị của dữ liệu khớp và các tham số mô hình bị loại bỏ trước khi khớp để các phương thức # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 4 cơ bản có thể xử lý dữ liệu này. Mọi người nên lưu ý điều này khi khớp dữ liệu với các đơn vị vì chuyển đổi đơn vị sẽ chỉ được thực hiện ban đầu. Các chuyển đổi này sẽ được thực hiện bằng cách sử dụng đối số # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 5 cho bộ điều chỉnh kết hợp với thuộc tính # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 6 của mô hình phù hợp

Ghi chú

Nói chung, các bộ điều chỉnh phi tuyến tính không hỗ trợ khớp với dữ liệu chứa các giá trị không hữu hạn. # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 7, # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 8, hoặc # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 9. Đây là một hạn chế của thư viện scipy cơ bản. Do đó, một lỗi sẽ xuất hiện bất cứ khi nào có bất kỳ giá trị không hữu hạn nào trong dữ liệu được trang bị. Để tránh lỗi này, người dùng nên “lọc” các giá trị không hữu hạn khỏi dữ liệu của họ, ví dụ: khi lắp một # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 00, với một # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 01 sử dụng # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 02 chứa các giá trị không hữu hạn, người ta có thể “lọc” các vấn đề này như sau đối với trường hợp 1D

# Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 3

hoặc cho trường hợp 2D

# Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask])

Lưu ý về khớp nối phi tuyến tính¶

Hiện có một số bộ điều chỉnh phi tuyến tính dựa trên một số thuật toán tối ưu hóa khác nhau. Lựa chọn thuật toán phụ thuộc vào vấn đề. Các bộ điều chỉnh phi tuyến tính chính là

  • # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 03, sử dụng thuật toán Levenberg-Marquardt thông qua hàm kế thừa scipy # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 2. Bộ điều chỉnh này hỗ trợ các giới hạn thông số thông qua điều kiện tối thiểu/tối đa không phức tạp, điều này có thể khiến các tham số “dính” vào một trong các giới hạn nếu trong quá trình điều chỉnh, tham số tiến gần đến giới hạn trong một số hoạt động điều chỉnh trung gian

  • # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 05, sử dụng thuật toán Trust Region Reflective (TRF) đặc biệt phù hợp với các bài toán thưa thớt lớn có giới hạn, xem # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 3 để biết thêm chi tiết. Lưu ý rằng bộ điều chỉnh này hỗ trợ các giới hạn tham số theo một cách tinh vi, điều này ngăn không cho quá trình khớp "dính" vào một trong các giới hạn được cung cấp. Bộ điều chỉnh này có thể được chuyển sang sử dụng phương thức giới hạn tối thiểu/tối đa bằng cách đặt # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 07 khi khởi tạo bộ điều chỉnh. Đây là thuật toán được đề xuất bởi scipy

  • # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 08, sử dụng thuật toán dogleg với các vùng tin cậy hình chữ nhật, trường hợp sử dụng điển hình là các vấn đề nhỏ với giới hạn. Không được đề xuất cho các sự cố với Jacobian thiếu thứ hạng, xem # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 3 để biết thêm chi tiết. Bộ điều chỉnh này hỗ trợ các giới hạn theo cách tương tự mà # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 05 thực hiện

  • # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 01, sử dụng thuật toán Levenberg-Marquardt (LM) do # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 3 triển khai. Không xử lý các giới hạn và/hoặc Jacobian thưa thớt. Thường là phương pháp hiệu quả nhất cho các bài toán nhỏ không ràng buộc. Nếu thuật toán Levenberg-Marquardt là mong muốn cho vấn đề của bạn, thì hiện tại bạn nên sử dụng trình điều chỉnh này thay vì # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 03 vì nó sử dụng phiên bản được đề xuất của thuật toán này trong scipy

Lắp mô hình 1-D đơn giản¶

Trong phần này, chúng ta xem xét một ví dụ đơn giản về khớp Gaussian với tập dữ liệu mô phỏng. Chúng tôi sử dụng các mô hình # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 04 và # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 05 và bộ điều chỉnh # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 03 để điều chỉnh dữ liệu

# Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 0

(png, svg, pdf)

Như đã trình bày ở trên, sau khi được khởi tạo, lớp fitter có thể được sử dụng như một hàm lấy mô hình ban đầu (# Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 07 hoặc # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 08) và các giá trị dữ liệu (# Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 09 và # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 90), đồng thời trả về một mô hình phù hợp (# Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 91 hoặc # Filter non-finite values from data mask = np.isfinite(data) # Fit model to filtered data model = fitter(model, x[mask], y[mask], data[mask]) 92)

Lắp mô hình 2-D đơn giản¶

Tương tự như ví dụ 1-D, chúng ta có thể tạo tập dữ liệu 2-D mô phỏng và điều chỉnh mô hình đa thức cho nó. Điều này có thể được sử dụng ví dụ để phù hợp với nền trong một hình ảnh

Chủ đề