python曲线拟合结果汇总

时间:2018-08-07 18:38:43

标签: python scipy scikit-learn curve-fitting statsmodels

对不起,我对python还是很陌生,希望有人可以帮助我解决曲线拟合问题...

我有一个MxN数据帧“数据”,其中M是样本数,N是变量数(10)。我有一个Mx1因变量“分形”,它是0到1之间与每个样本相对应的分数。

我知道如何轻松地在自变量N和因变量小数之间进行多元线性回归,但是,我将回归包裹在S型回归中以使响应保持在0到1之间。

我能够像这样执行此操作...

def sigmoid(x,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10):
    y = 1 / (1 + np.exp(- (b0 + b1*x[:,0] + b2*x[:,1] + b3*x[:,2] + b4*x[:,3] + b5*x[:,4] +
                       b6 * x[:,5] + b7*x[:,6] + b8*x[:,7] + b9*x[:,8] + b10*x[:,9])))
    return y

popt, pcov = curve_fit(sigmoid,data,fractions)

'''use coefficients from curve_fit to estimate new fraction from new 1xN data'''
newFraction = sigmoid(newData, *popt)

但是,我想为特征选择实现某种逐步的多元回归,最好基于AIC。我发现以下使用python的方法...

http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html https://planspace.org/20150423-forward_selection_with_statsmodels/ https://datascience.stackexchange.com/questions/24405/how-to-do-stepwise-regression-using-sklearn/24447#24447

但是所有这些方法都依赖于使用涉及.fit()方法的回归。有没有一种方法可以使用任何.fit()方法(例如statsmodels或lmfit)来实现上述模型?我也研究了套索类型的方法,但是,再次无法弄清楚如何实现我的功能。

1 个答案:

答案 0 :(得分:0)

我认为您应该可以使用lmfit进行类似的操作(因为您的示例不完整,所以不完整):

from lmfit import Model
def sigmoid(x,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10):
    y = 1 / (1 + np.exp(- (b0 + b1*x[:,0] + b2*x[:,1] + b3*x[:,2] + b4*x[:,3] + b5*x[:,4] +
                       b6 * x[:,5] + b7*x[:,6] + b8*x[:,7] + b9*x[:,8] + b10*x[:,9])))
    return y

smodel = Model(sigmoid)
params = smodel.make_params(b0=1, b1=0, b2=0.1, b3=0.01, b4=0.01, b5=0.01, 
                            b6=0.01, b7=0.01, b8=0.01, b9=0.01, b10=0.01)

result = smodel.fit(data, params, x=x)

这将通过最小化卡方来实现。

我认为,对于任何特定的拟合(将有固定数量的数据点和固定数量的变量),最小化卡方也将最小化AIC(因为卡方是正定的,{{ 1}}