Existe-t-il un progiciel pour résoudre la régression linéaire dans le but de minimiser la norme L-infini.
regression
Fan Zhang
la source
la source
Réponses:
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 X ∈ R n × p i x i β ∈ R p f ( β ) = ‖ y - X β ‖ ∞ β f ⋆ = f ( β ⋆ ) = inf { f ( β ) : β ∈ R p }y=(yi)∈Rn X∈Rn×p i xi β∈Rp f(β)=∥y−Xβ∥∞ β
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,
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 ,f ℓ ∞ minimiser t soumis à y - X β ≤ t 1 n
Relation avec la version (variation totale) de la régression linéaireℓ1
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 gℓ1 g(β)=∥y−Xβ∥1 minimiser t T 1 n sous réserve de y - X β ≤ t
Notez ici que est maintenant un vecteur de longueur au lieu d'un scalaire, comme c'était le cas dans . n ℓ ∞t n ℓ∞
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.
la source
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:
(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 ...
la source
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 > = 1Lp p>=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.
la source