python曲线拟合结果总结

Posted

技术标签:

【中文标题】python曲线拟合结果总结【英文标题】:python curve fitting with results summary 【发布时间】:2019-01-14 22:25:43 【问题描述】:

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

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

我知道如何轻松地在自变量 N 和因变量 Fractions 之间运行多元线性回归,但是,我将回归包装在 sigmoid 回归中以使响应保持在 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)来实现上述模型?我也研究了套索类型的方法,但是,再次无法弄清楚如何实现我的功能。

【问题讨论】:

所以换句话说,您是否尝试使用逻辑回归进行特征选择? 在某种程度上是的,但从技术上讲,它不是逻辑回归,因为我的回答不是二元的。我试图预测 0 和 1 之间的响应,该模型本质上是一个多线性回归,如果有意义的话,只是包裹在一个 sigmoid 中。 啊,是的,我的错。我错过了“中间”部分,忘记了 sigmoid 是什么。如果您想使用 RFE,我认为您可以尝试将现有模型包装在 scikit-learn 估计器类中***.com/questions/51679173/… 谢谢,我看看再回来.. 【参考方案1】:

我认为你应该能够用 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(因为卡方是正定的,@987654322 @

【讨论】:

感谢您的回复。这确实有效,并且我检索到与curve_fit 相同的模型系数。对于现在如何在上面列出的逐步方法之一中使用 AIC,您有什么建议吗? 嗯,您当然可以循环遍历参数,使每个参数固定或可变并重新拟合,然后比较 AIC 值以确定是否需要该参数来解释数据。我确信这可能会被滥用,但这似乎是逐步回归的典型问题。

以上是关于python曲线拟合结果总结的主要内容,如果未能解决你的问题,请参考以下文章

Python 中的函数拟合

C++ opencv曲线拟合

Python 怎么用曲线拟合数据

python 拟合曲线并求参

如何用origin数据拟合曲线

python应用 曲线拟合03