Hướng dẫn minimize rmse python - giảm thiểu trăn rmse

-2

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi đang sử dụng tuyến tính () từ sklearn để dự đoán. Tôi đã tạo các tính năng khác nhau cho X và cố gắng hiểu làm thế nào tôi có thể chọn các tính năng tốt nhất tự động? Giả sử tôi đã xác định 50 tính năng khác nhau cho X và chỉ một đầu ra cho y. Có cách nào để chọn các tính năng hoạt động tốt nhất tự động thay vì thực hiện thủ công không?

Ngoài ra, tôi có thể nhận được RMSE bằng lệnh sau:

scores = np.sqrt(-cross_val_score(lm, X, y, cv=20, scoring='neg_mean_squared_error')).mean()

Từ bây giờ, làm thế nào tôi có thể sử dụng điểm RMSE này? Ý tôi là tôi phải đưa ra nhiều dự đoán? Làm thế nào tôi sẽ sử dụng RMSE này? Phải có một cách để dự đoán () sử dụng một số tối ưu hóa nhưng không thể tìm thấy.

Hỏi ngày 18 tháng 4 năm 2018 lúc 17:47Apr 18, 2018 at 17:47

Hướng dẫn minimize rmse python - giảm thiểu trăn rmse

Trên thực tế, Sklearn dường như không có thuật toán từng bước, giúp hiểu được tầm quan trọng của các tính năng. Tuy nhiên, nó cung cấp loại bỏ tính năng đệ quy, đây là một thuật toán loại bỏ tính năng tham lam tương tự như lựa chọn ngược tuần tự.

Xem tài liệu ở đây:

Loại bỏ tính năng đệ quy

Lưu ý rằng nó không cần thiết rằng nó sẽ làm giảm RMSE của bạn. Bạn cũng có thể thử các kỹ thuật khác nhau như hồi quy Ridge và Lasso.

Đã trả lời ngày 18 tháng 4 năm 2018 lúc 17:52Apr 18, 2018 at 17:52

Pissallpissallpissall

6.6861 Huy hiệu vàng22 Huy hiệu bạc40 Huy hiệu đồng1 gold badge22 silver badges40 bronze badges

RMSE đo cường độ trung bình của lỗi dự đoán.

Hướng dẫn minimize rmse python - giảm thiểu trăn rmse

RMSE cho trọng lượng cao cho các lỗi cao, giảm các giá trị luôn tốt hơn. RMSE chỉ có thể được cải thiện nếu bạn có một mô hình tốt. Để lựa chọn tính năng, bạn có thể sử dụng PCA hoặc hồi quy từng bước hoặc kỹ thuật tương quan cơ bản. Nếu bạn thấy nhiều đa colinearity thì hãy đến hồi quy Lasso hoặc Ridge. Ngoài ra, hãy chắc chắn rằng bạn có một sự phân chia khá nhiều dữ liệu kiểm tra và đào tạo. Nếu bạn có dữ liệu thử nghiệm xấu, bạn sẽ nhận được kết quả kém. Ngoài ra, hãy kiểm tra dữ liệu đào tạo R-SQ và kiểm tra dữ liệu R-SQ để đảm bảo mô hình không phù hợp quá mức. Sẽ rất hữu ích nếu bạn thêm thông tin về không. quan sát trong thử nghiệm và đào tạo dữ liệu của bạn và giá trị R-SQ. Hi vọng điêu nay co ich

Đã trả lời ngày 18 tháng 4 năm 2018 lúc 21:34Apr 18, 2018 at 21:34

Đầu tiên, vết lõm trong ví dụ của bạn bị rối tung. Hy vọng bạn không thử và chạy cái này

Thứ hai, đây là một ví dụ của em bé để giảm thiểu chi2 với chức năng scipy.optimize.minimize (Lưu ý bạn có thể giảm thiểu những gì bạn muốn: Khả năng, | Chi | ** ?, Toto, v.v.):

import numpy as np
import scipy.optimize as opt
def functionyouwanttofit(x,y,z,t,u):
    return np.array([x+y+z+t+u , x+y+z+t-u , x+y+z-t-u , x+y-z-t-u ]) # baby test here but put what you want
def calc_chi2(parameters):
    x,y,z,t,u = parameters
    data = np.array([100,250,300,500])
    chi2 = sum( (data-functiontofit(x,y,z,t,u))**2 )
    return chi2

