Gaussian phù hợp với Python scipy

Ở đây chúng tôi thảo luận về lớp học của lmfit. Điều này có một hàm mô hình - một hàm tính toán mô hình cho một số dữ liệu - và cung cấp các phương thức để tạo tham số cho mô hình đó và khớp dữ liệu bằng hàm mô hình đó. Điều này gần với tinh thần hơn, nhưng với những lợi thế của việc sử dụng và lmfit

Ngoài việc cho phép bạn biến bất kỳ chức năng mô hình nào thành phương pháp điều chỉnh đường cong, Lmfit còn cung cấp các định nghĩa chính tắc cho nhiều hình dạng đường đã biết như các đỉnh Gaussian hoặc Lorentzian và các phân rã theo cấp số nhân được sử dụng rộng rãi trong nhiều lĩnh vực khoa học. Chúng có sẵn trong mô-đun sẽ được thảo luận chi tiết hơn trong chương tiếp theo []. Chúng tôi đề cập đến nó ở đây vì bạn có thể muốn tham khảo danh sách đó trước khi viết mô hình của riêng mình. Hiện tại, chúng tôi tập trung vào việc biến chức năng python thành các mô hình khớp cấp cao với lớp và sử dụng chúng để khớp dữ liệu

Thí dụ. Khớp dữ liệu với hồ sơ Gaussian

Hãy bắt đầu với một ví dụ đơn giản và phổ biến về khớp dữ liệu với đỉnh Gaussian. Như chúng ta sẽ thấy, có một lớp GaussianModel tích hợp cung cấp chức năng mô hình cho một hồ sơ Gaussian, nhưng ở đây chúng ta sẽ xây dựng của riêng mình. Chúng ta bắt đầu với một định nghĩa đơn giản về hàm mô hình.

>>> from numpy import sqrt, pi, exp, linspace
>>>
>>> def gaussian[x, amp, cen, wid]:
..    return amp * exp[-[x-cen]**2 /wid]
...

Chúng tôi muốn khớp hàm mục tiêu này với dữ liệu \[y[x]\] được đại diện bởi các mảng y and x. This can be done easily wit :

>>> from scipy.optimize import curve_fit
>>>
>>> x = linspace[-10,10]
>>> y = y = gaussian[x, 2.33, 0.21, 1.51] + np.random.normal[0, 0.2, len[x]]
>>>
>>> init_vals = [1, 0, 1]     # for [amp, cen, wid]
>>> best_vals, covar = curve_fit[gaussian, x, y, p0=init_vals]
>>> print best_vals

Chúng tôi lấy mẫu điểm dữ liệu ngẫu nhiên, dự đoán ban đầu về các giá trị mô hình và chạy với hàm mô hình, mảng dữ liệu và dự đoán ban đầu. Kết quả trả về là các giá trị tối ưu cho các tham số và ma trận hiệp phương sai. Nó đơn giản và rất hữu ích. Nhưng nó bỏ lỡ những lợi ích của lmfit

Để giải quyết vấn đề này với lmfit, chúng ta sẽ phải viết một hàm mục tiêu. Nhưng một chức năng như vậy sẽ khá đơn giản [về cơ bản, dữ liệu - mô hình . Mặc dù thuận tiện, nhưng việc giữ cho tham số được đặt tên thẳng là một gánh nặng [mặt khác, bạn được yêu cầu phải nhớ thứ tự tham số]. Sau khi thực hiện việc này một vài lần, nó sẽ xuất hiện dưới dạng mẫu lặp lại và chúng ta có thể tưởng tượng việc tự động hóa quy trình này. Đó là nơi lớp học đến.

cho phép chúng ta dễ dàng bọc hàm mô hình chẳng hạn như hàm gaussian . Thao tác này sẽ tự động tạo hàm dư thích hợp và xác định tên tham số tương ứng từ chính chữ ký của hàm.

>>> from lmfit import Model
>>> gmod = Model[gaussian]
>>> gmod.param_names
set[['amp', 'wid', 'cen']]
>>> gmod.independent_vars]
['x']

Mô hình gmod biết tên của các tham số và các biến độc lập. Theo mặc định, đối số đầu tiên của hàm được lấy làm biến độc lập, được giữ trong và phần còn lại của các đối số vị trí của hàm [và, trong một số trường hợp nhất định, đối số từ khóa – xem bên dưới] được sử dụng cho tên Tham số. Do đó, đối với hàm gaussian ở trên, các tham số được đặt tên là amp , . Như chúng ta sẽ thấy bên dưới, bạn có thể chỉ định biến độc lập là gì và bạn cũng có thể thêm hoặc thay đổi các tham số. cen, and wid, and x is the independent variable – all taken directly from the signature of the model function. As we will see below, you can specify what the independent variable is, and you can add or alter parameters, too.

Các tham số không được tạo khi tạo mô hình. Mô hình biết các tham số nên được đặt tên là gì, nhưng không biết gì về quy mô và phạm vi dữ liệu của bạn. Thông thường, bạn sẽ phải tạo các tham số này và gán các giá trị ban đầu và các thuộc tính khác. Để giúp bạn thực hiện điều này, mỗi mô hình có một phương thức make_params[] sẽ tạo ra các tham số với các tên dự kiến.

>>> params = gmod.make_params[]

Điều này tạo ra nhưng không nhất thiết cung cấp cho chúng các giá trị ban đầu – một lần nữa, mô hình không biết tỷ lệ nên là bao nhiêu. Bạn có thể đặt giá trị ban đầu cho tham số với đối số từ khóa thành make_params[] .

