Dans un certain but, dans une partie de mon code, je veux deviner polynom 5ème degré, qui correspond le mieux à mes données et ne diminue pas dans certains points.Scipy optimiser minimiser la conjecture initiale en utilisant SLSQP
L'exemple de code est:
import numpy as np
import scipy.optimize as optimize
def make_const(points):
constr = []
for point in points:
c = {'type' : 'ineq', 'fun' : der, 'args' : (point,)}
constr.append(c)
return constr
def der(args_pol, bod):
a, b, c, d, e, f = args_pol
return (5*a*bod**4 + 4*b*bod**3 + 3*c*bod**2 + 2*d*bod + e)
def squares(args_pol, x, y):
a, b, c, d, e, f = args_pol
return ((y-(a*x**5 + b*x**4 + c*x**3 + d*x**2 + e*x + f))**2).sum()
def ecdf(arr):
arr = np.array(arr)
F = [len(arr[arr<=t])/len(arr) for t in arr]
return np.array(F)
pH = np.array([8,8,8,7,7,7,7,7,7,7,7,6,3,2,2,2,1])
pH = np.sort(pH)
e = ecdf(pH)
ppoints = [ 1., 2.75, 4.5, 6.25, 8. ]
constraints1 = make_const(ppoints)
p1 = optimize.minimize(squares, [1.0, 1.0, 1.0, 1.0, 1.0, 1.0],
method = 'SLSQP', args = (pH, e), constraints = constraints1)
p2 = optimize.minimize(squares, [-1.0, -1.0, -1.0, -1.0, -1.0, -1.0],
method = 'SLSQP', args = (pH, e), constraints = constraints1)
Ici p1
ne parvient pas à optimiser, p2
se termine avec succès. En outre, si je n'ai pas de contraintes, donc si ppoints = []
, p1
termites avec succès tandis que p2
échoue. Le message si optimisations échoue toujours:
'Inequality constraints incompatible'
Le problème est évidemment initial guess
dans optimize.minimize
. Je pense que les paramètres de cette supposition doivent rencontrer mes contraintes. Mais ici, la première estimation [1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
répond à mes contsraints. Quelqu'un peut-il expliquer, où est le problème? Oui, votre point initial satisfait aux contraintes.
Votre solution est excellente, mais j'ai eu les mêmes problèmes avec différents ensembles de données. Alors j'ai réécrit mon code pour travailler avec la 4ème fonction polynomiale, et indépendamment de ce que j'ai d'autres problèmes, le problème de supposition initiale est résolu. – Bobesh