# baby example for init, min & max values
x_init = 0
x_min = -1
x_max = 10
y_init = 1
y_min = -2
y_max = 9
z_init = 2
z_min = 0
z_max = 1000
t_init = 10
t_min = 1
t_max = 100
u_init = 10
u_min = 1
u_max = 100
parameters = [x_init,y_init,z_init,t_init,u_init]
bounds = [[x_min,x_max],[y_min,y_max],[z_min,z_max],[t_min,t_max],[u_min,u_max]]
result = opt.minimize(calc_chi2,parameters,bounds=bounds)

Trong ví dụ của bạn, bạn không đưa ra các giá trị ban đầu ... điều này với thụt lề ... bạn có chờ đợi ai đó làm công việc cho bạn không?

Thứ ba, lưu ý các quá trình tối ưu hóa được đề xuất bởi SCIPY không phải lúc nào cũng thích nghi với nhu cầu của bạn. Bạn có thể thích các bộ giảm thiểu như LMFIT

scipy.optimize.curve_fit (f, xdata, ydata, p0 = none, sigma = none , ** kwargs) [nguồn]#curve_fit(f, xdata, ydata, p0=None, sigma=None, absolute_sigma=False, check_finite=True, bounds=(- inf, inf), method=None, jac=None, *, full_output=False, **kwargs)[source]#

Sử dụng bình phương tối thiểu phi tuyến tính để phù hợp với một hàm, f, vào dữ liệu.

Giả sử ydata = f(xdata, *params) + eps.

Tham sốfcallablefcallable

Hàm mô hình, F (x, xông). Nó phải lấy biến độc lập làm đối số đầu tiên và các tham số để phù hợp như các đối số còn lại riêng biệt.

xdataarray_like hoặc đối tượngarray_like or object

Biến độc lập nơi dữ liệu được đo. Thường nên là một chuỗi độ dài m hoặc một mảng (k, m) cho các hàm với các dự đoán k, nhưng thực sự có thể là bất kỳ đối tượng nào.

ydataarray_likearray_like

Dữ liệu phụ thuộc, một mảng m chiều dài - trên danh nghĩa

import numpy as np
import scipy.optimize as opt
def functionyouwanttofit(x,y,z,t,u):
    return np.array([x+y+z+t+u , x+y+z+t-u , x+y+z-t-u , x+y-z-t-u ]) # baby test here but put what you want
def calc_chi2(parameters):
    x,y,z,t,u = parameters
    data = np.array([100,250,300,500])
    chi2 = sum( (data-functiontofit(x,y,z,t,u))**2 )
    return chi2

# baby example for init, min & max values
x_init = 0
x_min = -1
x_max = 10
y_init = 1
y_min = -2
y_max = 9
z_init = 2
z_min = 0
z_max = 1000
t_init = 10
t_min = 1
t_max = 100
u_init = 10
u_min = 1
u_max = 100
parameters = [x_init,y_init,z_init,t_init,u_init]
bounds = [[x_min,x_max],[y_min,y_max],[z_min,z_max],[t_min,t_max],[u_min,u_max]]
result = opt.minimize(calc_chi2,parameters,bounds=bounds)
0.

p0array_like, tùy chọnarray_like, optional

Dự đoán ban đầu cho các tham số (độ dài n). Nếu không có, thì tất cả các giá trị ban đầu sẽ là 1 (nếu số lượng tham số cho hàm có thể được xác định bằng cách sử dụng hướng nội, nếu không một giá trị được nâng lên).

Sigmanone hoặc chuỗi độ dài hoặc mảng MXM, tùy chọnNone or M-length sequence or MxM array, optional

Xác định sự không chắc chắn trong ydata. Nếu chúng ta xác định phần dư là

import numpy as np
import scipy.optimize as opt
def functionyouwanttofit(x,y,z,t,u):
    return np.array([x+y+z+t+u , x+y+z+t-u , x+y+z-t-u , x+y-z-t-u ]) # baby test here but put what you want
def calc_chi2(parameters):
    x,y,z,t,u = parameters
    data = np.array([100,250,300,500])
    chi2 = sum( (data-functiontofit(x,y,z,t,u))**2 )
    return chi2

