【问题标题】:Over fitting in scipy non linear curve fitscipy非线性曲线拟合中的过度拟合
【发布时间】:2017-09-15 23:50:31
【问题描述】:

我有一个模型方程,我们称之为 eq_m:

我知道我的数据集如下,我正在尝试将我的数据拟合到 eq_m 以便我可以使用拟合的参数来预测新数据。

但是这个 eq_m 是非线性的,因此我使用 scipy 的 curve_fit 来获取 lambda、mu、sigma 参数值,使用以下 sn-p:

opt_parms, parm_cov = o.curve_fit(eq_m, x, y,maxfev=50000)
lamb , mu, sigm = opt_parms

我在所有应该遵循这个模型的各种数据组上运行这个模型,55/60 给了我很好的结果,但是剩下的 5 个组是高度过度拟合的,并且预测的参数具有很高的正值。有没有办法可以使用 scipy/numpy 或 scikit-learn 规范曲线拟合并惩罚高幅度参数值?

我的主管建议使用共轭先验,但我不知道该怎么做。

谁能帮我解决这个问题?如果我必须提供一个猜测来解决这个问题,有人可以告诉我如何计算这些猜测吗?

【问题讨论】:

    标签: python scipy scikit-learn curve-fitting non-linear-regression


    【解决方案1】:

    curve_fit 不支持正则化。它总是使用最小二乘成本函数。为了规范拟合,您需要编写一个自定义成本函数,使用scipy.optimize.minimize 最小化。

    让我们首先将曲线拟合转化为一个最小化问题:

    def eq_m(x, lamb, mu, sigm):  # assumed signature of eq_m
        pass
    
    def cost(params):  # simply use globally defined x and y
        lamb, mu, sigm = params
        model = eq_m(x, lamb, mu, sigm)
        return np.mean((model - y)**2)  # quadratic cost function
    
    p0 = [1, 0, 1]  # initial guess for lambda, mu, and sigma
    res = o.minimize(cost, p0)
    print(res)  # see if minimization succeeded.
    lamb, mu, sigm = res.x
    

    这有望为您提供与curve_fit 相似的结果。 (如果不是这种情况,就该开始调试了。)

    现在我们可以使用成本函数来实现正则化:

    def cost(params):
        lamb, mu, sigm = params
        model = eq_m(x, lamb, mu, sigm)
        reg = lamb**2 + mu**2 + sigm**2  # very simple: higher parameters -> higher cost
        regweight = 1.0  # determines relative importance of regularization vs goodness of fit
        return np.mean((model - y)**2)  + reg * regweight
    

    没有严格的需要对参数进行二次惩罚。基本上你可以做任何事情,只要确保大参数会增加成本。结果会有所不同:-)

    所有这些都是一种非常临时的方法,缺乏严格的理论基础。主管使用共轭先验的建议听起来像是他们希望您使用贝叶斯估计技术。尽管某些先验可以被认为等同于正则化,但该方法完全不同,并且可能在数学上相当复杂。您需要定义似然函数,而不是成本函数,定义参数的先验,并使用贝叶斯规则将它们组合以获得后验似然,最终将其最大化。

    【讨论】:

      猜你喜欢
      • 2017-04-21
      • 2018-11-20
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      • 2013-10-10
      • 2019-03-15
      相关资源
      最近更新 更多