Régression des moindres Carrés en C/C++
Comment peut-on aller sur la mise en œuvre de régression des moindres carrés pour l'analyse factorielle en C/C++?
Qu'entendez-vous par "mise en œuvre"? Vous êtes à la recherche d'un progiciel avec tous les cloches et de sifflets, ou essayez-vous à écrire des logiciels pour une application avec un besoin minimum de fonctionnalités supplémentaires (comme un devoir à la maison)?
OriginalL'auteur Ohanes Dadian | 2010-02-04
Vous devez vous connecter pour publier un commentaire.
la étalon-or pour ce qui est LAPACK. vous souhaitez, en particulier,
xGELS
.Il y a le C/C++ port de LAPACK.
Ce KennyTM dit. La plupart des plates-formes qui fournissent LAPACK également fournir C interfaces.
OriginalL'auteur Peter
Lorsque j'ai eu à traiter de grands ensembles de données et de grands ensembles de paramètres pour les non-linéaire du paramètre de montage, j'ai utilisé une combinaison de RANSAC et de Levenberg-Marquardt. Je parle des milliers de paramètres avec des dizaines de milliers de points de mesure.
RANSAC est un algorithme robuste pour réduire le bruit dû aux valeurs aberrantes à l'aide d'un ensemble de données réduit. Ses pas strictement des moindres Carrés, mais peut être appliquée à de nombreuses méthodes de recalage.
De Levenberg-Marquardt est un moyen efficace de résoudre les non-linéaire des moindres carrés numériquement.
La vitesse de convergence dans la plupart des cas est entre celle de la plus raide de la descente et de la méthode de Newton, sans nécessiter le calcul de la deuxième dérivés. Je l'ai trouvé pour être plus rapide que le gradient Conjugué dans le cas que j'ai examinés.
La j'ai fait, c'était de mettre en place le RANSAC une boucle externe autour du LM de la méthode. Il est très solide, mais lente. Si vous n'avez pas besoin de la plus grande robustesse que vous pouvez simplement utiliser LM.
+1 pour la mention de RANSAC, parce que c'est une chouette algorithme qui n'est pas l'exposition qu'il mérite
OriginalL'auteur Michael Anderson
Obtenir RACINE et l'utilisation
TGraph::Fit()
(ouTGraphErrors::Fit()
)?Gros, lourd morceau de logiciel à installer, juste pour la forme, cependant. Fonctionne pour moi parce que j'ai déjà installé.
Ou de l'utilisation GSL.
OriginalL'auteur dmckee
Si vous souhaitez mettre en œuvre un algorithme d'optimisation par vous-même de Levenberg-Marquard semble être assez difficile à mettre en œuvre. Si vraiment la convergence rapide n'est pas nécessaire, prendre un coup d'oeil à la Nelder-Mead simplexe algorithme d'optimisation. Il peut être mis en œuvre à partir de zéro à quelques heures.
http://en.wikipedia.org/wiki/Nelder%E2%80%93Mead_method
OriginalL'auteur midtiby
Ont un coup d'oeil à
http://www.alglib.net/optimization/
Ils ont C++ implémentations de la L-BFGS et de Levenberg-Marquardt.
Vous avez seulement besoin de calculer la dérivée première de la fonction de votre objectif pour l'utilisation de ces deux algorithmes.
OriginalL'auteur Yin Zhu
J'ai utilisé TNT/JAMA linéaire estimation par moindres carrés. Ce n'est pas très sophistiqué, mais est assez rapide + facile.
OriginalL'auteur Jason S
Permet de parler d'abord sur l'analyse des facteurs comme la plupart de la discussion ci-dessus est sur la régression. La plupart de mon expérience avec des logiciels comme SAS, Minitab, ou SPSS, qui résout le facteur de l'analyse des équations, j'ai une expérience limitée dans la résolution de ces directement. Cela dit, que la plupart des implémentations ne pas utiliser la régression linéaire pour résoudre les équations. Selon cette, les méthodes les plus couramment utilisées sont l'analyse en composantes principales et principaux de l'analyse factorielle. Dans un texte sur l'Analyse Multivariée (Dallas Johnson), pas moins de sept méthodes sont décrites chacun avec leurs propres avantages et inconvénients. Je vous recommande fortement de trouver une application qui vous donne des scores de facteurs plutôt que de la programmation d'une solution à partir de zéro.
La raison pour laquelle il y a différentes méthodes, c'est que vous pouvez choisir exactement ce que vous essayez de réduire au minimum. Il y a une jolie discussion complète de l'étendue des méthodes ici.
OriginalL'auteur Grembo