# baby example for init, min & max values
x_init = 0
x_min = -1
x_max = 10
y_init = 1
y_min = -2
y_max = 9
z_init = 2
z_min = 0
z_max = 1000
t_init = 10
t_min = 1
t_max = 100
u_init = 10
u_min = 1
u_max = 100
parameters = [x_init,y_init,z_init,t_init,u_init]
bounds = [[x_min,x_max],[y_min,y_max],[z_min,z_max],[t_min,t_max],[u_min,u_max]]
result = opt.minimize(calc_chi2,parameters,bounds=bounds)
1, thì việc giải thích Sigma phụ thuộc vào số lượng kích thước của nó:

  • Một sigma 1-D nên chứa các giá trị độ lệch chuẩn của các lỗi trong ydata. Trong trường hợp này, hàm được tối ưu hóa là

    import numpy as np
    import scipy.optimize as opt
    def functionyouwanttofit(x,y,z,t,u):
        return np.array([x+y+z+t+u , x+y+z+t-u , x+y+z-t-u , x+y-z-t-u ]) # baby test here but put what you want
    def calc_chi2(parameters):
        x,y,z,t,u = parameters
        data = np.array([100,250,300,500])
        chi2 = sum( (data-functiontofit(x,y,z,t,u))**2 )
        return chi2
    
    # baby example for init, min & max values
    x_init = 0
    x_min = -1
    x_max = 10
    y_init = 1
    y_min = -2
    y_max = 9
    z_init = 2
    z_min = 0
    z_max = 1000
    t_init = 10
    t_min = 1
    t_max = 100
    u_init = 10
    u_min = 1
    u_max = 100
    parameters = [x_init,y_init,z_init,t_init,u_init]
    bounds = [[x_min,x_max],[y_min,y_max],[z_min,z_max],[t_min,t_max],[u_min,u_max]]
    result = opt.minimize(calc_chi2,parameters,bounds=bounds)
    
    2.

  • Một sigma 2 chiều phải chứa ma trận sai số hiệp phương sai trong ydata. Trong trường hợp này, hàm tối ưu hóa là

    import numpy as np
    import scipy.optimize as opt
    def functionyouwanttofit(x,y,z,t,u):
        return np.array([x+y+z+t+u , x+y+z+t-u , x+y+z-t-u , x+y-z-t-u ]) # baby test here but put what you want
    def calc_chi2(parameters):
        x,y,z,t,u = parameters
        data = np.array([100,250,300,500])
        chi2 = sum( (data-functiontofit(x,y,z,t,u))**2 )
        return chi2
    
    # baby example for init, min & max values
    x_init = 0
    x_min = -1
    x_max = 10
    y_init = 1
    y_min = -2
    y_max = 9
    z_init = 2
    z_min = 0
    z_max = 1000
    t_init = 10
    t_min = 1
    t_max = 100
    u_init = 10
    u_min = 1
    u_max = 100
    parameters = [x_init,y_init,z_init,t_init,u_init]
    bounds = [[x_min,x_max],[y_min,y_max],[z_min,z_max],[t_min,t_max],[u_min,u_max]]
    result = opt.minimize(calc_chi2,parameters,bounds=bounds)
    
    3.

    Mới trong phiên bản 0.19.

Không có (mặc định) tương đương với Sigma 1-D chứa đầy những cái.

Tuyệt đối_sigmabool, tùy chọnbool, optional

Nếu đúng, Sigma được sử dụng theo nghĩa tuyệt đối và PCOV hiệp phương sai tham số ước tính phản ánh các giá trị tuyệt đối này.

Nếu sai (mặc định), chỉ có cường độ tương đối của các giá trị Sigma có vấn đề. Ma trận hiệp phương sai tham số được trả về dựa trên tỷ lệ sigma theo hệ số không đổi. Hằng số này được đặt bằng cách yêu cầu Chisq giảm cho các tham số tối ưu POPT khi sử dụng sigma được chia tỷ lệ bằng với sự thống nhất. Nói cách khác, Sigma được chia tỷ lệ để phù hợp với phương sai mẫu của phần dư sau khi phù hợp. Mặc định là sai. Về mặt toán học,

import numpy as np
import scipy.optimize as opt
def functionyouwanttofit(x,y,z,t,u):
    return np.array([x+y+z+t+u , x+y+z+t-u , x+y+z-t-u , x+y-z-t-u ]) # baby test here but put what you want
def calc_chi2(parameters):
    x,y,z,t,u = parameters
    data = np.array([100,250,300,500])
    chi2 = sum( (data-functiontofit(x,y,z,t,u))**2 )
    return chi2