>>> params = gmod.make_params[cen=5, amp=200, wid=1]

hoặc gán chúng [và các thuộc tính tham số khác] sau khi đã được tạo

A có một số phương thức liên kết với nó. Ví dụ: người ta có thể sử dụng phương thức eval[] để đánh giá mô hình hoặc fit[] method to fit data to this model with a object. Both of these methods can take explicit keyword arguments for the parameter values. For example, one could use eval[] để tính hàm dự đoán.

>>> x = linspace[0, 10, 201]
>>> y = gmod.eval[x=x, amp=10, cen=6.2, wid=0.75]

Phải thừa nhận rằng đây là một cách hơi dài dòng để tính hàm Gaussian. Nhưng bây giờ mô hình đã được thiết lập, chúng ta cũng có thể sử dụng phương thức fit[] của nó để khớp mô hình này với dữ liệu, như với.

>>> result = gmod.fit[y, x=x, amp=5, cen=5, wid=1]

Kết hợp mọi thứ lại với nhau, tập lệnh để thực hiện phù hợp như vậy [có trong thư mục ví dụ cùng với mã nguồn] là.

#!/usr/bin/env python
#
from numpy import sqrt, pi, exp, linspace, loadtxt
from lmfit import  Model

import matplotlib.pyplot as plt

data = loadtxt['model1d_gauss.dat']
x = data[:, 0]
y = data[:, 1]

def gaussian[x, amp, cen, wid]:
    "1-d gaussian: gaussian[x, amp, cen, wid]"
    return [amp/[sqrt[2*pi]*wid]] * exp[-[x-cen]**2 /[2*wid**2]]

gmod = Model[gaussian]
result = gmod.fit[y, x=x, amp=5, cen=5, wid=1]

print[result.fit_report[]]

plt.plot[x, y,         'bo']
plt.plot[x, result.init_fit, 'k--']
plt.plot[x, result.best_fit, 'r-']
plt.show[]
#

khá nhỏ gọn và chính xác. kết quả trả về sẽ là một đối tượng. Như chúng ta sẽ thấy bên dưới, điều này có nhiều thành phần, bao gồm một phương thức fit_report[] , sẽ hiển thị.

________số 8_______

Kết quả cũng sẽ có sự phù hợp với các giá trị tham số ban đầu và một sự phù hợp với các giá trị tham số phù hợp nhất. Chúng có thể được sử dụng để tạo cốt truyện sau

hiển thị dữ liệu bằng các chấm màu xanh lam, khớp tốt nhất là đường liền màu đỏ và khớp ban đầu là đường đứt nét màu đen

Lưu ý rằng việc khớp mô hình thực sự được thực hiện với 2 dòng mã

gmod = Model[gaussian]
result = gmod.fit[y, x=x, amp=5, cen=5, wid=1]

Những dòng này thể hiện rõ ràng rằng chúng tôi muốn biến hàm gaussian thành một mô hình phù hợp, sau đó điều chỉnh \[y[x]\] data to this model, starting with values of 5 for amp, 5 for cen and 1 for wid. This is much more expressive than :

>>> from scipy.optimize import curve_fit
>>>
>>> x = linspace[-10,10]
>>> y = y = gaussian[x, 2.33, 0.21, 1.51] + np.random.normal[0, 0.2, len[x]]
>>>
>>> init_vals = [1, 0, 1]     # for [amp, cen, wid]
>>> best_vals, covar = curve_fit[gaussian, x, y, p0=init_vals]
>>> print best_vals
0

Ngoài ra, tất cả các tính năng khác của lmfit đều được bao gồm. có thể có giới hạn và ràng buộc và kết quả là một đối tượng phong phú có thể được sử dụng lại để khám phá mô hình phù hợp một cách chi tiết

Lớp

Lớp này cung cấp một cách chung để bọc một chức năng được xác định trước dưới dạng một mô hình phù hợp

Mô hình lớp[func [ , độc lập_vars=None [, param_names=None[, missing=None[, prefix=''[, name=None[, **kws]]]]]]]

Tạo một mô hình dựa trên chức năng do người dùng cung cấp. Điều này sử dụng nội quan để tự động chuyển đổi tên đối số của hàm thành tên Tham số

Thông số
  • func[] – chức năng mô hình được bao bọc
  • independent_vars [ None [mặc định] hoặc danh sách các chuỗi. ] – danh sách các tên đối số của func là các biến độc lập.
  • param_names [ Không có [mặc định] hoặc danh sách chuỗi] – danh sách tên đối số cho func . that should be made into Parameters.
  • thiếu [một trong số Không có [mặc định], 'không', 'bỏ' hoặc 'tăng'. ] – cách xử lý các giá trị bị thiếu.
  • tiền tố [] – tiền tố để thêm vào tất cả các tên tham số để phân biệt các thành phần trong một
  • tên [ Không có hoặc chuỗi. ] – tên cho mô hình. Khi Không có [mặc định] thì tên giống với hàm mô hình [ func].
  • kws – đối số từ khóa bổ sung để chuyển đến chức năng mô hình

Tất nhiên, hàm mô hình sẽ phải trả về một mảng có cùng kích thước với dữ liệu được mô hình hóa. Nói chung, điều này được xử lý bằng cách chỉ định một hoặc nhiều biến độc lập

phương pháp lớp học

