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.


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.


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 ...


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.


Malheureusement, le lien ne fonctionne plus. Pourriez-vous le mettre à jour?
COOLSerdash
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.