# baby example for init, min & max values
x_init = 0
x_min = -1
x_max = 10
y_init = 1
y_min = -2
y_max = 9
z_init = 2
z_min = 0
z_max = 1000
t_init = 10
t_min = 1
t_max = 100
u_init = 10
u_min = 1
u_max = 100
parameters = [x_init,y_init,z_init,t_init,u_init]
bounds = [[x_min,x_max],[y_min,y_max],[z_min,z_max],[t_min,t_max],[u_min,u_max]]
result = opt.minimize(calc_chi2,parameters,bounds=bounds)
4

Check_finitebool, tùy chọnbool, optional

Nếu đúng, hãy kiểm tra xem các mảng đầu vào không chứa NAN của INF và tăng giá trị horror nếu chúng làm được. Đặt tham số này thành sai có thể âm thầm tạo ra kết quả vô nghĩa nếu các mảng đầu vào có chứa NAN. Mặc định là đúng.

Bound2-Tuple của Array_Like, Tùy chọn2-tuple of array_like, optional

Giới hạn dưới và trên trên các tham số. Mặc định không có giới hạn. Mỗi phần tử của tuple phải là một mảng có độ dài bằng số lượng tham số hoặc vô hướng (trong trường hợp giới hạn được coi là giống nhau cho tất cả các tham số). Sử dụng

import numpy as np
import scipy.optimize as opt
def functionyouwanttofit(x,y,z,t,u):
    return np.array([x+y+z+t+u , x+y+z+t-u , x+y+z-t-u , x+y-z-t-u ]) # baby test here but put what you want
def calc_chi2(parameters):
    x,y,z,t,u = parameters
    data = np.array([100,250,300,500])
    chi2 = sum( (data-functiontofit(x,y,z,t,u))**2 )
    return chi2

# baby example for init, min & max values
x_init = 0
x_min = -1
x_max = 10
y_init = 1
y_min = -2
y_max = 9
z_init = 2
z_min = 0
z_max = 1000
t_init = 10
t_min = 1
t_max = 100
u_init = 10
u_min = 1
u_max = 100
parameters = [x_init,y_init,z_init,t_init,u_init]
bounds = [[x_min,x_max],[y_min,y_max],[z_min,z_max],[t_min,t_max],[u_min,u_max]]
result = opt.minimize(calc_chi2,parameters,bounds=bounds)
5 với một dấu hiệu thích hợp để vô hiệu hóa giới hạn trên tất cả hoặc một số tham số.

Mới trong phiên bản 0.17.

Phương pháp {‘LM,‘ TRF, ‘Dogbox,}, tùy chọn{‘lm’, ‘trf’, ‘dogbox’}, optional

Phương pháp sử dụng để tối ưu hóa. Xem

import numpy as np
import scipy.optimize as opt
def functionyouwanttofit(x,y,z,t,u):
    return np.array([x+y+z+t+u , x+y+z+t-u , x+y+z-t-u , x+y-z-t-u ]) # baby test here but put what you want
def calc_chi2(parameters):
    x,y,z,t,u = parameters
    data = np.array([100,250,300,500])
    chi2 = sum( (data-functiontofit(x,y,z,t,u))**2 )
    return chi2

# baby example for init, min & max values
x_init = 0
x_min = -1
x_max = 10
y_init = 1
y_min = -2
y_max = 9
z_init = 2
z_min = 0
z_max = 1000
t_init = 10
t_min = 1
t_max = 100
u_init = 10
u_min = 1
u_max = 100
parameters = [x_init,y_init,z_init,t_init,u_init]
bounds = [[x_min,x_max],[y_min,y_max],[z_min,z_max],[t_min,t_max],[u_min,u_max]]
result = opt.minimize(calc_chi2,parameters,bounds=bounds)
6 để biết thêm chi tiết. Mặc định là ‘LM, đối với các vấn đề không bị ràng buộc và‘ TRF, nếu giới hạn được cung cấp. Phương pháp ‘LM, đã giành được công việc khi số lượng quan sát nhỏ hơn số lượng biến, sử dụng‘ TRF, hoặc ‘Dogbox, trong trường hợp này.

Mới trong phiên bản 0.17.

Phương pháp {‘LM,‘ TRF, ‘Dogbox,}, tùy chọncallable, string or None, optional

Phương pháp sử dụng để tối ưu hóa. Xem

