2016-10-08 1 views
2

J'ai des données du formulaireComment trouver la borne supérieure quadratique de l'erreur du moindre carré moyen?

x1[i], x2[i], x3[i], z[i],

z[i] est une fonction déterministe inconnue de x1[i], x2[i], and x3[i]. Je voudrais trouver une fonction quadratique u(x1, x2, x3)= a11*x1^2 + a22*x2^2 + a33*x3^2 + a12*x1*x2 + ... + a0 qui surcharge les données, c'est-à-dire u(x1[i], x2[i], x3[i]) >= z[i] pour tous i, et qui minimise la somme des erreurs au carré soumises aux contraintes.

Existe-t-il une approche de calcul efficace dans Python ou Matlab?

Répondre

1

Il existe une solution très simple. Utilisez simplement la régression polynomiale dans Mathlab (http://www.matrixlab-examples.com/polynomial-regression.html). Vous obtiendrez une certaine fonction P (x1 [i], x2 [i], x3 [i]). 1. Ensuite, pour chaque i calculez l'expression Diff [i] = P (x1 [i], x2 [i], x3 [i]) - z [i]. Vous obtiendrez un tableau Diff. 2. Sélectionnez toutes les valeurs négatives. 3. Trouvez la valeur minimale dans Diff: M = Min (Diff). 4. La fonction désirée est F (x1 [i], x2 [i], x3 [i]) = P (x1 [i], x2 [i], x3 [i]) + Abs (M), où Abs (M) - sa valeur exclut le signe de M.

Mais si vous n'êtes pas limité aux fonctions quadratiques, vous pouvez modifier le degré du polynôme et obtenir une solution plus précise.

+3

Pouvez-vous montrer que cette approche minimise la somme des erreurs au carré avec les contraintes? – Arpi

+0

Bonjour Andrey, Merci de répondre, mais cette approche ne fonctionne pas. La session IPython suivante illustre un contre-exemple simple: In [1]: x = array ([0, 1, 2, 3, 4]) In [2]: y = array ([0, 0, 1 , 0, 0]) In [3]: Polyval (polyfit (x, y, 2), x) Out [3]: array ([- 0,08571429, 0,34285714, 0,48571429, 0,34285714, -0,08571429]) Le point central est celui qui nécessite la plus grande correction (1-0,4857 = 0,5143). Si nous déplaçons la courbe entière de cette quantité, le quadratique est loin au-dessus des points extrêmes. –

2

Votre problème ressemble à un quadratic programming problem avec des contraintes linéaires. Il existe des algorithmes efficaces pour les résoudre et ils sont également implémentés dans Matlab et Python; voir respectivement quadprog et CVXOPT.

+0

Les contraintes sont en effet linéaires dans les paramètres. Je n'avais pas réalisé cela initialement. –