samedi 11 mai 2013

Calcul matriciel

À la suite du concours Heritage Health Prize j'ai constaté que sous R le moteur de calcul matriciel n'était pas rapide (je ne fais pas référence aux calculs des librairies spécialisées) ce qui n'est pas vraiment compatible avec une utilisation professionnelle. 
Il existe pourtant des solutions qui permettent de faire du calcul matriciel avec un rapport coût/performance intéressant. J'en ai testé quelques-unes.


Le modèle ensemble est une combinaison de modèles. Il faut déterminer les meilleures combinaisons c'est à dire celles qui permettent de minimiser l'erreur de l'échantillon d'apprentissage et de test.

Pour chaque modèle, nous avons une prévision, le poids de ces prévisions dans l'ensemble modèle est recherché de la façon suivante :

Boucle 
Prévision de l'ensemble modèle
(
prévision modèle 1*poids de 1+
prévision modèle 2*poids de 2+
prévision modèle 3*poids de 3+
prévision modèle 4*poids de 4
)
/100   

Poids de 1+Poids de 2+Poids de 3+Poids de 4 = 100

Le poids de 1,2,3 et 4 varie de 0 à 100, soit près de 156 849 combinaisons.

Pour chacune de ces combinaisons, je calcule l'erreur de l'échantillon d'apprentissage et de test.


Julia est un nouveau langage qui a été crée par le MIT qui a pour objectif de permettre le calcul matriciel avec un code proche de Matlab et de performance proche du C/Fortran. Il est relativement simple de transcrire du code Matlab en Julia. Inutilisable professionnellement à  l'heure actuelle car trop jeune cependant il a un énorme potentiel.


Armadillo est une librairie qui permet de faire du calcul matriciel en C++ avec un code proche de Matlab. Elle présente d'excellente performance.



Outil Logiciel libre Nombre de processeurs utilisés lors de la boucle Traitement multiprocesseur Temps de calcul Détail du code
R X 1 Pas disponible 12h56 Code R
Julia X 1 Pas dans le code 3h11 Code Julia
Matlab
1,5 X 1h18 Code Matlab
C++/Armadillo X 2 X 46 minutes Code C++

Ne disposant pas de la librairie IML je n'ai pas pu réaliser de test sous SAS


Conclusion : Il existe toujours des solutions pour accélérer un traitement.