import numpy as np
import scipy.optimize as opt
def functionyouwanttofit(x,y,z,t,u):
    return np.array([x+y+z+t+u , x+y+z+t-u , x+y+z-t-u , x+y-z-t-u ]) # baby test here but put what you want
def calc_chi2(parameters):
    x,y,z,t,u = parameters
    data = np.array([100,250,300,500])
    chi2 = sum( (data-functiontofit(x,y,z,t,u))**2 )
    return chi2

# baby example for init, min & max values
x_init = 0
x_min = -1
x_max = 10
y_init = 1
y_min = -2
y_max = 9
z_init = 2
z_min = 0
z_max = 1000
t_init = 10
t_min = 1
t_max = 100
u_init = 10
u_min = 1
u_max = 100
parameters = [x_init,y_init,z_init,t_init,u_init]
bounds = [[x_min,x_max],[y_min,y_max],[z_min,z_max],[t_min,t_max],[u_min,u_max]]
result = opt.minimize(calc_chi2,parameters,bounds=bounds)
6 để biết thêm chi tiết. Mặc định là ‘LM, đối với các vấn đề không bị ràng buộc và‘ TRF, nếu giới hạn được cung cấp. Phương pháp ‘LM, đã giành được công việc khi số lượng quan sát nhỏ hơn số lượng biến, sử dụng‘ TRF, hoặc ‘Dogbox, trong trường hợp này.

jacballable, chuỗi hoặc không, tùy chọn

Chức năng với chữ ký
import numpy as np
import scipy.optimize as opt
def functionyouwanttofit(x,y,z,t,u):
    return np.array([x+y+z+t+u , x+y+z+t-u , x+y+z-t-u , x+y-z-t-u ]) # baby test here but put what you want
def calc_chi2(parameters):
    x,y,z,t,u = parameters
    data = np.array([100,250,300,500])
    chi2 = sum( (data-functiontofit(x,y,z,t,u))**2 )
    return chi2

# baby example for init, min & max values
x_init = 0
x_min = -1
x_max = 10
y_init = 1
y_min = -2
y_max = 9
z_init = 2
z_min = 0
z_max = 1000
t_init = 10
t_min = 1
t_max = 100
u_init = 10
u_min = 1
u_max = 100
parameters = [x_init,y_init,z_init,t_init,u_init]
bounds = [[x_min,x_max],[y_min,y_max],[z_min,z_max],[t_min,t_max],[u_min,u_max]]
result = opt.minimize(calc_chi2,parameters,bounds=bounds)
7 tính toán ma trận Jacobian của hàm mô hình liên quan đến các tham số như một cấu trúc mảng dense_like. Nó sẽ được thu nhỏ theo Sigma được cung cấp. Nếu không có (mặc định), Jacobian sẽ được ước tính bằng số. Các từ khóa chuỗi cho các phương thức ‘TRF và‘ Dogbox, có thể được sử dụng để chọn sơ đồ khác biệt hữu hạn, xem
import numpy as np
import scipy.optimize as opt
def functionyouwanttofit(x,y,z,t,u):
    return np.array([x+y+z+t+u , x+y+z+t-u , x+y+z-t-u , x+y-z-t-u ]) # baby test here but put what you want
def calc_chi2(parameters):
    x,y,z,t,u = parameters
    data = np.array([100,250,300,500])
    chi2 = sum( (data-functiontofit(x,y,z,t,u))**2 )
    return chi2

# baby example for init, min & max values
x_init = 0
x_min = -1
x_max = 10
y_init = 1
y_min = -2
y_max = 9
z_init = 2
z_min = 0
z_max = 1000
t_init = 10
t_min = 1
t_max = 100
u_init = 10
u_min = 1
u_max = 100
parameters = [x_init,y_init,z_init,t_init,u_init]
bounds = [[x_min,x_max],[y_min,y_max],[z_min,z_max],[t_min,t_max],[u_min,u_max]]
result = opt.minimize(calc_chi2,parameters,bounds=bounds)
6.
boolean, optional

Mới trong phiên bản 0.18.

full_outputboolean, tùy chọn

**kwargs

Nếu đúng, chức năng này trả về thông tin additioal: Infodict, Mesg và IER.

ReturnSpopTarraypoptarray

Các giá trị tối ưu cho các tham số sao cho tổng số dư bình phương của

>>> import matplotlib.pyplot as plt
>>> from scipy.optimize import curve_fit
2 được giảm thiểu.

