De toute façon ce n'est pas très grave : ça veut dire que ton modèle n'a pas convergé avec certains hyperparamètres. Mais ces hyperparamètres auront de mauvais scores, donc il ne seront pas choisis par ta validation croisée.
Ce serait gênant si tu avais ça sur tous les choix d'hyperparamètres. Ça se voit au nombre de warnings affichés.
Sur le TP "Entraînez-vous à classer automatiquement des feuilles d’arbres", je ne trouve pas les labels dans le fichier test.csv. J'ai donc splitté les données du fichier Dataset_feuilles_1.csv pour avoir une partie entrainement et une partie test.
@Faduf : C'est normal que les labels ne soient pas présent dans le fichier test.
Sur Kaggle, le principe c'est de construire son modèle à partir des données train. Puis de faire ses prédictions sur les données test. Ensuite il faut soumettre ces prédictions sur le site de Kaggle et on obtient son résultat et un classement dans le leaderboard.
Pour ce faire vous devez créer un compte sur Kaggle. Vous pouvez soumettre via cette page :
TP - Entraînez une régression logistique et une SVM linéaire
j'ai cette erreur à cette étape:
lr_gs.fit(X_train, y_train)
/Users/totoopt/anaconda3/lib/python3.7/site-packages/sklearn/svm/base.py:929: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.
"the number of iterations.", ConvergenceWarning)
merci pour un conseil
J'ai le même problème et j'ai beau augmenter le nombre d'itérations (jusqu'à 10 000), j'ai toujours ce message qui s'affiche de nombreuses fois.
Pourtant j'ai exactement le même code que dans la vidéo. Quelqu'un a-t-il trouvé comment régler cette erreur ? Merci
N'oublie pas que tu fais une validation croisée : le modèle est entraîné autant de fois qu'il y a de combinaisons d'hyperparamètres à tester.
Le message signifie qu'une combinaison d'hyperparamètres ne permet pas de converger. Ça veut simplement dire que ces hyperparamètres sont trop mauvais pour permettre d'entraîner le modèle. Du moment que l'une au moins des combinaisons d'hyperparamètres permet de converger, peu importe l'avertissement : ce que tu recherches, c'est seulement les meilleurs hyperparamètres ! Les mauvais n'auront pas d'incidence sur les bons.
Donc si le message n'apparaît qu'une fois, pas de panique. Tu as réussi.
En effet, ils ne font pas mieux en termes d'erreur quadratique.
Leur intérêt est surtout de limiter le poids des coefficients, ce qui permet :
- de se limiter à seulement quelques variables qui représentent bien l'ensemble de la variance (Ridge), ce qui est un gain important de mémoire et de temps de calcul puisque la plupart des variables auront un coefficient nul et ne seront donc pas utilisées ;
- d'éviter un surapprentissage par l'affectation d'un coefficient excessivement important à quelques variables au détriment des autres (LASSO). Cela évite que le modèle soit trop dépendant de certaines variables pas forcément représentatives de la variance.
Évidemment, il n'y a pas une des trois méthodes qui est meilleure que les autres. Ça dépend des données et du temps de calcul et de la marge d'erreur que tu t'autorises.
- de se limiter à seulement quelques variables qui représentent bien l'ensemble de la variance (Ridge), ce qui est un gain important de mémoire et de temps de calcul puisque la plupart des variables auront un coefficient nul et ne seront donc pas utilisées ;
- d'éviter un surapprentissage par l'affectation d'un coefficient excessivement important à quelques variables au détriment des autres (LASSO). Cela évite que le modèle soit trop dépendant de certaines variables pas forcément représentatives de la variance.
Bonjour @Zachee54, je crois que tu as confondu Ridge et Lasso. Ridge restreint "l'amplitude des poids." (je cite le cours), alors que Lasso "peut directement supprimer les variables et mettre leur poids à zéro".
lorsque je lance le code du TP2 "Entraînez une régression logistique et une SVM linéaire" pour entrainer la régression logistique, j'ai un warning (comme tout le monde ici, j'ai l'impression) "
C:\ProgramData\Anaconda3\lib\site-packages\sklearn\svm\_base.py:976: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations. warnings.warn("Liblinear failed to converge, increase "
Ce warning se répète 13 fois sur les 10 itérations de la crosse-validation. En plus, les meilleurs paramètres qui en résultent sont {'C': 100.0, 'penalty': 'l1'} alors que dans le cours le résultat est le suivant : {'penalty': 'l2', 'C': 1000.0}. J'ai supposé que cela est dû au pas défini pour la recherche de meilleur C. Dans la vidéo, c'est : np.logspace(-3, 3, 10), alors que dans le text de tp c'est np.logspace(-3, 3, 7). J'ai aussi testé avec 10 est le résultat est
{'C': 215.44346900318823, 'penalty': 'l1'}
Les résultats, sont-ils complètement aléatoires ?
- Edité par IrinaMaslowski 23 avril 2021 à 16:27:27
Je vois que je ne suis pas le seul à avoir eu quelques problèmes sur le TP "Entraînez une régression logistique et une SVM linéaire". Je ne reviens pas donc sur la courbe roc finale. Je propose juste une solution qui m'a paru bonne pour récupérer un vecteur de probabilité (y_proba) de sorte que la courbe ait plus de sens en utilisant le module CalibratedClassifierCV (importer depuis sklearn.calibration) en complément de LinearSVC.
et ça m'a permis de sortir une courbe ROC comparable à celles des régressions logistiques précédentes.
Je ne sais pas si c'est une bonne procédure dans notre cas. De ce que j'ai compris le "Platt scaling" utilise une régression logistique comme postprocessing de nos résultats de classification par svm linéaire. Si ça peut aider quelqu'un.
- Edité par adneneguessoum1 22 juin 2021 à 13:14:41
Bonjour, voici une methode plus simple: Au rang 2, il faut réduire les variables, cela permet de toujours avoir une solution sauf si Cov(X1, X2) =1 ou-1. Pour les rangs supérieurs il n'y a pas toujours de solution mais presque. Sinon on peut étidier les Cov(Xi²,Y) plutot que les Cov(Xi,Y) i allant de 1 a n voire avec Xi au cube ou... On fini toujours par trouver une solution.
toujours pas de correction pour l'éval, des incohérence entre les vidéos et le texte du cours, pas de mise a jour par rapport au lib donc du code qui génère masse de warning. Tout a refaire sur ce cours totalement indigeste.
Ce cours est très formel, ce que je rejette pas, bien au contraire, car c'est ce qui permet une compréhension en profondeur des principes sous-jacents des algorithmes essentiels à maîtriser.
Les explications contiennent l'implicite constant de la maîtrise de notions formelles pointues, comme la convexité, les formes quadratiques, etc.
Or, aucun renvoi vers une sélection de ressources permettant de s'actualiser (cela fait partie du travail d'ingénierie pédagogique).
J'avoue être déçu de la qualité pédagogique de ce cours, et me reporter de plus en plus sur des ressources externes à OC.
Bonjour, il faut installer Anaconda. Les notebooks jupiter viennent avec. Sinon, vous pouvez utiliser les notebooks en ligne, tels que Kaggle ou Google Colab.
Dans le TP "Comparez le comportement du lasso et de la régression Ridge", j'obtiens des Mean Squared Error (MSE) pour les Lasso et Ridge qui sont toujours moins bon que ceux de la régression linéaire simple.
Cela me pose deux questions :
a) Dans un commentaire plus haut sur ce fil, quelqu'un a fait la remarque que la régression linéaire simple optimisait déjà la MSE, donc comment est-ce possible que les Lasso et Ridge présentent des MSE inférieures (comme montré dans les graphiques "erreurs en fonction de alpha" dans le cours).
b) À quoi servent ces régressions dans ce cas ? Ou, pour être plus précis, s'ils ne réduisent pas l'erreur de prédiction, comment quantifier l'intérêt des régressions Lasso et Ridge ?
Merci d'avance !
- Edité par DavianThule95 25 février 2023 à 11:58:31
Ridge a pour effet d'uniformiser les coefficients, en prenant en compte la norme euclidienne du vecteur \(\beta\) (en fait le carré de sa norme, \(\left|\left|\beta\right|\right|^{2}\)). Si un coefficient \(\beta_{i}\) devient très grand par rapport aux autres, \(\left|\left|\beta\right|\right|^{2}\) évolue en \(O(\beta_{i}^{2})\) et pénalise fortement le modèle. Par conséquent, Ridge empêche qu'un ou deux coefficients ne prennent le pas sur tous les autres.
De ce fait, Ridge limite les effets de sur-apprentissage. Il produit des modèles moins précis mais qui, en théorie, s'adapteront mieux à de nouvelles données.
Le lasso sert à éliminer complètement les variables les moins représentatives. Il utilise la norme 1 du vecteur \(\beta\), c'est-à-dire la somme des valeurs absolues des coefficients \(\beta_{i}\). Cela pousse le modèle à affecter un maximum de valeurs \(0\) dans le vecteur \(\beta\). Encore une fois, c'est moins précis que la régression linéaire mais c'est un avantage pour éviter le fléau de la dimension.
Le fléau de la dimension vient du fait que les variables inutiles polluent les calculs de distance entre les vecteurs, et polluent les résultats. Prends l'exemple d'un problème à 1 dimension, c'est-à-dire des vecteurs qui contiennent une seule valeur (une abscisse). \(A=(0.2)\) et \(B=(-0.1)\) sont des points très proches l'un de l'autre : \(||\vec{AB}||=0,3\). Mais si tu introduis une deuxième variable (une ordonnée) et que tes points ont alors comme coordonnées \(A=\begin{pmatrix}0.2 \\ -0.8\end{pmatrix}\) et \(B=\begin{pmatrix}-0.1 \\ 0.9\end{pmatrix}\), tout à coup tes points A et B sont beaucoup plus éloignés : \(||\vec{AB}||=1,72\). Si la dimension des ordonnées ne sert à rien pour ton modèle mais que tu la gardes dans tes calculs, tu passes à côté du fait que A et B sont très proches, si on les regarde dans la dimension des abscisses. Dans un cas comme celui-ci, le lasso pourrait choisir des coefficients \(\beta=\begin{pmatrix}1 \\ 0\end{pmatrix}\), ce qui revient à projeter les points sur l'axe des abscisses et à travailler seulement avec la dimension la plus pertinente pour ton modèle.
Visuellement, je me représente la régression linéaire à deux dimensions comme un problème dans un plan : trouver une droite passant par l'origine et passant le plus près possible d'un nuage de points.
Ridge consisterait à se donner un peu de souplesse en acceptant que la droite ne passe pas forcément par l'origine, mais qu'elle touche un disque dont le centre est l'origine. Il suffit qu'elle soit tangente au cercle. Le point de contact entre la droite et le cercle a des coordonnées dont la norme euclidienne correspond au rayon du cercle. Le rayon du cercle est une métaphore du \(\lambda\) de Ridge : s'il est très élevé, les droites tangentes qu'on va trouver vont avoir tendance à se rapprocher excessivement de la verticale ou de l'horizontale, et vont de moins en moins correspondre au nuage de points ; algébriquement, cela correspond au fait que Ridge uniformise excessivement tous les coefficients si \(\lambda\rightarrow +\infty\). Si au contraire \(\lambda=0\), le cercle est réduit au point origine et cela nous ramène à la régression linéaire.
Le lasso consisterait, dans le même ordre d'idée, à trouver une droite touchant le carré (la forme géométrique) formé par les points \(x\) tels que \(||x||_{1}<\lambda\). C'est un carré "penché", dont les sommets sont les points \((0,\lambda)\), \((\lambda,0)\), \((0,-\lambda)\),\((-\lambda,0)\). S'il suffit de trouver une droite qui touche ce carré, alors on va souvent trouver une droite qui touche l'un des sommets : si tu "tords" la droite de la régression linéaire pour lui faire toucher ce carré, intuitivement elle touchera en premier un des sommets. Sur ce sommet, une des deux coordonnées est nulle. C'est un peu le même phénomène qui se passe avec les coefficients \(\beta_{i}\).
Ce sont des métaphores géométriques qui ont leurs limites, mais cela m'a aidé à intégrer ces notions.
Conclusion :
a) C'est normal que ce soit moins bien que la régression linéaire sur le papier, puisque la régression linéaire est la solution parfaite.
b) Tu ne peux pas "quantifier" l'intérêt que tu as à utiliser Ridge ou le lasso. En fait, le talent du data scientist est de savoir lequel des trois modèles résistera le mieux à l'usage qui en sera fait : les données seront-elles très différentes (risque de surapprentissage) ? Y a-t-il trop de variables (fléau de la dimension) ? etc.
Si j'ai bien compris, par construction la régression linéaire minimise la MSE sur le jeu d'entraînement, donc c'est normal que, sur le jeu d'entraînement, les modèles Ridge et Lasso aient une MSE plus grande (i.e moins bonne). Cependant, le pari fait en utilisant les modèles Ridge et Lasso, c'est que la MSE sur le jeu de test soit meilleure pour un Lasso ou un Ridge que pour la régression linéaire. Autrement dit, les modèles Ridge et Lasso sont censés être moins précis mais plus généralisables. C'est bien ça ?
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Дорогу осилит идущий
Дорогу осилит идущий
Apprendre, apprendre et apprendre encore
Dr Pepper
Дорогу осилит идущий