Je forme un classificateur LDA multi-classe avec 8 classes de données.
Pendant la formation, je reçois un avertissement de: " Les variables sont colinéaires "
Je reçois une formation précision d' de plus de 90% .
J'utilise la bibliothèque scikits-learn dans Python pour former et tester les données multi-classes.
J'obtiens également une précision de test décente (environ 85% -95% ).
Je ne comprends pas ce que signifie l'erreur / avertissement. Sil te plait aide moi.
Comme il me semble que gui11aume vous a donné une excellente réponse, je veux donner un exemple sous un angle légèrement différent qui pourrait être éclairant. Considérez qu'une covariable dans votre fonction discriminante se présente comme suit:
.X1=5X2+3X3−X4
Supposons que le meilleur LDA ait la frontière linéaire suivante:
ou
Ces deux frontières sont identiques mais la première a des coefficients1 , 2 , 1 , - 2 pour X1 , X2 , X3 , et X4 respectivement, tandis que l'autre a des coefficients 0 , 7 , 3 , - 1 .
Les coefficients sont donc assez différents mais les deux équations donnent la même frontière et la même règle de prédiction. Si une forme est bonne, l'autre l'est aussi. Mais maintenant, vous pouvez voir pourquoi gui11ame dit que les coefficients sont ininterprétables.
Il existe plusieurs autres façons d'exprimer cette frontière en substituant àX2 pour lui donner 0 coefficient et la même chose pourrait être fait pour X3 ou X4 . Mais en pratique, la colinéarité est approximative. Cela aggrave les choses car le bruit permet une réponse unique. De très légères perturbations des données entraîneront une modification drastique des coefficients. Mais pour la prédiction, vous êtes d'accord car chaque équation définit presque la même frontière et donc LDA se traduira par des prédictions presque identiques.
la source
Bien que la réponse qui a été marquée ici soit correcte, je pense que vous cherchiez une explication différente pour découvrir ce qui s'est passé dans votre code. J'ai eu exactement le même problème lors de l'exécution d'un modèle.
Voici ce qui se passe: vous entraînez votre modèle avec la variable prédite dans le cadre de votre ensemble de données. Voici un exemple de ce qui m'arrivait sans même le remarquer:
Dans ce code, je veux prédire la valeur de 'COL3' ... mais, si vous regardez train_X, je lui dis de récupérer chaque colonne sauf la dernière, donc son entrée COL1 COL2 et COL3, pas COL4, et essayer de prédire COL3 qui fait partie de train_X.
J'ai corrigé cela en déplaçant simplement les colonnes, en déplaçant manuellement COL3 dans Excel pour être la dernière colonne de mon ensemble de données (maintenant en remplacement de COL4), puis:
Si vous ne voulez pas le déplacer dans Excel et que vous voulez simplement le faire par code, alors:
Notez maintenant comment j'ai déclaré train_X, pour inclure toutes les colonnes sauf COL3, qui fait partie de train_Y.
J'espère que ça aide.
la source