Mảng PCOV2-D2-D array

Hiệp phương sai ước tính của popt. Các đường chéo cung cấp phương sai của ước tính tham số. Để tính toán một lỗi độ lệch chuẩn trên các tham số sử dụng

>>> import matplotlib.pyplot as plt
>>> from scipy.optimize import curve_fit
3.

Làm thế nào tham số Sigma ảnh hưởng đến hiệp phương sai ước tính phụ thuộc vào đối số tuyệt đối_sigma, như được mô tả ở trên.

Nếu ma trận Jacobian tại giải pháp không có thứ hạng đầy đủ, thì phương thức LM LM trả về một ma trận chứa đầy

import numpy as np
import scipy.optimize as opt
def functionyouwanttofit(x,y,z,t,u):
    return np.array([x+y+z+t+u , x+y+z+t-u , x+y+z-t-u , x+y-z-t-u ]) # baby test here but put what you want
def calc_chi2(parameters):
    x,y,z,t,u = parameters
    data = np.array([100,250,300,500])
    chi2 = sum( (data-functiontofit(x,y,z,t,u))**2 )
    return chi2

# baby example for init, min & max values
x_init = 0
x_min = -1
x_max = 10
y_init = 1
y_min = -2
y_max = 9
z_init = 2
z_min = 0
z_max = 1000
t_init = 10
t_min = 1
t_max = 100
u_init = 10
u_min = 1
u_max = 100
parameters = [x_init,y_init,z_init,t_init,u_init]
bounds = [[x_min,x_max],[y_min,y_max],[z_min,z_max],[t_min,t_max],[u_min,u_max]]
result = opt.minimize(calc_chi2,parameters,bounds=bounds)
5, mặt khác, các phương pháp Trf, và ‘Dogbox, sử dụng moore-Penrose pseudoinverse để tính toán ma trận hiệp phương sai.

InfodictDict (chỉ trả về nếu full_output là đúng)dict (returned only if full_output is True)

Một từ điển của các đầu ra tùy chọn với các khóa:

>>> import matplotlib.pyplot as plt
>>> from scipy.optimize import curve_fit
5

Số lượng các cuộc gọi chức năng. Các phương pháp ‘TRF, và‘ Dogbox, không đếm các chức năng gọi cho xấp xỉ bằng số Jacobian, trái ngược với phương thức ‘LM.

>>> import matplotlib.pyplot as plt
>>> from scipy.optimize import curve_fit
6

Các giá trị hàm được đánh giá tại giải pháp.

>>> import matplotlib.pyplot as plt
>>> from scipy.optimize import curve_fit
7

Một hoán vị của ma trận R của hệ số QR của ma trận Jacobian gần đúng cuối cùng, cột được lưu trữ khôn ngoan. Cùng với IPVT, hiệp phương sai của ước tính có thể được xấp xỉ. Phương pháp ‘LM chỉ cung cấp thông tin này.

>>> import matplotlib.pyplot as plt
>>> from scipy.optimize import curve_fit
8

Một mảng nguyên có chiều dài n xác định ma trận hoán vị, p, sao cho fjac*p = q*r, trong đó r là hình tam giác trên với các phần tử chéo có cường độ không tăng. Cột J của P là cột IPVT (J) của ma trận nhận dạng. Phương pháp ‘LM chỉ cung cấp thông tin này.

>>> import matplotlib.pyplot as plt
>>> from scipy.optimize import curve_fit
9

Vectơ (chuyển vị (q) * fvec). Phương pháp ‘LM chỉ cung cấp thông tin này.

Mới trong phiên bản 1.9.

mesgstr (chỉ trả về nếu full_output là đúng)str (returned only if full_output is True)

Một thông báo chuỗi cung cấp thông tin về giải pháp.

Mới trong phiên bản 1.9.

mesgstr (chỉ trả về nếu full_output là đúng)int (returnned only if full_output is True)

Một thông báo chuỗi cung cấp thông tin về giải pháp.

Mới trong phiên bản 1.9.

mesgstr (chỉ trả về nếu full_output là đúng)

Một thông báo chuỗi cung cấp thông tin về giải pháp.

ierint (chỉ được trả lại nếu full_output là đúng)

Một lá cờ số nguyên. Nếu nó bằng 1, 2, 3 hoặc 4, giải pháp đã được tìm thấy. Nếu không, giải pháp đã không được tìm thấy. Trong cả hai trường hợp, biến đầu ra tùy chọn MESG cung cấp thêm thông tin.

