具有阈值功能的fmin

时间:2012-07-18 12:47:19

标签: python scipy data-fitting

我有一些我希望通过fmin函数拟合的实验数据。我已经将fmin与另一个样本一起使用,一切正常。

这次我想用以下函数表示数据:

def f3(c,t):
    resultat=0
    test=t-c[0]
    if (test<0):
       resultat = c[1]
    else:
       resultat = c[1]+c[2]*(t-c[0])+c[3]*(t-c[0])*(t-c[0])+c[4]*(t-c[0])*(t-c[0])*(t-c[0])
    return resultat

t是时间向量,c [0]是阈值(c [i]为多项式系数) (顺便说一句,数据可以用这个函数表示,因为我用它来生成数据示例!)

函数错误由:

给出
def e3(p,temps,y):
    error = 0
    i=0
    for t in temps:
        error = error + (f3(p,t)-y[i])**2
        i=i+1
    #cont = min(0,p[0])
    #error = error +10000*(cont*cont)*(cont*cont*cont*cont)
    return error

p3 = [10,250,0,0,0],T_out是向量

拟合操作是:

p3_min = fmin(e3,p3[:], args=(temps,T_out),xtol=0.0001,ftol=0.0001)

该指令适用于“经典”多项式函数但是 对于f3函数(其中包含'if'),p3_min未按预期进行优化。

我尝试实现像p [0]> 0这样的约束或增加迭代次数但我无法设法获得预期值。

有没有人试图使用“阈值”功能来拟合数据? 我很感激能得到一些帮助。

1 个答案:

答案 0 :(得分:0)

您尝试优化的阈值函数具有更高程度的非线性,因此使用fmin等函数进行优化更加困难。

您可能有更好的运气尝试进行分类步骤来估算阈值。然后才进行优化但知道阈值。

scikit learn是完成此类任务的绝佳工具:

http://scikit-learn.org/stable/modules/classes.html#module-sklearn.svm