Comment effectuer une SVD pour imputer des valeurs manquantes, un exemple concret

8

J'ai lu les excellents commentaires sur la façon de traiter les valeurs manquantes avant d'appliquer SVD, mais j'aimerais savoir comment cela fonctionne avec un exemple simple:

        Movie1 Movie2 Movie3
User1     5             4
User2     2      5      5
User3            3      4
User4     1             5
User5     5      1      5

Étant donné la matrice ci-dessus, si je supprime les valeurs NA, je finirai par n'avoir que User2 et User5. Cela signifie que mon U sera 2 × k. Mais si je prédis les valeurs manquantes, U devrait être de 5 × k, que je peux multiplier avec des valeurs singulières et V .

Est-ce que quelqu'un parmi vous remplirait les valeurs manquantes dans la matrice ci-dessus en supprimant d'abord les utilisateurs avec des valeurs manquantes puis en appliquant SVD? Veuillez fournir une explication très simple de la procédure que vous avez appliquée et rendre votre réponse pratique (c'est-à-dire que le nombre multiplié par un autre donne une réponse) plutôt que d'utiliser trop de symboles mathématiques.

J'ai lu les liens suivants:

stats.stackexchange.com/q/33142

stats.stackexchange.com/q/31096

stats.stackexchange.com/q/33103

Boro Dega
la source
Tout le monde n'a pas regardé au moins un film, non? Ainsi, la suppression de tous les utilisateurs pour lesquels des données sont manquantes n'entraînera aucun utilisateur et aucune ligne dans votre matrice d'utilité (évaluation). Vous ne pouvez donc pas supprimer les lignes auxquelles il manque des données, non? SVD n'est pas utile pour les jeux de données avec des valeurs manquantes. Il existe cependant d'autres techniques de factorisation matricielle qui peuvent les imputer. Écoutez, SVD aurait besoin que vous imputiez à l'avance les données manquantes, d'une autre manière. Vous pouvez faire l'imputation de manière idiote en utilisant simplement une ancienne constante, mais quel est l'intérêt d'utiliser de telles données inutiles? Voulez-vous que les ordures soient sorties?
Geoffrey Anderson

Réponses:

5

SVD n'est défini que pour des matrices complètes. Donc, si vous vous en tenez à SVD simple, vous devez remplir ces valeurs manquantes avant (SVD n'est pas un algorithme d'imputation en soi). Nous espérons que les erreurs que vous introduisez seront annulées par votre approche de factorisation matricielle (hypothèse générale: les données sont générées par un modèle de bas rang).

Supprimer des lignes complètes comme vous le souhaitez est tout simplement mauvais. Même la mise à zéro des valeurs manquantes serait préférable.

Il existe de nombreuses stratégies d'imputation, mais dans ce cas, j'imputerais avec la moyenne de la colonne (ou peut-être la moyenne de la ligne). Il s'agit essentiellement de la stratégie recommandée dans votre 2ème lien.

        Movie1 Movie2 Movie3
User1   5             4
User2   2      5      5
User3          3      4
User4   1             5
User5   5      1      5

devient (moyenne des colonnes; score moyen du film)

        Movie1 Movie2 Movie3
User1   5      3      4
User2   2      5      5
User3   3      3      4
User4   1      3      5
User5   5      1      5

Et encore une remarque: vous devez prétraiter les données. Soustrayez au moins la moyenne de toutes les valeurs!

Jetez un œil à cette introduction . Il modifie l'approche imputation + SVD et parle également d'une modélisation plus directe des valeurs manquantes. Mais dans ce cas, d'autres algorithmes sont utilisés.

sascha
la source
Merci pour votre réponse. Veuillez regarder ce lien de blog . Il semble que Simon n'ait utilisé que des notes non manquantes, c'est-à-dire qu'il a ignoré les notes manquantes. N'est-ce pas la même chose que je propose. S'il vous plaît donnez votre avis.
Boro Dega
2
Prenez votre temps et lisez mon lien. Il couvre exactement la stratégie décrite par votre lien de blog. Il n'impute rien et il n'utilise pas SVD . Il utilise simplement une formulation de descente de gradient stochastique de l'approche motivée par SVD (qui offre la possibilité d'ignorer toutes les entrées manquantes)! Pour plus d'informations, il suffit de google pour la factorisation matricielle + gradient stochastique . Il y a beaucoup de travail!
sascha
2

Il existe de nombreuses façons de prédire les valeurs manquantes, mais la SVD classique n'en fait pas partie. Ce qui est bien, c'est que l'apprentissage automatique offre désormais de nombreuses façons de le faire, dont certaines sont basées sur la factorisation matricielle, d'autres complètement différentes de la factorisation matricielle. Vous pouvez choisir et créer un modèle entièrement personnalisé, et cela se fait couramment maintenant parce que les outils sont assez puissants aujourd'hui. La factorisation matricielle est certainement un bon moyen de prédire les valeurs manquantes dans les données rares, mais la SVD elle-même ne l'est pas.