RAISEVALUEERROR

Nếu YDATA hoặc XDATA chứa Nans hoặc nếu các tùy chọn không tương thích được sử dụng.

Lỗi runtime

Nếu tối thiểu hóa bình phương nhỏ nhất thất bại.

Tối ưu hóa

Nếu hiệp phương sai của các tham số không thể ước tính được.

Ghi chú

>>> import matplotlib.pyplot as plt
>>> from scipy.optimize import curve_fit
>>> def func(x, a, b, c):
...     return a * np.exp(-b * x) + c

Người dùng nên đảm bảo rằng đầu vào XDATA, YDATA và đầu ra của F là

>>> def func(x, a, b, c):
...     return a * np.exp(-b * x) + c
0, hoặc nếu không thì tối ưu hóa có thể trả về kết quả không chính xác.

>>> xdata = np.linspace(0, 4, 50)
>>> y = func(xdata, 2.5, 1.3, 0.5)
>>> rng = np.random.default_rng()
>>> y_noise = 0.2 * rng.normal(size=xdata.size)
>>> ydata = y + y_noise
>>> plt.plot(xdata, ydata, 'b-', label='data')

Với

>>> import matplotlib.pyplot as plt
>>> from scipy.optimize import curve_fit
0, thuật toán sử dụng thuật toán Levenberg-Marquest thông qua
import numpy as np
import scipy.optimize as opt
def functionyouwanttofit(x,y,z,t,u):
    return np.array([x+y+z+t+u , x+y+z+t-u , x+y+z-t-u , x+y-z-t-u ]) # baby test here but put what you want
def calc_chi2(parameters):
    x,y,z,t,u = parameters
    data = np.array([100,250,300,500])
    chi2 = sum( (data-functiontofit(x,y,z,t,u))**2 )
    return chi2

# baby example for init, min & max values
x_init = 0
x_min = -1
x_max = 10
y_init = 1
y_min = -2
y_max = 9
z_init = 2
z_min = 0
z_max = 1000
t_init = 10
t_min = 1
t_max = 100
u_init = 10
u_min = 1
u_max = 100
parameters = [x_init,y_init,z_init,t_init,u_init]
bounds = [[x_min,x_max],[y_min,y_max],[z_min,z_max],[t_min,t_max],[u_min,u_max]]
result = opt.minimize(calc_chi2,parameters,bounds=bounds)
9. Lưu ý rằng thuật toán này chỉ có thể giải quyết các vấn đề không bị ràng buộc.

>>> popt, pcov = curve_fit(func, xdata, ydata)
>>> popt
array([2.56274217, 1.37268521, 0.47427475])
>>> plt.plot(xdata, func(xdata, *popt), 'r-',
...          label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))

Các ràng buộc hộp có thể được xử lý bằng các phương pháp ‘TRF, và‘ Dogbox. Tham khảo tài liệu của

import numpy as np
import scipy.optimize as opt
def functionyouwanttofit(x,y,z,t,u):
    return np.array([x+y+z+t+u , x+y+z+t-u , x+y+z-t-u , x+y-z-t-u ]) # baby test here but put what you want
def calc_chi2(parameters):
    x,y,z,t,u = parameters
    data = np.array([100,250,300,500])
    chi2 = sum( (data-functiontofit(x,y,z,t,u))**2 )
    return chi2

# baby example for init, min & max values
x_init = 0
x_min = -1
x_max = 10
y_init = 1
y_min = -2
y_max = 9
z_init = 2
z_min = 0
z_max = 1000
t_init = 10
t_min = 1
t_max = 100
u_init = 10
u_min = 1
u_max = 100
parameters = [x_init,y_init,z_init,t_init,u_init]
bounds = [[x_min,x_max],[y_min,y_max],[z_min,z_max],[t_min,t_max],[u_min,u_max]]
result = opt.minimize(calc_chi2,parameters,bounds=bounds)
6 để biết thêm thông tin.

>>> popt, pcov = curve_fit(func, xdata, ydata, bounds=(0, [3., 1., 0.5]))
>>> popt
array([2.43736712, 1.        , 0.34463856])
>>> plt.plot(xdata, func(xdata, *popt), 'g--',
...          label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt))
>>> plt.xlabel('x')
>>> plt.ylabel('y')
>>> plt.legend()
>>> plt.show()