Scipy.Odr multiple variable regression

前端 未结 1 1314
清酒与你
清酒与你 2021-02-06 19:19

I would like to perform a multidimensional ODR with scipy.odr. I read the API documentation, it says that multi-dimensionality is possible, but I cannot make it wor

1条回答
  •  再見小時候
    2021-02-06 19:52

    Firstly, in my experience scipy.odr uses mostly arrays, not matrices. The library seems to make a large amount of size checks along the way and getting it to work with multiple variables seems to be quite troublesome.

    This is the workflow how I usually get it to work (and worked at least on python 2.7):

    import numpy as np
    import scipy.odr
    
    n = 1000
    t = np.linspace(0, 1, n)
    
    def linfit(beta, x):
        return beta[0]*x[0] + beta[1]*x[1] + beta[2] #notice changed indices for x
    
    x1 = 2.5*np.sin(2*np.pi*6*t)+4
    x2 = 0.5*np.sin(2*np.pi*7*t + np.pi/3)+2
    
    x = np.row_stack( (x1, x2) ) #odr doesn't seem to work with column_stack
    
    e = 0.25*np.random.randn(n)
    y = 3*x[0] + 4*x[1] + 5 + e #indices changed
    
    linmod = scipy.odr.Model(linfit)
    data = scipy.odr.Data(x, y)
    odrfit = scipy.odr.ODR(data, linmod, beta0=[1., 1., 1.])
    odrres = odrfit.run()
    odrres.pprint()
    

    So using identical (1D?) arrays, using row_stack and adressing by single index number seems to work.

    0 讨论(0)
提交回复
热议问题