J'essaie de normaliser les colonnes de l'ensemble de données pour la régression linéaire.
L'une des colonnes a l'écart type = 0.
def standardize(X):
return (X - mean(X)) / std(X)
Donc, ce code ne fonctionne pas.
Existe-t-il des astuces pour résoudre ce problème? J'ai essayé deux choses
- Jetez la colonne avec l'écart-type 0 car c'est un paramètre inutile.
- Ajoutez un très petit bruit comme à l'un des éléments de la colonne pour que la fonction fonctionne.
standardize
Je vous remercie!
regression
standardization
Pratik Deoghare
la source
la source
Réponses:
La situation que vous décrivez résultera de l'un de ces deux scénarios:
Pour le scénario 1 : ignorez cette colonne, standardisez toutes les autres colonnes, puis exécutez la régression comme vous le feriez normalement.
Pour le scénario 2 , cependant, vous devrez vous débarrasser entièrement de cette colonne constante supplémentaire. En fait, quelle que soit la question de la normalisation , vous ne pourrez jamais exécuter la régression avec deux colonnes constantes car vous auriez alors une colinéarité parfaite . Le résultat est que même si vous essayez d' exécuter la régression, le programme informatique crachera un message d'erreur et quittera à mi-chemin [Remarque: c'est parce qu'une régression OLS nécessite que la matrice X'X soit non singulière pour que les choses fonctionnent. correctement].
Quoi qu'il en soit, bonne chance avec votre, euh, régression!
[****] Juste pour clarifier: ce que je veux dire par "deux colonnes de constantes", c'est que vous avez une colonne dans laquelle chaque élément est "1" et une deuxième colonne dans laquelle chaque élément est une constante "k" .. .
la source
La bonne façon serait de supprimer la colonne d'entités des données. Mais comme un hack temporaire -
Vous pouvez simplement remplacer le 0 std par 1 pour cette fonctionnalité. Cela signifierait essentiellement que la valeur mise à l'échelle serait nulle pour tous les points de données de cette entité. Cela a du sens car cela implique que les valeurs des caractéristiques ne s'écartent même pas un peu de la moyenne (car les valeurs sont constantes, la constante est la moyenne).
FYI- C'est ce que fait sklearn! https://github.com/scikit-learn/scikit-learn/blob/7389dbac82d362f296dc2746f10e43ffa1615660/sklearn/preprocessing/data.py#L70
la source
La fonction qui n'a aucune variance est inutile, supprimez-la.
Considérez ceci, si c'était la seule fonctionnalité, vous n'apprendriez rien de la réponse à cette fonctionnalité à partir des données. Dans le cas multivarié, il faut une algèbre linéaire pour arriver à la même conclusion, mais l'idée est la même.
la source