我有一些我希望通过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这样的约束或增加迭代次数但我无法设法获得预期值。
有没有人试图使用“阈值”功能来拟合数据? 我很感激能得到一些帮助。
答案 0 :(得分:0)
您尝试优化的阈值函数具有更高程度的非线性,因此使用fmin等函数进行优化更加困难。
您可能有更好的运气尝试进行分类步骤来估算阈值。然后才进行优化但知道阈值。
scikit learn是完成此类任务的绝佳工具:
http://scikit-learn.org/stable/modules/classes.html#module-sklearn.svm