Progiciel pour résoudre la régression linéaire de la norme L-infini

10

Existe-t-il un progiciel pour résoudre la régression linéaire dans le but de minimiser la norme L-infini.

Fan Zhang
la source
Eh bien, tout progiciel de programmation linéaire fonctionnerait. Cela vous laisse beaucoup d'options. :)
cardinal
1
@Cardinal Comment reformuleriez-vous cela comme un programme linéaire? Il n'est pas évident de le faire même dans des cas triviaux (comme deux points de données et un paramètre): il n'y a pas de contraintes et la fonction objectif est non linéaire.
whuber
Phrase clé : approximation de Chebyshev. (Plus à suivre. L'idée est d' introduire une variable supplémentaire puis de transformer l'objectif en contraintes.)
Cardinal
@cardinal Vous voulez dire celui-ci: mathworld.wolfram.com/ChebyshevApproximationFormula.html Cela semble assez compliqué.
Fan Zhang
Eh bien, c'est un peu lié, mais pas pertinent à ce problème. Votre problème peut être résolu avec un simple LP. Dès que je pourrai accéder à un ordinateur, je posterai une réponse.
cardinal

Réponses:

17

Réponse courte : Votre problème peut être formulé comme un programme linéaire (LP), vous laissant choisir votre solveur LP préféré pour la tâche. Pour voir comment écrire le problème en tant que LP, lisez la suite.

Ce problème de minimisation est souvent appelé approximation de Chebyshev .

Soit , avec la ligne indiquée par et . Ensuite, nous cherchons à minimiser la fonction par rapport à . Désignons la valeur optimale par XR n × p i x i βR p f ( β ) = y - X β β f = f ( β ) = inf { f ( β ) : βR p }y=(yi)RnXRn×pixiβRpf(β)=yXββ

f=f(β)=inf{f(β):βRp}.

La clé de la refonte en LP est de réécrire le problème sous forme d'épigraphe . Il n'est pas difficile de se convaincre que, en fait,

f=inf{t:f(β)t,tR,βRp}.

Maintenant, en utilisant la définition de la fonction , nous pouvons réécrire le côté droit ci-dessus comme et nous voyons donc que la minimisation de la dans un paramètre de régression équivaut à la LP où l'optimisation est effectuée sur , et désigne un vecteur de ceux de longueur . Je laisse comme un exercice (facile) pour le lecteur de refondre le LP ci-dessus sous forme standard.f = inf { t : - t y i - x i βt ,fminimiser t soumis à y - X βt 1 n

f=inf{t:tyixiβt,tR,βRp,1in},
minimizetsubject toyXβt1nyXβt1n,
(β,t)1nn

Relation avec la version (variation totale) de la régression linéaire1

Il est intéressant de noter que quelque chose de très similaire peut être fait avec la norme . Soit . Ensuite, des arguments similaires conduisent à conclure que sorte que le LP correspondant soit g ( β ) = y - X β 1 g1g(β)=yXβ1minimiser t T 1 n sous réserve de y - X βt

g=inf{tT1n:tiyixiβti,t=(ti)Rn,βRp,1in},
minimizetT1nsubject toyXβtyXβt.

Notez ici que est maintenant un vecteur de longueur au lieu d'un scalaire, comme c'était le cas dans . n tn

La similitude de ces deux problèmes et le fait qu'ils peuvent tous deux être castés en LP n'est bien sûr pas un hasard. Les deux normes sont liées en ce qu'elles sont les deux normes l'une de l'autre.

cardinal
la source
Comment trouveriez-vous une certaine précision des paramètres et / ou des prévisions? Je pose la question en raison de la question récente suivante: mathematica.stackexchange.com/questions/214226/… .
JimB
3

Malab peut le faire en utilisant cvx. pour obtenir cvx (gratuit):

http://cvxr.com/cvx/download/

En cvx, vous l'écririez de cette façon:

cvx_begin
   variable x(n);
   minimize( norm(A*x-b,Inf) );
cvx_end

(voir l'exemple page 12 du manuel )

Il existe une implémentation Python de CVX ( ici ) mais les commandes sont légèrement différentes ...

user603
la source
1

La réponse de @ cardinal est bien énoncée et a été acceptée, mais, pour fermer complètement ce fil, je proposerai ce qui suit: Les bibliothèques numériques IMSL contiennent une routine pour effectuer une régression de norme L-infini. La routine est disponible en Fortran, C, Java, C # et Python. J'ai utilisé les versions C et Python pour lesquelles la méthode est appelée lnorm_regression, qui prend également en charge la régression L_p générale , . p > = 1Lpp>=1

Notez que ce sont des bibliothèques commerciales mais les versions Python sont gratuites (comme dans la bière) pour une utilisation non commerciale.

Josh Hemann
la source
Malheureusement, le lien ne fonctionne plus. Pourriez-vous le mettre à jour?
COOLSerdash