Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
1
Introduction à la Recherche en Laboratoire
Factorisation de matrices
et prédiction de génotypes manquants
Chems-Eddine Ouaari
Grenoble INP - Ensimag
Février – Mai 2014
Factorisation de matrices et prédiction de génotypes manquants
Chems-Eddine OUAARI
2 IRL, Février - Mai 2014
1 TABLE DES MATIÈRES
2 Introduction ......................................................................................................................... 3
2.1 Contexte de travail ....................................................................................................... 3
2.2 État de l’art du sujet ..................................................................................................... 3
2.2.1 Prédiction de génotypes manquants / Genotype imputation .................................. 3
2.2.2 Factorisation de matrices ...................................................................................... 3
2.3 Cas du Netflix Challenge.............................................................................................. 4
2.4 Méthodes de factorisation de matrices ......................................................................... 5
3 Expérimentation de différentes implémentations de la factorisation de matrices ................. 6
3.1 Implémentation en Python par Albert Au Yeung (2010) ............................................... 6
3.2 Implémentation en MATLAB par Jean-Philippe Brunet (2004) ..................................... 7
3.3 Implémentation en MATLAB par Yifeng Li (2013) ........................................................ 8
4 Implémentation de la factorisation de matrices par ALS en MATLAB .................................. 9
5 Conclusion .........................................................................................................................12
5.1 Résumé ......................................................................................................................12
5.2 Bilan de l’IRL ...............................................................................................................13
5.3 Remerciements ...........................................................................................................13
6 References ........................................................................................................................14
Annexe : implémentation de la factorisation de matrices par ALS en MATLAB .........................15
Factorisation de matrices et prédiction de génotypes manquants
Chems-Eddine OUAARI
3 IRL, Février - Mai 2014
2 INTRODUCTION
2.1 CONTEXTE DE TRAVAIL J’ai effectué mon Introduction à la Recherche en Laboratoire au sein de l’équipe Biologie
Computationnelle et Mathématiques du Laboratoire TIMC-IMAG. Les recherches effectuées par
cette équipe tournent autour de trois axes majeurs : génomique, biologie des systèmes et
modélisation mathématique de systèmes biologiques complexes.
Le sujet sur lequel j’ai travaillé a été proposé et encadré par Michael Blum, chercheur au
CNRS et qui donne des cours de probabilités et statistiques à l’Ensimag.
2.2 ÉTAT DE L’ART DU SUJET
2.2.1 Prédiction de génotypes manquants / Genotype imputation
Genotype imputation est un terme qui décrit le procédé de prédiction des données
manquantes dans les génotypes pour un échantillon d’individus. Il y a plusieurs scénarios
auxquels le genotype imputation peut s’appliquer. Le plus souvent est celui où on utilise un panel
référence d’haplotypes afin de prédire les données manquantes dans le génotype d’un échantillon
d’individus.
Il existe plusieurs méthodes de prédiction de génotypes manquants. La plupart sont
basées sur l’utilisation d’une base de données référence, et on y retrouve différents software
comme fastPHASE (Scheet and Stephens 2006), MaCH (Li and Abecasis 2006 ; Li et al.
2009,2010), IMPUTE2 (Marchini et al. 2007 ; Howie et al. 2009), BEAGLE (Browning and
Browning 2009) et Mendel (Ayers and Howie 2010). Mais il y a des méthodes plus récentes se
basant sur le fait que les données sur un même haplotype sont a priori corrélées, et donc qu’on
peut utiliser la factorisation de matrices afin de compléter les données manquantes, surtout que
l’on ne peut pas toujours avoir un panel référence pour certains génotypes (plantes par exemple).
2.2.2 Factorisation de matrices
Le but de la complétion de matrice est de reconstruire entièrement une matrice à partir
d’une petite partie de données observées. La complétion de matrices via factorisation pour la
prédiction de données manquantes est assez populaire en machine learning dans des domaines
autres que la génétique. On retrouve parmi les applications les plus célèbres de cette méthode :
le Netflix Challenge dans le domaine des systèmes de recommandation. Il existe également des
implémentations d’algorithmes de factorisation de matrices appliquées à la génomique comme
MENDEL-IMPUTE (Chi et al. 2013) implémenté en MATLAB qui a la particularité d’être à la fois
rapide et efficace.
On peut voir ici une comparaison entre une méthode de prédiction basée sur un modèle
(MaCH) et la méthode de complétion de matrice : (Chi et al. 2013)
Factorisation de matrices et prédiction de génotypes manquants
Chems-Eddine OUAARI
4 IRL, Février - Mai 2014
Propriétés Complétion de matrices MaCH
Nécessite un panel référence d’haplotypes Non Oui (rapide) Non (lent)
Effectue un phasage Non Oui
Traite des échantillons reliés Oui Non (sauf si on les traite comme non reliés)
Sortie de dosage Oui Oui
Prédit des données d’autres omics Oui Non
Implémentation Facile Compliquée
L’objectif du sujet était donc d’explorer des algorithmes de factorisation de matrices
notamment l’ALS (Alternating Least Squares Matrix factorisation), et de les implémenter en
MATLAB, et de les tester sur un jeu de données s’agissant ici d’un génotype contenant seulement
les SNPs du chromosome 22 d’un échantillon de 455 individus.
2.3 CAS DU NETFLIX CHALLENGE
Les données de Netflix consistaient en notations (1, 2, 3, 4 ou 5) de 480 189 utilisateurs sur
17 770 films différents. Cependant chaque utilisateur ne note qu’un petit sous-ensemble de ces
films. L’ensemble d’apprentissage ne contenait donc que 100 480 507 notations. L’objectif du
challenge était alors de compléter une matrice 480 183 × 17 770 avec à peu près 99% de
données manquantes au départ. Ces données pourront être analysées et utilisées afin de
recommander les bons films aux bons utilisateurs.
L’idée est de prendre un certain nombre 𝑐 de critères (genre du film, réalisateur, acteurs,
public visé…), on peut donc construire une matrice 𝐹 représentant la correspondance entre
chaque film et ces critères (chaque ligne représente un film, et chaque colonne un critère), et une
autre matrice 𝑈 représentant les affinités de chaque utilisateur avec ces critères (chaque ligne
représente un utilisateur et chaque colonne un critère). Si 𝑅 représente la matrice de toutes les
notations, alors : �̂� = 𝑈. 𝐹𝑇 où �̂� est une approximation de 𝑅. Ceci revient au fait que le produit
matricielle de 𝑈 et 𝐹𝑇 ici donnerait l’appréciation globale d’un utilisateur pour un film en
considérant les critères caractéristiques de ce dernier.
Soit 𝑝𝑢 une ligne de 𝑈 correspondant à l’utilisateur 𝑢, 𝑞𝑓 une ligne de 𝐹 correspondant au
film 𝑓 et 𝑟𝑢𝑓 la note qu’a donné l’utilisateur 𝑢 au film 𝑓. On cherche donc à minimiser le problème
des moindres carrés suivant :
min𝑈,𝐹
∑ (𝑟𝑢𝑓 − 𝑝𝑢. 𝑞𝑓𝑇
(𝑢,𝑓)∈𝜔 )² ( 1 )
Ici, 𝜔 est l’ensemble d’apprentissage i.e. les couples (𝑢, 𝑓) où la note 𝑟𝑢𝑓 est connue. Le
système complète les données manquantes en ajustant les valeurs déjà observées. Un terme de
régularisation 𝜆 (‖𝑞𝑓‖2
+ ‖𝑝𝑢‖2) pourrait être ajouté au problème afin de ne pas trop ajuster les
données déjà observées (Koren et al. 2009).
Factorisation de matrices et prédiction de génotypes manquants
Chems-Eddine OUAARI
5 IRL, Février - Mai 2014
Analogie avec les génotypes
Les génotypes peuvent être représentés par une matrice dont les lignes correspondent aux
individus, et les colonnes aux SNPs, et dont les valeurs appartiennent à {0,1,2} (en comptant le
nombre d’allèles références).
Les critères de décomposition ici seraient au nombre de 2 : la correspondance paternelle,
et la correspondance maternelle.
2.4 METHODES DE FACTORISATION DE MATRICES
Pour minimiser l’équation ( 1 ), on peut utiliser deux méthodes différentes : Stochastic
Gradient Descent et Alternating Least Squares (ALS). (Koren et al. 2009)
Stochastic Gradient Descent
On boucle sur toutes les notations de l’ensemble d’apprentissage, et pour chaque cas
l’erreur de prédiction est calculée de la manière suivante :
𝑒𝑢𝑓 = 𝑟𝑢𝑓 − 𝑝𝑢. 𝑞𝑓𝑇
Et on modifie donc les facteurs 𝑝𝑢 et 𝑞𝑓 de la manière suivante (𝛼 étant le pas d’avancement) :
{𝑝𝑢 ← 𝑝𝑢 + 𝛼. 𝑒𝑢𝑓. 𝑞𝑓
𝑞𝑓 ← 𝑞𝑓 + 𝛼. 𝑒𝑢𝑓. 𝑝𝑢
Le temps d’exécution de cette méthode est relativement court.
Alternating Least Squares
Le principe est de calculer alternativement l’un des deux facteurs 𝑝𝑢 et 𝑞𝑓, puis de calculer
l’autre. Ce qui revient à rendre le problème de l’équation ( 1 ) quadratique, problème que l’on sait
résoudre de manière optimale.
De plus, contrairement à la méthode Stochastic Gradient Descent, on ne boucle pas sur
chaque notation connue à fois, mais sur chaque vecteur utilisateur, puis sur chaque vecteur film
(en ne gardant que les valeurs de l’ensemble d’apprentissage pour chaque vecteur).
Cette méthode a un temps d’exécution plus long que la méthode précédente, mais
présente une erreur quadratique moyenne bien plus faible, et permet de mieux exploiter les
données de l’ensemble d’apprentissage qu’il soit dense ou pas.
Factorisation de matrices et prédiction de génotypes manquants
Chems-Eddine OUAARI
6 IRL, Février - Mai 2014
3 EXPERIMENTATION DE DIFFERENTES IMPLEMENTATIONS
DE LA FACTORISATION DE MATRICES
Méthode de test : Validation croisée
On génère aléatoirement deux matrices 𝑀1 et 𝑀2 respectivement de tailles 𝑚 × 2 et
2 × 𝑛 , on effectue ensuite le produit matriciel 𝑀 = 𝑀1. 𝑀2 qui est une matrice de taille 𝑚 × 𝑛 dont
les données sont corrélées.
Pour évaluer l’efficacité de l’approximation effectuée par un programme, on calcule l’erreur
quadratique moyenne divisée par l’écart type 𝑠𝑑 des données de la matrice initiale (pour des
raisons de normalisation) :
𝑄𝑢𝑎𝑑𝑟𝑎𝑡𝑖𝑐_𝐸𝑟𝑟𝑜𝑟(𝑀, 𝑁) = 1
𝑠𝑑. 𝑚. 𝑛 √∑(𝑀𝑖𝑗 − 𝑁𝑖𝑗)2
𝑖,𝑗
On applique tout d’abord les programmes sur la matrice telle qu’elle est initialement, afin
d’avoir une idée de l’approximation en partant de 100% de données observées.
Ensuite, on enlève des données à la matrice initiale (en les mettant à NaN), et on exécute
les programmes sur la matrice ainsi obtenue. On compare ensuite le résultat avec la matrice
initiale. On suit l’évolution de l’erreur selon le pourcentage de données manquantes.
On crée également des matrices dont les données sont corrélées par bloc : on génère
aléatoirement 𝑟 matrices 𝑀1, … , 𝑀𝑟 de taille 𝑚 × 2, et 𝑟 matrices 𝑁1, … , 𝑁𝑟 où pour 𝑖 ∈ {1, . . 𝑟} 𝑁𝑖
est de taille 2 × 𝑛𝑖. On garde à la fin la matrice :
𝑀 = [𝑀1. 𝑁1| … |𝑀𝑟. 𝑁𝑟]
3.1 IMPLEMENTATION EN PYTHON PAR ALBERT AU YEUNG (2010)
Une implémentation assez simple de la méthode Stochastic Gradient Descent en utilisant
le langage Python et le package numpy.
Cependant, l’exécution de ce programme sur une simple matrice 5 x 4 prenait un temps
considérable (de l’ordre de 40 s), ce qui est sans doute dû à la non-adaptabilité de Python pour
le genre d’opérations coûteuses effectuées.
De plus le programme implémenté considère 0 comme étant une donnée manquante,
l’application au cas d’un génotype n’est donc pas possible.
Pour ces différentes raison, l’utilisation de cette implémentation dans le cadre de mon travail
a très vite été abandonnée.
Factorisation de matrices et prédiction de génotypes manquants
Chems-Eddine OUAARI
7 IRL, Février - Mai 2014
3.2 IMPLEMENTATION EN MATLAB PAR JEAN-PHILIPPE BRUNET (2004)
Une implémentation en MATLAB d’un algorithme de factorisation de matrices non-
négatives. Ce dernier consiste en factoriser une matrice en produit de deux matrices, avec la
particularité que les trois matrices ne contiennent pas de termes négatifs.
La matrice d’entrée ne doit contenir que des valeurs positives. En revanche, ce
programme ne gère pas les données manquantes dans la matrice. Donc, au lieu d’enlever des
données de la matrice, on y introduit des valeurs sortant du champ des données initiales
(exemple : dans une matrice dont les valeurs sont dans [0,2], les données manquantes sont
représentées par des 5).
Figure 1 - Evolution de l'erreur - Cas nmf de J-P Brunet pour une matrice 100x1000 de valeurs dans [0,2]
L’erreur dans le cas 0% de données manquantes est de : 3.5 10−6
On remarque sur la Figure 1 que l’erreur augmente en fonction du pourcentage de
données manquantes, ceci est sûrement dû au fait qu’insérer des valeurs hors-champ dans la
matrice initiale altère la précision de l’approximation finale, cette méthode n’est donc pas très
adaptée à l’étude qu’on veut mener. Néanmoins, on remarque que même à 80% de données
altérées, on reste à une erreur inférieure à 0.07 pour un champ de valeurs initiale de [0,2].
Factorisation de matrices et prédiction de génotypes manquants
Chems-Eddine OUAARI
8 IRL, Février - Mai 2014
Cette implémentation présente donc une approximation finale assez bonne, avec un
temps d’exécution respectable (environ 5s pour une matrice 100 x 1000). En revanche, elle ne
prend pas en compte les données manquantes, et ne peut donc pas accomplir l’objectif fixé
(complétion de matrices).
3.3 IMPLEMENTATION EN MATLAB PAR YIFENG LI (2013)
Yifeng Li fournit une bibliothèque d’outils de factorisation de matrices non-négatives pour
le Data Mining en Biologie implémentés en MATLAB (The non-negative matrix factorization
toolbox for biological data mining).
On y retrouve une couverture assez complète des différents algorithmes de factorisation de
matrices, notamment des outils utilisant des règles multiplicatives d’optimisation du coût, ou l’ALS.
Mais ce qui nous intéresse, c’est la complétion de matrices, et l’outil le plus à même
d’accomplir cette tâche parmi ceux proposés dans la bibliothèque est le : wnmfrule (Weighted-
NMF optimized by multiplicative rules). Ce programme, en plus d’implémenter l’algorithme de
factorisation de matrices non-négatives et d’être optimisé par les règles multiplicatives, permet
de traiter des matrices contenant des données manquantes (sous forme de NaN). En effet, il
associe aux données n’appartenant pas à l’ensemble d’apprentissage un poids de 0, ce qui évite
de les prendre en compte dans la résolution du problème de minimisation de l’erreur quadratique.
Figure 2 - Evolution de l'erreur - Cas wnmfrule de Y.Li pour une matrice 100x1000 de valeurs dans [0,2]
On remarque sur la Figure 2 que l’erreur oscille autour de 4.3 10−5.
De plus le temps d’exécution est bien optimisé (3s pour une matrice 100 x 1000) ce qui
sans doute dû aux règles multiplicatives.
Factorisation de matrices et prédiction de génotypes manquants
Chems-Eddine OUAARI
9 IRL, Février - Mai 2014
Cependant son application au génotype nécessite quelques modifications, mais du fait
de la forte interaction entre les différents outils et fonctions de la bibliothèque, effectuer ces
modifications demanderait une exploration plus profonde de cette bibliothèque. Et il a été donc
décidé de ne pas poursuivre l’étude de ce cas (notamment pour des raisons de manque de
temps).
4 IMPLEMENTATION DE LA FACTORISATION DE MATRICES
PAR ALS EN MATLAB
Se référer à l’annexe pour le programme représentant mon implémentation de la factorisation
de matrices en utilisant l’ALS en MATLAB.
L’implémentation a été effectuée en se basant sur l’algorithme expliqué par Y.Koren (2009)
(que l’on peut retrouver à la section 2.2).
Figure 3 - Evolution de l'erreur - Cas ALS sur une matrice 100x1000 de valeurs dans [0,2]
On remarque sur la Figure 3 que - malgré quelques oscillations au début - l’erreur reste
très petite (de l’ordre de 10−15 ) ce qui prouve bien l’efficacité au niveau précision de la méthode
ALS qui permet de se placer dans le cas de résolution d’un problème quadratique, qu’on sait
résoudre de manière optimale. En revanche, cette méthode demande un temps d’exécution
assez conséquent (82 s pour une matrice 100x1000 et 0% de données manquantes, mais on a
10s avec 90% de données manquantes) (voir Figure 4).
Factorisation de matrices et prédiction de génotypes manquants
Chems-Eddine OUAARI
10 IRL, Février - Mai 2014
Figure 4 - Evolution du temps d'exécution selon le pourcentage de données manquantes
La courbe de temps de la Figure 4 est décroissante, ce qui est justifié par le fait boucle
sur un ensemble d’apprentissage plus petit (il y a moins de données observées).
On voit donc que si les données sont effectivement corrélées, alors un petit sous-
ensemble de données effectivement observées suffit à retrouver une très bonne approximation
de la matrice de données originale.
Factorisation de matrices et prédiction de génotypes manquants
Chems-Eddine OUAARI
11 IRL, Février - Mai 2014
Cas d’une matrice contenant des données corrélées par blocs
On a ici une matrice contenant deux blocs (100 x 350 et 100 x 650) de données corrélées
entre elles, mais les blocs sont non-reliés.
Figure 5 - Evolution de l'erreur selon le découpage en blocs choisi
Le programme est tout d’abord appliqué à la matrice entière (Figure 5 : courbe bleue
foncé), puis en découpant la matrice en deux blocs : 100 x 200 et 100 x 800 (Figure 5 : courbe
bleue cyan), puis 100 x 350 et 100 x 650 (Figure 5 : courbe verte) et enfin 100 x 400 et 100 x 600
(Figure 5 : courbe rouge).
On remarque que dans le cas de la matrice entière et du premier découpage, l’erreur est
relativement très grande par rapport au reste, puis plus on se rapproche du bon découpage
l’erreur diminue (comme on le voit avec la courbe rouge), et si on tombe sur le bon découpage
on revient à une erreur très petite (de l’ordre de 10−15).
On peut donc penser qu’en appliquant le programme avec différents découpages sur un
génotype, on peut, en comparant les erreurs obtenues, tomber sur les différents haplotypes
composant ce génotype.
Test sur le jeu de données et limites du programme
En appliquant le programme au génotype en entier avec 0% de données manquantes,
on obtient une erreur de 0.001 après 1h d’exécution, résultat assez logique car les données ne
sont corrélées que sur certaines régions du génotype.
Factorisation de matrices et prédiction de génotypes manquants
Chems-Eddine OUAARI
12 IRL, Février - Mai 2014
En découpant le génotype en bloc de 2000 SNPs, on obtient (après 3h d’exécution) les
résultats suivants :
Numéro du bloc Erreur relative (par rapport au bloc correspondant dans la matrice initiale)
1 0.003283
2 0.003236
3 0.003428
4 0.003249
5 0.003287
6 0.003297
7 0.003259
8 0.003556
9 0.003319
10 0.003539
En enlevant 90% des données, on retombe à peu près sur les mêmes résultats (mais on
retombe à 15mn d’exécution), ce qui prouve l’efficacité au niveau précision de l’algorithme, et
confirme ainsi le faible taux de l’ensemble d’apprentissage dont le programme a besoin.
On arrive donc aux limites du programme, et on peut percevoir que le problème majeur
rencontré ici est le temps d’exécution qui est très long. De plus, un autre problème rencontré est
le fait que la méthode de factorisation de matrice renvoie une matrice complétée avec des valeurs
réelles, alors que pour un génotype les valeurs sont dans {0,1,2}. Une solution proposée par Chi
et al. (2013) est de tout simplement arrondir les valeurs obtenues à l’entier le plus proche parmi
0, 1 et 2.
5 CONCLUSION
5.1 RESUME
La factorisation de matrices est un outil assez puissant dans le cadre de la complétion de
matrices dans le cas où les données sont a priori corrélées. Il y a plusieurs méthodes de
factorisation de matrices (Stochastic Gradient Descent, ALS …) ainsi que plusieurs modèles
(NMF ou pas…) chaque méthode ou modèle étant plus adapté à un scénario plus qu’un autre,
dépendant des critères habituelles (temps d’exécution, précision de l’approximation) ou de la
situation (complétion de matrices, juste factorisation…).
L’ALS est réputé pour être un algorithme assez lent, mais doté d’une précision assez forte.
Je n’ai malheureusement pas pu appliquer -faute de temps- mon programme implémentant l’ALS
afin de cibler les haplotypes au sein d’un génotype, et de voir s’il peut être utile dans un scénario
nécessitant la prédiction de données manquantes dans un génotype.
Factorisation de matrices et prédiction de génotypes manquants
Chems-Eddine OUAARI
13 IRL, Février - Mai 2014
Critères Implémentation en Python par Yeung (2010)
Nmf de Brunet (2004)
Wnmfrule de Li (2013)
Mon implémentation
de l’ALS
Temps d’exécution
Très long 5s pour une matrice
100x1000
3s pour une matrice
100x1000
82s pour une matrice
100x1000
Précision NA 10−2 10−5 10−15
Difficulté d’implémentation
NA Simple Complexe Simple
Prise en compte des données manquantes
NA Non Oui Oui
5.2 BILAN DE L’IRL
Choisir ce module d’Introduction à la Recherche en Laboratoire m’a permis de découvrir la
recherche sous différents aspects, en étant vraiment plongé dans le milieu, ce qui change des
simples présentations habituelles. J’ai bien aimé la méthodologie : Mise en place du problème,
lecture et exploitation d’articles (aspect -à mon avis- significatif de la vie de chercher) qui sont en
général en anglais ce qui permet de s’habituer à la lecture de textes scientifiques dans cette
langue. Puis une certaine liberté dans l’approche du sujet jusqu’à en arriver à l’expérimentation,
l’exploitation des résultats de l’expérimentation, la correction …
Il y a cependant quelques points que je regrette, notamment le fait de ne pas être aller plus
loin dans ce sujet à cause des fausses pistes exploitées au début. Et puis, j’aurais aimé plus
échanger avec les chercheurs et thésards au sein du laboratoire, afin d’en apprendre plus sur
leurs parcours et leurs travaux. Je n’ai malheureusement pas pu accorder autant de temps que
je voulais à ce sujet qui est fort intéressant qui permet plusieurs développements possibles. Ceci
est majoritairement dû à la charge -excessive- de travail demandée dans la filière MMIS en ce
semestre. De plus, le fait de travailler qu’une à deux fois par semaine sur mon sujet, je pense que
mon activité n’était pas aussi efficace qu’elle aurait pu être si les périodes de travail étaient plus
condensées (Mini-stage IRL par exemple).
5.3 REMERCIEMENTS
Je tiens à remercier Michael Blum, qui a proposé ce sujet, et qui m’a aidé et encadré durant
ce semestre, et qui m’a permis de plus m’intéresser à l’importance des statistiques et leurs
applications à différents domaines notamment la génomique.
Factorisation de matrices et prédiction de génotypes manquants
Chems-Eddine OUAARI
14 IRL, Février - Mai 2014
6 REFERENCES
Brunet, J.-P. (n.d.). Retrieved from
http://www.broadinstitute.org/mpr/publications/projects/NMF/nmf.m
Chi, E. C., Zhou, H., Chen, G. K., Ortega Del Vecchyo, D., & Lange, K. (2013). Genotype
imputation via matrix completion. Genome Research.
Koren, Y., Bell, R., & Volinsky, C. (2009). Matrix Factorization techniques for Recommender
Systems. Computer.
Li, Y., & Ngom, A. (n.d.). The Non-Negative Matrix Factorization Toolbox in MATLAB. Retrieved
from https://sites.google.com/site/nmftool/
Marchini, J., & Howie, B. (2010). Genotype imputation for genome-wide association studies.
Nature Reviews, Genetics.
Yeung, A. A. (n.d.). Matrix factorization: a simple tutorial and implementation in Python.
Retrieved from http://www.quuxlabs.com/blog/2010/09/matrix-factorization-a-simple-
tutorial-and-implementation-in-python/
Factorisation de matrices et prédiction de génotypes manquants
Chems-Eddine OUAARI
15 IRL, Février - Mai 2014
ANNEXE : IMPLEMENTATION DE LA FACTORISATION DE
MATRICES PAR ALS EN MATLAB
function [ R,P,Q,telapsed ] = als( M , k , verbose)
% Implementation of the Alternating Least Squares algorithm
% Chems-Eddine Ouaari - April 2014
%
%
% M (m,n) : original matrix.
% Numerical data only.
% Must be non negative.
% Missing data must be entered as NaN.
% k : number of desired factors (rank of the factorization).
% verbose : prints iteration count unless verbose is 0.
%
% R : m x n result matrix.
% P : m x k MF Factor.
% Q : k x n MF Factor.
% telapsed: Execution time of the program.
tstart = tic;
niter = 50;
[m,n] = size(M);
erreur = 10^(-6);
training = isnan(M);
P = rand(m,k);
Q = rand(k,n);
for i=1:niter
if verbose == 1
if mod(i,10) == 0
fprintf('Iter %i \n',i);
end
end
for u=1:m
U = [];
r = [];
for v =1:n
if training(u,v)==0
U = [U,Q(:,v)];
r = [r;M(u,v)];
end
end
G = U * (U');
temp = U * r;
% Resolution of the first least squares problem
P(u,:)=(inv(G) * temp)';
end
Factorisation de matrices et prédiction de génotypes manquants
Chems-Eddine OUAARI
16 IRL, Février - Mai 2014
for v = 1:n
V = [];
r = [];
for u = 1:m
if training(u,v)==0
V=[V;P(u,:)];
r=[r;M(u,v)];
end
end
% Resolution of the second least squares problem
Q(:,v) = inv((V') * V) * (V') * r ;
end
R = P*Q;
end
telapsed = toc(tstart);