Người mẫu. eval[params=None [ , **kws ] ]> from scipy.optimize import curve_fit >>> >>> x = linspace[-10,10] >>> y = y = gaussian[x, 2.33, 0.21, 1.51] + np.random.normal[0, 0.2, len[x]] >>> >>> init_vals = [1, 0, 1] # for [amp, cen, wid] >>> best_vals, covar = curve_fit[gaussian, x, y, p0=init_vals] >>> print best_vals 1

Ở đây, t được coi là biến độc lập vì nó là đối số đầu tiên của hàm. Các đối số chức năng khác được sử dụng để tạo tham số cho mô hình.

Nếu bạn muốn tau là biến độc lập trong ví dụ trên, bạn có thể nói như vậy.

>>> from scipy.optimize import curve_fit
>>>
>>> x = linspace[-10,10]
>>> y = y = gaussian[x, 2.33, 0.21, 1.51] + np.random.normal[0, 0.2, len[x]]
>>>
>>> init_vals = [1, 0, 1]     # for [amp, cen, wid]
>>> best_vals, covar = curve_fit[gaussian, x, y, p0=init_vals]
>>> print best_vals
2

Bạn cũng có thể cung cấp nhiều giá trị cho các hàm nhiều chiều với nhiều biến độc lập. Trên thực tế, ý nghĩa của biến độc lập ở đây rất đơn giản và dựa trên cách nó xử lý các đối số của hàm mà bạn đang lập mô hình

đối số hàm biến độc lập không phải là tham số hay nói cách khác là một phần của mô hình và sẽ được yêu cầu cung cấp rõ ràng dưới dạng đối số từ khóa cho mỗi sự phù hợp với hoặc đánh giá với

Lưu ý rằng các biến độc lập không bắt buộc phải là mảng hoặc thậm chí là số dấu phẩy động

Hàm với đối số từ khóa

Nếu hàm mô hình có các tham số từ khóa, các tham số này sẽ được chuyển thành Tham số nếu giá trị mặc định được cung cấp là một số hợp lệ [chứ không phải Không có . True, or False].

>>> from scipy.optimize import curve_fit
>>>
>>> x = linspace[-10,10]
>>> y = y = gaussian[x, 2.33, 0.21, 1.51] + np.random.normal[0, 0.2, len[x]]
>>>
>>> init_vals = [1, 0, 1]     # for [amp, cen, wid]
>>> best_vals, covar = curve_fit[gaussian, x, y, p0=init_vals]
>>> print best_vals
3

Ở đây, mặc dù N là một đối số từ khóa của hàm, nhưng nó được chuyển thành một tham số, với giá trị số mặc định là . Theo mặc định, nó được phép thay đổi để phù hợp – 10 được lấy làm giá trị ban đầu, không phải giá trị cố định. Mặt khác, đối số từ khóa check_positive không được chuyển đổi thành tham số vì nó có giá trị mặc định boolean. Theo một nghĩa nào đó, check_positive trở thành một biến độc lập đối với mô hình. Tuy nhiên, vì nó có giá trị mặc định nên nó không bắt buộc phải được cung cấp cho từng đánh giá hoặc mức độ phù hợp của mô hình, vì các biến độc lập là.

Xác định tiền tố cho Tham số

Như chúng ta sẽ thấy trong chương tiếp theo khi kết hợp các mô hình, đôi khi cần phải trang trí các tên tham số trong mô hình, nhưng chúng vẫn được sử dụng chính xác trong chức năng mô hình cơ bản. Điều này là cần thiết, ví dụ, nếu hai tham số trong một mô hình tổng hợp [xem hoặc các ví dụ trong chương tiếp theo] có cùng tên. Để tránh điều này, chúng ta có thể thêm tiền tố vào tiền tố sẽ tự động thực hiện ánh xạ này cho chúng ta.

>>> from scipy.optimize import curve_fit
>>>
>>> x = linspace[-10,10]
>>> y = y = gaussian[x, 2.33, 0.21, 1.51] + np.random.normal[0, 0.2, len[x]]
>>>
>>> init_vals = [1, 0, 1]     # for [amp, cen, wid]
>>> best_vals, covar = curve_fit[gaussian, x, y, p0=init_vals]
>>> print best_vals
4

>>> from scipy.optimize import curve_fit
>>>
>>> x = linspace[-10,10]
>>> y = y = gaussian[x, 2.33, 0.21, 1.51] + np.random.normal[0, 0.2, len[x]]
>>>
>>> init_vals = [1, 0, 1]     # for [amp, cen, wid]
>>> best_vals, covar = curve_fit[gaussian, x, y, p0=init_vals]
>>> print best_vals
5

Bạn sẽ gọi các tham số này là f1_amplitude , v.v. và mô hình sẽ biết ánh xạ các tham số này tới amplitude argument of myfunc.

Khởi tạo tham số mô hình

Như đã đề cập ở trên, các tham số được tạo bởi thường được tạo với các giá trị ban đầu không hợp lệ là Không có . Các giá trị này phải được khởi tạo để mô hình được đánh giá hoặc sử dụng phù hợp. Có bốn cách khác nhau để thực hiện khởi tạo này có thể được sử dụng trong mọi kết hợp.

  1. Bạn có thể cung cấp các giá trị ban đầu trong định nghĩa của hàm mô hình
  2. Bạn có thể khởi tạo các tham số khi tạo tham số với
  3. Bạn có thể đưa ra gợi ý tham số với
  4. Bạn có thể cung cấp các giá trị ban đầu cho các tham số khi bạn sử dụng các phương thức hoặc