La réponse acceptée ici, a apparemment conseillé au questionneur de choisir simplement une valeur constante telle que 0 ou 99 ou -3 ou autre, à assigner aux valeurs manquantes à l'avance, puis d'exécuter SVD sur cela. C'est une mauvaise réponse si l'objectif est de prédire sur des ensembles de données clairsemés. Mais si le but de l'OP est simplement d'exécuter SVD, alors la pré-affectation de toute valeur constante fonctionnera correctement, alors choisissez n'importe quelle valeur puis exécutez SVD si les résultats n'ont pas d'importance pour l'OP. J'ai dit que SVD est une mauvaise solution pour prédire les valeurs manquantes, car en supposant une valeur constante dans tous les emplacements clairsemés, vous pourriez finir par introduire littéralement plus de points de bruit que de bons points de données connus.

Quel est l'intérêt d'apprendre le bruit? Et pourquoi suggéreriez-vous même que les valeurs manquantes sont en fait la même valeur constante, alors que le but de l'exercice est de prédire ce qu'elles sont? Vous ne vous attendez pas à ce que les valeurs manquantes soient vraiment les mêmes, non? Cela va sous-estimer le nombre de composants principaux qui résultent s'il y a des données constantes si omniprésentes dans votre ensemble de données, pour une chose. C'est également un problème de prédiction très facile. Vous n'avez pas besoin d'un algorithme d'apprentissage ou même d'un algorithme de factorisation. Vous venez de dire que les valeurs manquantes sont une constante connue. Pas besoin d'imputer! Vous l'avez déjà fait, manuellement, en devinant simplement l'ancienne méthode.

Vous pouvez devenir plus amateur de SVD et pré-imputer les valeurs manquantes en utilisant une distribution aléatoire dérivée empiriquement en utilisant la moyenne et l'écart-type des données connues (non manquantes). Mais il y a ensuite un caractère aléatoire au lieu de modèles dans les données et vous vous attendez probablement à une factorisation matricielle et à une réduction de la dimensionnalité inhérentes à cette technique pour trouver les modèles que vous attendez. Cependant, vous ne découvrirez pas de nombreux modèles utiles dans le bruit aléatoire, donc cela n'aide pas non plus à utiliser de cette façon.

L'essentiel est que la sortie de SVD - ou de tout autre algorithme - sera en grande partie une ordure chaque fois qu'il y aura une quantité écrasante de données indésirables fournies par l'investigateur. Aucun algorithme ne peut apprendre un bon modèle à partir de données indésirables majoritaires. Dites simplement non à toute cette «approche».

Il semble probable que l'objectif du PO est de prédire et d'utiliser une conception de factorisation matricielle dans le cadre de l'algorithme d'apprentissage. Dans ce cas, la bonne chose est que vous pouvez écrire votre propre fonction de coût, ce qui omet de manière cruciale du coût toutes les prédictions faites contre les valeurs manquantes. Aucune donnée indésirable n'est transmise à l'algorithme d'apprentissage de cette façon.Utilisez un bon optimiseur basé sur la descente de gradient, comme Adam (il y en a d'autres). Vous pouvez obtenir une solution qui est mesurablement précise à n'importe quel degré sur la formation, le développement et le jeu de données de test, à condition de suivre une bonne méthodologie de projet d'apprentissage automatique. N'hésitez pas à ajouter des termes et de la complexité à votre modèle comme le biais utilisateur, le biais d'élément, le biais global, la régularisation ou tout ce dont vous avez besoin pour contrôler l'erreur de biais et l'erreur de variance selon les exigences de votre projet et les ensembles de données disponibles.

Un package de développement d'apprentissage automatique moderne en fait une approche pratique maintenant. TensorFlow par exemple (ou Microsoft CNTK et al) peut vous aider à faire exactement ce que j'ai décrit sur un jeu de données clairsemé en utilisant un modèle de factorisation matricielle.

Geoffrey Anderson
la source
Grande réflexion. J'aime vraiment votre réponse et elle est parfaite. Pourriez-vous développer votre réponse avec un script qui montre vos solutions. Ce sera alors la réponse à la question. Merci
Boro Dega
2

Ce document couvre ce que vous recherchez dans des détails très élégants (en utilisant un seuil doux SVD). Comme Geoffrey l'a souligné, ils le font en écrivant leur propre fonction de coût qui exclut du coût, toutes les prédictions faites contre les valeurs manquantes.

Résumé: Mazumdar et al utilisent des techniques de relaxation convexe pour fournir une séquence de solutions de faible rang régularisées pour les problèmes d'achèvement de matrice à grande échelle. L'algorithme SOFT-IMPUTE remplace de manière itérative les éléments manquants par ceux obtenus à partir d'un SVD à seuil doux. Exploitant la structure du problème, ils montrent que la tâche peut être effectuée avec une complexité d'ordre linéaire dans les dimensions de la matrice. L'algorithme est facilement extensible à de grandes matrices; par exemple, il correspond à une approximation de rang 95 à l'ensemble complet de formation Netflix en 3,3 heures. Les méthodes permettent d'obtenir de bonnes erreurs de formation et de test et ont des délais supérieurs par rapport à d'autres techniques de pointe compétitives.

@article {mazumder2010spectral, title = {Algorithmes de régularisation spectrale pour l'apprentissage de grandes matrices incomplètes}, auteur = {Mazumder, Rahul et Hastie, Trevor et Tibshirani, Robert}, journal = {Journal of machine learning research}, volume = {11}, nombre = {août}, pages = {2287--2322}, année = {2010}}

Ambareesh
la source