Tất nhiên các phương pháp này có thể được trộn lẫn, cho phép bạn ghi đè lên các giá trị ban đầu tại bất kỳ thời điểm nào trong quá trình xác định và sử dụng mô hình

Khởi tạo giá trị trong định nghĩa hàm

Để cung cấp các giá trị ban đầu cho các tham số trong định nghĩa của hàm mô hình, bạn chỉ cần cung cấp một giá trị mặc định

>>> from scipy.optimize import curve_fit
>>>
>>> x = linspace[-10,10]
>>> y = y = gaussian[x, 2.33, 0.21, 1.51] + np.random.normal[0, 0.2, len[x]]
>>>
>>> init_vals = [1, 0, 1]     # for [amp, cen, wid]
>>> best_vals, covar = curve_fit[gaussian, x, y, p0=init_vals]
>>> print best_vals
6

thay vì sử dụng

>>> from scipy.optimize import curve_fit
>>>
>>> x = linspace[-10,10]
>>> y = y = gaussian[x, 2.33, 0.21, 1.51] + np.random.normal[0, 0.2, len[x]]
>>>
>>> init_vals = [1, 0, 1]     # for [amp, cen, wid]
>>> best_vals, covar = curve_fit[gaussian, x, y, p0=init_vals]
>>> print best_vals
7

Điều này có lợi thế là hoạt động ở cấp chức năng – tất cả các tham số có từ khóa có thể được coi là tùy chọn. Điều đó cũng có nghĩa là một số giá trị ban đầu mặc định sẽ luôn có sẵn cho tham số

Khởi tạo giá trị với

Khi tạo tham số với bạn có thể chỉ định giá trị ban đầu. Để thực hiện việc này, hãy sử dụng đối số từ khóa cho tên tham số và giá trị ban đầu

>>> from scipy.optimize import curve_fit
>>>
>>> x = linspace[-10,10]
>>> y = y = gaussian[x, 2.33, 0.21, 1.51] + np.random.normal[0, 0.2, len[x]]
>>>
>>> init_vals = [1, 0, 1]     # for [amp, cen, wid]
>>> best_vals, covar = curve_fit[gaussian, x, y, p0=init_vals]
>>> print best_vals
8

Khởi tạo giá trị bằng cách đặt gợi ý tham số

Sau khi mô hình đã được tạo, nhưng trước khi tạo tham số bằng , bạn có thể đặt gợi ý tham số. Điều này cho phép bạn không chỉ đặt giá trị ban đầu mặc định mà còn đặt các giới hạn kiểm soát thuộc tính tham số khác, cho dù giá trị đó thay đổi theo mức độ phù hợp hay biểu thức ràng buộc. Để đặt gợi ý tham số, bạn có thể sử dụng , như với

>>> from scipy.optimize import curve_fit
>>>
>>> x = linspace[-10,10]
>>> y = y = gaussian[x, 2.33, 0.21, 1.51] + np.random.normal[0, 0.2, len[x]]
>>>
>>> init_vals = [1, 0, 1]     # for [amp, cen, wid]
>>> best_vals, covar = curve_fit[gaussian, x, y, p0=init_vals]
>>> print best_vals
9

Gợi ý tham số được thảo luận chi tiết hơn trong phần

Khởi tạo giá trị khi sử dụng model

Cuối cùng, bạn có thể cung cấp các giá trị ban đầu một cách rõ ràng khi sử dụng một mô hình. Nghĩa là, như với , bạn có thể bao gồm các giá trị làm đối số từ khóa cho phương thức hoặc

>>> from lmfit import Model
>>> gmod = Model[gaussian]
>>> gmod.param_names
set[['amp', 'wid', 'cen']]
>>> gmod.independent_vars]
['x']
0

Những cách tiếp cận khởi tạo này cung cấp nhiều cơ hội để đặt giá trị ban đầu cho các tham số. Các phương thức có thể được kết hợp để bạn có thể đặt gợi ý tham số nhưng sau đó thay đổi giá trị ban đầu một cách rõ ràng bằng

Sử dụng gợi ý tham số

Sau khi mô hình đã được tạo, bạn có thể đưa ra gợi ý về cách tạo tham số với. Điều này cho phép bạn không chỉ đặt giá trị ban đầu mặc định mà còn đặt các giới hạn kiểm soát thuộc tính tham số khác, cho dù giá trị đó thay đổi theo mức độ phù hợp hay biểu thức ràng buộc. Để đặt gợi ý tham số, bạn có thể sử dụng , như với

>>> from lmfit import Model
>>> gmod = Model[gaussian]
>>> gmod.param_names
set[['amp', 'wid', 'cen']]
>>> gmod.independent_vars]
['x']
1

Gợi ý tham số được lưu trữ trong thuộc tính của mô hình, thuộc tính này đơn giản là một từ điển lồng nhau

>>> from lmfit import Model
>>> gmod = Model[gaussian]
>>> gmod.param_names
set[['amp', 'wid', 'cen']]
>>> gmod.independent_vars]
['x']
2

Bạn có thể thay đổi từ điển này trực tiếp hoặc bằng phương pháp. Dù bằng cách nào, các gợi ý tham số này được sử dụng khi tạo tham số

Một tính năng quan trọng của gợi ý tham số là bạn có thể buộc tạo tham số mới bằng gợi ý tham số. Điều này có thể hữu ích để tạo các tham số dẫn xuất với các biểu thức ràng buộc. Ví dụ: để có được toàn bộ chiều rộng ở mức tối đa một nửa của mô hình Gaussian, người ta có thể sử dụng gợi ý tham số là

>>> from lmfit import Model
>>> gmod = Model[gaussian]
>>> gmod.param_names
set[['amp', 'wid', 'cen']]
>>> gmod.independent_vars]
['x']
3

Lớp

A là đối tượng được trả về bởi. Nó là một phân lớp của , và do đó chứa nhiều kết quả phù hợp. Tất nhiên, nó biết và tập hợp được sử dụng trong sự phù hợp và nó có các phương pháp để đánh giá mô hình, để khớp với dữ liệu [hoặc khớp lại dữ liệu với các thay đổi đối với các tham số hoặc khớp với dữ liệu khác hoặc đã sửa đổi] và

Mặc dù a đóng gói chức năng mô hình của bạn, nhưng nó khá trừu tượng và không chứa các tham số hoặc dữ liệu được sử dụng trong một sự phù hợp cụ thể. A không chứa các tham số và dữ liệu cũng như các phương thức để thay đổi và làm lại các khớp. Do đó, the là mô hình được lý tưởng hóa trong khi the là đối tượng phức tạp hơn, phức tạp hơn [nhưng có lẽ hữu ích hơn] thể hiện sự phù hợp với một tập hợp các tham số đối với dữ liệu với một mô hình

A có một số thuộc tính giữ giá trị cho kết quả phù hợp và một số phương pháp để làm việc với kết quả phù hợp. Chúng bao gồm các số liệu thống kê được kế thừa từ hữu ích để so sánh các mô hình khác nhau, bao gồm chisqr, redchi, aic và bic

lớp ModelFit

Sự phù hợp của mô hình dự kiến ​​sẽ được tạo và trả về bởi

phương pháp

Tất cả các phương thức này đều được kế thừa từ Minimize hoặc từ.

ModelFit. eval[**kwargs]

đánh giá mô hình bằng cách sử dụng các tham số phù hợp nhất và các biến độc lập được cung cấp. Các đối số **kwargs có thể được sử dụng để cập nhật các giá trị tham số và/hoặc các biến độc lập.

ModelFit. eval_components[**kwargs]

đánh giá từng thành phần của a , trả về một từ điển có thứ tự của với các giá trị cho từng mô hình thành phần. Từ điển được trả về sẽ có các khóa của tiền tố mô hình hoặc [nếu không có tiền tố nào được cung cấp], tên mô hình. Các đối số **kwargs có thể được sử dụng để cập nhật các giá trị tham số và/hoặc các biến độc lập.

ModelFit. fit[data=None [ , params=None [ , weights= [, method=None[, **kwargs]]]]]

điều chỉnh [hoặc điều chỉnh lại], tùy ý thay đổi dữ liệu , tham số, weights, or method, or changing the independent variable[s] with the **kwargs argument. See for argument descriptions, and note that any value of None đều mặc định là giá trị được sử dụng cuối cùng.

ModelFit. fit_report[modelpars=None [ , show_correl=True [ , `< . 1 ]] ]

trả về một báo cáo phù hợp có thể in cho phù hợp với thống kê phù hợp, giá trị phù hợp nhất với độ không đảm bảo và mối tương quan. Như với

Thông số
  • modelpars – Tham số có “Giá trị đã biết” [tùy chọn, mặc định Không có]
  • show_correl – có hiển thị danh sách các mối tương quan đã sắp xếp hay không [ True ]
  • min_correl – giá trị tuyệt đối tương quan nhỏ nhất để hiển thị [0. 1]
ModelFit. cốt truyện[datafmt='o', fitfmt='-', initfmt='--', yerr=Không, numpoints=Không, fig=Không, data_kws=Không, fit_kws=Không, init_kws=Không, ax_res_kws=Không, ax_fit_kws

Viết kết quả khớp và phần dư bằng matplotlib, nếu có. Biểu đồ sẽ bao gồm hai bảng, một bảng hiển thị phần dư phù hợp và bảng còn lại có các điểm dữ liệu, đường cong phù hợp ban đầu và đường cong phù hợp nhất. Nếu mô hình phù hợp bao gồm các trọng số hoặc nếu yerr được chỉ định, các thanh lỗi cũng sẽ được vẽ.

Thông số
  • datafmt [ Không có hoặc chuỗi. ] – chuỗi định dạng matplotlib cho đường cong dữ liệu.
  • fitfmt [ Không có hoặc chuỗi. ] – chuỗi định dạng matplotlib cho đường cong phù hợp nhất.
  • initfmt – chuỗi định dạng matplotlib cho đường cong ban đầu
  • yerr [ Không hoặc ndarray. ] – mảng độ không đảm bảo cho mảng dữ liệu.
  • numpoints [ None or integer] – số điểm hiển thị
  • fig [ Không có hoặc matplotlib. nhân vật. Hình] – matplotlib Hình để vẽ trên.
  • data_kws [ Không có hoặc từ điển] – đối số từ khóa được chuyển đến đồ thị cho đường cong dữ liệu.
  • fit_kws [ Không có hoặc từ điển] – đối số từ khóa được chuyển đến đồ thị cho đường cong phù hợp nhất.
  • init_kws [ Không có hoặc từ điển] – các đối số từ khóa được chuyển đến đồ thị cho đường cong ban đầu.
  • ax_res_kws [ Không có hoặc từ điển] – đối số từ khóa được chuyển để tạo trục matplotlib cho biểu đồ còn lại.
  • ax_fit_kws [ Không có hoặc từ điển] – đối số từ khóa được chuyển để tạo trục matplotlib cho biểu đồ phù hợp.
  • fig_kws [ Không có hoặc từ điển] – đối số từ khóa được chuyển để tạo hình matplotlib.
trả lại

matplotlib. nhân vật. Nhân vật

Điều này kết hợp và ModelFit. plot_residual[] .

Nếu yerr được chỉ định hoặc nếu mô hình phù hợp bao gồm trọng số, thì matplotlib. trục. trục. errorbar được sử dụng để vẽ dữ liệu. Nếu yerr không được chỉ định và sự phù hợp bao gồm các trọng số, yerr được đặt thành . trọng lượng 1/self.weights

Nếu fig là Không thì matplotlib. pyplot. figure[**fig_kws] được gọi.

ModelFit. plot_fit[ax=Không, datafmt='o', fitfmt='-', initfmt='--', yerr=Không, numpoints=Không, data_kws=Không, fit_kws=Không, init_kws=Không, ax_kws=Không]

Viết kết quả phù hợp bằng matplotlib, nếu có. Biểu đồ sẽ bao gồm các điểm dữ liệu, đường cong phù hợp ban đầu và đường cong phù hợp nhất. Nếu mô hình phù hợp bao gồm các trọng số hoặc nếu yerr được chỉ định, các thanh lỗi cũng sẽ được vẽ.

Thông số
  • ax [ Không có hoặc matplotlib. trục. trục. ] – trục matplotlib để vẽ trên.
  • datafmt [ Không có hoặc chuỗi. ] – chuỗi định dạng matplotlib cho đường cong dữ liệu.
  • fitfmt [ Không có hoặc chuỗi. ] – chuỗi định dạng matplotlib cho đường cong phù hợp nhất.
  • initfmt – chuỗi định dạng matplotlib cho đường cong ban đầu
  • yerr [ Không hoặc ndarray. ] – mảng độ không đảm bảo cho mảng dữ liệu.
  • numpoints [ None or integer] – số điểm hiển thị
  • data_kws [ Không có hoặc từ điển] – đối số từ khóa được chuyển đến đồ thị cho đường cong dữ liệu.
  • fit_kws [ Không có hoặc từ điển] – đối số từ khóa được chuyển đến đồ thị cho đường cong phù hợp nhất.
  • init_kws [ Không có hoặc từ điển] – các đối số từ khóa được chuyển đến đồ thị cho đường cong ban đầu.
  • ax_kws [ Không có hoặc từ điển] – đối số từ khóa được chuyển để tạo trục matplotlib.
trả lại

matplotlib. trục. trục

Để biết chi tiết về chuỗi định dạng biểu đồ và đối số từ khóa, hãy xem tài liệu về matplotlib. trục. trục. cốt truyện[] .

Nếu yerr được chỉ định hoặc nếu mô hình phù hợp bao gồm trọng số, thì matplotlib. trục. trục. errorbar được sử dụng để vẽ dữ liệu. Nếu yerr không được chỉ định và sự phù hợp bao gồm các trọng số, yerr được đặt thành . trọng lượng 1/self.weights

Nếu ax là Không thì matplotlib. pyplot. gca[**ax_kws] được gọi.

ModelFit. plot_residuals[ax=None, datafmt='o', yerr=None, data_kws=None, fit_kws=None, ax_kws=None]

Viết phần dư phù hợp [dữ liệu - vừa] bằng matplotlib. Nếu yerr được cung cấp hoặc nếu mô hình bao gồm trọng số, các thanh lỗi cũng sẽ được vẽ.

tham số rìu. trục matplotlib để vẽ trên. loại rìu. Không có hoặc matplotlib. trục. trục. thông số dữ liệufmt. chuỗi định dạng matplotlib cho đường cong dữ liệu. gõ datafmt. Không có hoặc chuỗi. tham số yerr. mảng không chắc chắn cho mảng dữ liệu. gõ yerr. Không có hoặc ndarray. tham số. số lượng điểm để hiển thị kiểu numpoints. Không có hoặc số nguyênparam data_kws. đối số từ khóa được chuyển đến biểu đồ cho đường cong dữ liệu. nhập dữ liệu_kws. Không có hoặc từ điểnparam fit_kws. đối số từ khóa được chuyển đến biểu đồ cho đường cong phù hợp nhất. gõ fit_kws. Không có hoặc từ điểnparam ax_kws. đối số từ khóa được chuyển để tạo trục matplotlib. gõ ax_kws. Không có hoặc trả về từ điển. matplotlib. trục. Trục

Để biết chi tiết về chuỗi định dạng biểu đồ và đối số từ khóa, hãy xem tài liệu về matplotlib. trục. trục. cốt truyện[] .

Nếu yerr được chỉ định hoặc nếu mô hình phù hợp bao gồm trọng số, thì matplotlib. trục. trục. errorbar được sử dụng để vẽ dữ liệu. Nếu yerr không được chỉ định và sự phù hợp bao gồm các trọng số, yerr được đặt thành . trọng lượng 1/self.weights

Nếu ax là Không thì matplotlib. pyplot. gca[**ax_kws] được gọi.

thuộc tính

aic

Thống kê Tiêu chí Thông tin Akaike phù hợp nhất với dấu phẩy động [xem ]

phù hợp nhất

kết quả ndarray của hàm mô hình, được đánh giá tại các biến độc lập được cung cấp và với các tham số phù hợp nhất

best_values

từ điển có tên tham số làm khóa và giá trị phù hợp nhất làm giá trị

nhị phân

thống kê Tiêu chí Thông tin Bayesian phù hợp nhất với dấu phẩy động [xem ]

chisqr

thống kê chi bình phương phù hợp nhất với dấu phẩy động [xem phần ]

đồng cỏ

ma trận hiệp phương sai ndarray [hình vuông] được trả về từ sự phù hợp

dữ liệu

ndarray dữ liệu để so sánh với mô hình

thanh báo lỗi

boolean để biết liệu các thanh lỗi có được ước tính theo mức độ phù hợp hay không

ier

số nguyên trả về mã từ

init_fit

kết quả ndarray của hàm mô hình, được đánh giá tại các biến độc lập được cung cấp và với các tham số ban đầu

init_params

tham số ban đầu

init_values

từ điển với tên tham số là khóa và giá trị ban đầu là giá trị

iter_cb

hàm có thể gọi tùy chọn, được gọi ở mỗi lần lặp phù hợp. Điều này phải nhận đối số của params, iter, resid, *args . **kws, where params will have the current parameter values, iter the iteration, resid the current residual array, and *args and **kws as passed to the objective function.

jcfcn

chức năng có thể gọi tùy chọn, được gọi để tính toán mảng jacobian

lmdif_message

tin nhắn chuỗi được trả về từ

thông điệp

tin nhắn chuỗi được trả về từ

phương pháp

phương pháp đặt tên chuỗi cho

mô hình

trường hợp được sử dụng cho mô hình

dữ liệu

số nguyên của điểm dữ liệu

nfev

số nguyên đánh giá chức năng được sử dụng cho phù hợp

miễn phí

số nguyên của các tham số miễn phí phù hợp

nvary

số nguyên của các biến độc lập, biến thiên tự do phù hợp

thông số

Các thông số được sử dụng phù hợp. Sẽ có giá trị phù hợp nhất

redchi

dấu phẩy động giảm thống kê chi-square [xem ]

ndarray cho dư

scale_covar

cờ boolean để biết có tự động chia tỷ lệ ma trận hiệp phương sai hay không

sự thành công

giá trị boolean của việc phù hợp có thành công hay không

tạ

ndarray [hoặc Không có ] giá trị trọng số sẽ được sử dụng phù hợp. Nếu không Không có , nó sẽ được sử dụng làm hệ số nhân của mảng dư, sao cho weights*[data . - fit] is minimized in the least-squares sense.

Mô hình tổng hợp. thêm [hoặc nhân] Mô hình

Một trong những tính năng thú vị hơn của lớp là các Mô hình có thể được cộng với nhau hoặc kết hợp với các phép toán đại số cơ bản [cộng, trừ, nhân và chia] để tạo ra một mô hình tổng hợp. Mô hình tổng hợp sẽ có các tham số từ mỗi mô hình thành phần, với tất cả các tham số có sẵn để tác động đến toàn bộ mô hình. Khả năng kết hợp các mô hình này sẽ trở nên hữu ích hơn nữa trong chương tiếp theo, khi các lớp con dựng sẵn của được thảo luận. Hiện tại, chúng ta sẽ xem xét một ví dụ đơn giản và xây dựng mô hình Gaussian cộng với một đường thẳng, để mô hình hóa một đỉnh có nền. Đối với một vấn đề đơn giản như vậy, chúng ta chỉ cần xây dựng một mô hình bao gồm cả hai thành phần

>>> from lmfit import Model
>>> gmod = Model[gaussian]
>>> gmod.param_names
set[['amp', 'wid', 'cen']]
>>> gmod.independent_vars]
['x']
4

và sử dụng nó với

>>> from lmfit import Model
>>> gmod = Model[gaussian]
>>> gmod.param_names
set[['amp', 'wid', 'cen']]
>>> gmod.independent_vars]
['x']
5

Nhưng chúng ta đã có một hàm cho hàm gaussian và có thể chúng ta sẽ phát hiện ra rằng nền tuyến tính là không đủ, điều đó có nghĩa là hàm mô hình sẽ phải được thay đổi. Thay vào đó, chúng ta có thể định nghĩa một hàm tuyến tính

>>> from lmfit import Model
>>> gmod = Model[gaussian]
>>> gmod.param_names
set[['amp', 'wid', 'cen']]
>>> gmod.independent_vars]
['x']
6

và xây dựng một mô hình tổng hợp chỉ với

>>> from lmfit import Model
>>> gmod = Model[gaussian]
>>> gmod.param_names
set[['amp', 'wid', 'cen']]
>>> gmod.independent_vars]
['x']
7

Mô hình này có các tham số cho cả hai mô hình thành phần và có thể được sử dụng như

>>> from lmfit import Model
>>> gmod = Model[gaussian]
>>> gmod.param_names
set[['amp', 'wid', 'cen']]
>>> gmod.independent_vars]
['x']
8

in ra kết quả

>>> from lmfit import Model
>>> gmod = Model[gaussian]
>>> gmod.param_names
set[['amp', 'wid', 'cen']]
>>> gmod.independent_vars]
['x']
9

và hiển thị cốt truyện bên trái

Ở bên trái, dữ liệu được hiển thị bằng các chấm màu xanh lam, mức độ khớp tổng thể được hiển thị bằng đường liền màu đỏ và mức độ khớp ban đầu được hiển thị bằng đường đứt nét màu đen. Trong hình bên phải, dữ liệu lại được hiển thị bằng các chấm màu xanh lam và thành phần Gaussian được hiển thị dưới dạng đường đứt nét màu đen và thành phần tuyến tính được hiển thị dưới dạng đường đứt nét màu đỏ. Các thành phần này được tạo sau khi khớp bằng phương pháp Mô hình của kết quả

>>> params = gmod.make_params[]
0

trả về từ điển của các thành phần, sử dụng các khóa của tên kiểu máy [hoặc tiền tố nếu được đặt]. Điều này sẽ sử dụng các giá trị tham số trong kết quả. thông số và các biến độc lập [ x ] được sử dụng trong quá trình điều chỉnh. Lưu ý rằng mặc dù kết quả được giữ lại lưu trữ các tham số tốt nhất và ước tính tốt nhất của mô hình trong kết quả. best_fit , mô hình ban đầu và các tham số trong pars không được thay đổi.

Bạn có thể áp dụng mô hình tổng hợp này cho các tập dữ liệu khác hoặc đánh giá mô hình ở các giá trị khác của x . Bạn có thể muốn làm điều này để cung cấp khoảng cách giữa các điểm dữ liệu mịn hơn hoặc thô hơn hoặc để ngoại suy mô hình bên ngoài phạm vi phù hợp. Điều này có thể được thực hiện với.

>>> params = gmod.make_params[]
1

Trong ví dụ này, tên đối số cho các hàm mô hình không trùng nhau. Nếu có, đối số prefix to sẽ cho phép chúng tôi xác định tham số nào đi cùng với mô hình thành phần nào. Như chúng ta sẽ thấy trong chương tiếp theo, việc sử dụng các mô hình tổng hợp với các mô hình có sẵn cung cấp một cách đơn giản để xây dựng các mô hình phức tạp.

class CompositeModel[left, right, op [ , **kws ]]

Tạo một mô hình tổng hợp từ hai mô hình [trái và phải và một toán tử nhị phân [op]. Từ khóa bổ sung được chuyển đến

Thông số
  • left [] – bên trái Model
  • right [] – mô hình bên phải
  • op [có thể gọi được và lấy 2 đối số [trái và phải]. ] – toán tử nhị phân

Thông thường, người ta không cần phải tạo rõ ràng một , như làm

>>> params = gmod.make_params[]
2

sẽ tự động tạo một. Trong ví dụ này, chế độ. bên trái sẽ là Model[fcn1], mod. op sẽ là toán tử. thêm [] và sửa đổi. bên phải sẽ là một CompositeModel khác có thuộc tính bên trái là Model[fcn2], một op của toán tử. mul[] và quyền của Model[fcn3].

Nếu bạn muốn sử dụng toán tử nhị phân ngoài cộng, trừ, nhân hoặc chia được hỗ trợ thông qua cú pháp Python thông thường, bạn sẽ cần tạo một toán tử nhị phân một cách rõ ràng với toán tử nhị phân thích hợp. Ví dụ: để tích chập hai mô hình, bạn có thể xác định một hàm tích chập đơn giản, có thể là

>>> params = gmod.make_params[]
3

mở rộng dữ liệu theo cả hai hướng sao cho hàm nhân tích chập cho kết quả hợp lệ trên phạm vi dữ liệu. Vì hàm này nhận hai đối số mảng và trả về một mảng nên nó có thể được sử dụng làm toán tử nhị phân. Một kịch bản đầy đủ sử dụng kỹ thuật này là ở đây

>>> params = gmod.make_params[]
4

in ra kết quả

>>> params = gmod.make_params[]
5

và cho thấy các lô

Sử dụng các mô hình tổng hợp với các toán tử tùy chỉnh hoặc tích hợp sẵn cho phép bạn xây dựng các mô hình phức tạp từ các thành phần phụ có thể kiểm tra

Có chức năng Gaussian trong Python không?

gauss[] gauss[] là một phương thức sẵn có của mô-đun ngẫu nhiên . Nó được sử dụng để trả về một số dấu phẩy động ngẫu nhiên với phân phối gaussian.

Phù hợp Gaussian là gì?

Phân phối Gauss với trung bình m và phương sai s 2 là phân phối thống kê có hàm xác suất . và một phân phối Gaussian tùy ý có thể được chuyển đổi thành một phân phối chuẩn thông thường bằng cách thay đổi các biến thành.

Làm cách nào để sử dụng Curve_fit trong Python?

Điều chỉnh dữ liệu .
Nhập hàm curve_fit từ scipy
Tạo một danh sách hoặc mảng gọn gàng của biến độc lập của bạn [giá trị x của bạn]. .
Tạo một danh sách các mảng numpy của các biến phụ thuộc của bạn [giá trị y của bạn]. .
Tạo một hàm cho phương trình bạn muốn điều chỉnh. .
Sử dụng chức năng curve_fit để điều chỉnh dữ liệu của bạn

Sự khác biệt giữa Gaussian và phân phối bình thường là gì?

Phân phối chuẩn, còn được gọi là phân phối Gaussian, là phân phối xác suất đối xứng về giá trị trung bình, cho thấy dữ liệu gần giá trị trung bình xuất hiện thường xuyên hơn dữ liệu ở xa giá trị trung bình. Ở dạng đồ họa, phân phối chuẩn xuất hiện dưới dạng "đường cong hình chuông"

Chủ Đề