1. Trang chủ
  2. » Thể loại khác

Implémentation d''''''''une copule mutilvariée: Luận văn ThS. Công nghệ thông tin

61 8 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 61
Dung lượng 1,93 MB

Nội dung

Institut de la Francophonie pour l’Informatique ´moire de fin d’e ´tudes Me Impl´ ementation d’une copule mutilvari´ ee R´ealis´e par : Superviseur : PHAM Van Trung Gildas MAZO Projet Mistis Centre de recherche INRIA Grenoble Rhˆone-Alpes 29 novembre 2013 Remerciements Je tiens ` a exprimer ma profonde gratitude `a Gildas Mazo, mon directeur de stage Il ´etait toujours prˆet ` a m’avoir donn´e des aides pour que j’aie pu comprendre bien des connaissances statistiques n´ecessaires Ses commentaires utiles et ses judicieux conseils m’ont souvent ´et´e d’un grand recours pour mener `a bien les objectifs de mon stage Je tiens ´egalement ` a remercier les membres de l’´equipe MISTIS Grˆace `a leur soutien, j’ai pu m’int´egrer facilement ` a l’´equipe Je voudrais adresser mes sinc`eres remerciements aux professeurs de l’IFI Leurs cours m’ont permis d’approfondir mes connaissances sur des langages de programmation tels que R et C++ Enfin, je tiens ` a remercier ma famille, mes amis et notamment ma copine Truong Hong Van qui m’ont support´e ces six mois de stage Leurs encouragements m’ont permis d’ˆetre toujours motiv´e et d’avoir pu remplir mon rˆole i R´ esum´ e L’objectif de ce m´emoire de fin d’´etudes est d’impl´ementer une copule multivari´ee associ´ee ` a un Cumulative Distribution Network (CDN) CDN est une fonction de r´epartition d’un grand nombre de variables qui se factorise en produit de fonctions de r´epartition bivari´ees Ce mod`ele permet de d´ecrire la d´ependance entre plusieurs variables al´eatoires via un graphe o` u les arrˆetes repr´esentent les fonctions reliant les variables La fonction de vraisemblance est calcul´ee grˆ ace `a un algorithme de message-passing L’inf´erence dans le CDN est alors mise en oeuvre via la maximisation de la vraisemblance en utilisant une m´ethode d’optimisation Toutefois, l’impl´ementation d´elicate de ce mod`ele peut freiner l’utilisateur dans la pratique Nous nous proposons de l’impl´ementer et de le rendre disponible sous la forme d’un paquet R R est un logiciel de statistique tr`es r´epandu et de plus en plus utilis´e Avec ce paquet, il est tr`es facile de construire le graphe et de choisir des familles de copule param´etriques ainsi que de mod´eliser des donn´ees avec un CDN Il permet aussi de calculer la vraisemblance selon l’algorithme de message-passing et de faire l’inf´erence En outre, la vitesse de l’algorithme est augment´ee grˆace `a l’´ecriture d’une partie du code en C++ Mots-cl´ es : Cumulative Distribution Network, copule, vraisemblance, fonction de r´epartition multivari´ee ii Abstract The goal of the thesis aims at implementing a multivariate copula associated with a Cumulative Distribution Network (CDN) CDN is a high-dimensional cumulative distribution function (CDF) defined as a product of bivariate CDFs This model accounts for dependencies between random variables via a graph where the edges represent the functions linking the variables The likelihood function is computed thanks to a messagepassing algorithm The inference in CDN is performed by optimizing the likelihood function However, the implementation of this model is not available for users in practice Hence, we propose to implement it and make it available as an R package R is a statistical software widely spread in pratice Using this package, the users can build easily the graph, choose parametric copula families and generate data with a CDN It allows to compute the likelihood function according to a message-passing algorithm and perform inference in CDN Moreover, the speed of the algorithm has been increased by integrating C++ codes Keywords : Cumulative Distribution Network, copula, likelihood, multivariate distribution function iii Table des mati` eres Remerciements i R´ esum´ e ii Abstract iii Table des figures vi Liste des tableaux viii Contexte du stage 1 Introduction 1.1 Statistique th´eorique 1.1.1 Mod`ele statistique 1.1.2 Estimation des param`etres d’un mod`ele statistique 1.1.3 Copules 1.1.4 Cumulative distribution networks 1.1.5 La copule associ´ee au CDN 1.2 Environnement de programmation 1.2.1 R 1.2.2 Structure d’un paquet R 1.2.3 Rcpp - Interface entre R et C++ 3 9 10 Algorithme de gradient-derivative-product 11 2.1 Initialisation de l’algorithme 11 2.2 Propagation des messages 12 2.3 Calcul de la fonction de vraisemblance et son gradient 13 Impl´ ementation 3.1 Structure du paquet 3.1.1 Code source 3.1.2 Documentation 3.1.3 Tests et tutoriels 3.2 Fonctions du paquet 3.2.1 Cr´eation d’un objet CDN 3.2.2 Impl´ementation de l’algorithme 3.2.3 Estimation des param`etres iv de message-passing 17 17 18 18 19 19 20 22 26 Contents Exp´ erimentations 4.1 Pr´ecision num´erique de l’algorithme de message-passing 4.2 Simulation des donn´ees 4.3 Temps d’ex´ecution 4.4 Application avec un jeu de donn´ees r´eelles v 28 28 30 33 36 Conclusions et perspectives 40 Bibliographie 41 A mpAlgo 43 A.1 Initialisation de l’algorithme de message-passing 43 A.2 Propagation des messages 44 A.3 Calcul de la densit´e et du gradient 47 B cdnOptim 48 B.1 Calcul de la fonction de vraisemblance et son gradient 48 B.2 M´ethode de Broyden-Fletcher-Goldfarb-Shanno bfgs 49 B.3 Limited-memory BFGS with bounds lbfgsb 50 C rCdn, pCdn et dCdn 51 C.1 G´en´eration al´eatoire des observations rCdn 51 C.2 Calcul de la fonction de r´epartition pCdn 52 C.3 Calcul de la densit´e de plusieurs observations dCdn 52 Table des figures 1.1 Exemple d’un CDN ` a trois variables 1.2 Exemple d’un CDN ` a sept variables 2.1 Exemple d’un arbre de variables 15 2.2 Propagation des messages dans le CDN 16 3.1 Composants principaux du paquet CDN 17 3.2 Code source du paquet CDN 18 3.3 Documentation du paquet 19 3.4 Tests et d´emo 19 3.5 Diagramme des fonctions du paquet 20 3.6 Cr´eation d’un objet CDN 21 3.7 Exemple de transformation d’un graphe des variables en graphe CDN 22 3.8 Exemple de simplification du graphe 23 3.9 Algorithme de message-passing 23 3.10 Calculation de la fonction de r´epartition normale et ses gradients 24 3.11 Appel des libraries/fonctions dans C/C++ 25 3.12 Comparaison entre cdnOptim et optim 27 4.0 Pr´ecision de l’algorithme de message passing avec mod`eles existants 31 4.1 Pr´ecision de l’algorithme de message passing avec le mod`ele normal 32 vi List of Tables 4.2 vii Temps d’ex´ecution du calcul direct et de la fonction mpAlgo (en millisecondes) 35 4.3 ´ Plan de sites aux Etats Unis o` u les pr´ecipitations sont utilis´ees pour notre mod`ele 38 4.4 R´esultats de mod`eles mutivari´es 39 Liste des tableaux 3.1 Matrice binaire extraite du graphe CDN 22 3.2 Comparaison entre le temps du calcul via fonction R et celui du calcul direct en C++ 25 4.1 Probabilit´e de l’´ev´enement (X1 ≤ x01 , X2 ≤ x02 , X3 ≤ x03 , X4 ≤ x04 , X5 ≤ x05 ) dans les donn´ees simul´ees et F (x0 ) = F (x01 , x02 , x03 , x04 , x05 ) 32 4.2 R´esultats de l’estimation des param`etres 34 4.3 Temps d’ex´ecution du calcul direct (en rouge) et de la fonction mpAlgo (en bleu) (en milisecondes) 35 4.4 Comparaison entre le temps d’ex´ecution de la fonction optim et cdnOptim (en secondes) 36 4.5 Erreur quadratique moyenne selon deux mod`eles 37 viii Contexte du stage Probl´ ematique Les copules [1, 2] jouent un rˆ ole de plus en plus important dans la construction de distributions en grande dimension et la description de la d´ependance entre les variables al´eatoires L’une des difficult´es de la construction d’une copule mutilvari´ee r´eside dans l’inf´erence de mod`eles param´etriques Une copule multivari´ee associ´ee `a un Cumulative Distribution Network (CDN) [3] a ´et´e propos´ee L’int´erˆet de ce mod`ele est la capacit´e de faire l’inf´erence via un algorithme de message-pasing [4] L’estimation des param`etres est alors mise en oeuvre par la maximisation de la vraisemblance Toutefois, le code pour utiliser le CDN ainsi que l’algorithme de message-passing n’est pas disponible Cela peut freiner l’utilisateur dans la pratique C’est la raison pour laquelle nous nous proposons d’impl´ementer cet algorithme dans mon stage Objectif de stage L’objectif de mon stage est d’impl´ementer l’inf´erence de cette copule multivari´ee et de la rendre disponible sous la forme d’un paquet R [5] Ce paquet qui s’appelle CDN est disponible pour l’utilisation Je l’ai pr´esent´e dans une communication orale et un poster en juin 2013 ` a Lyon lors des deuxi`emes rencontres R [6] Je pr´evois de le soumettre sur le d´epˆ ot des paquets R (http://cran.r-project.org/) en d´ecembre 2013 apr`es la publication de [3] Environnement de stage Mon stage est r´ealis´e au centre de recherche INRIA Grenoble Rhˆone-Alpes dans le cadre du projet MISTIS sous la direction de Mazo Gildas Cette ´equipe a pour domaine d’expertise la mod´elisation de ph´enom`enes al´eatoires complexes en grande dimension Chapitre Exp´erimentations 38 (a) (b) ´ Figure 4.3: a) Les sites aux Etats Unis o` u les pr´ecipitations sont utilis´ees pour notre mod`ele ; b) Le graph CDN correspondant Chapitre Exp´erimentations 39 0.4 0.8 0.8 Modèle 0.0 0.4 0.8 0.0 0.4 0.8 Joe AMH Normal 0.4 0.8 Empirique 0.0 0.4 Modèle 0.0 0.4 Modèle 0.4 0.8 Empirique 0.8 Empirique 0.8 Empirique 0.0 0.0 0.4 0.0 Modèle 0.4 0.0 0.4 0.0 Modèle 0.0 Modèle Frank 0.8 FGM 0.8 Gumbel 0.0 0.4 0.8 0.0 Empirique Figure 4.4: R´esultats de mod`eles mutivari´es 0.4 0.8 Empirique Chapitre Conclusions et perspectives Au cours de mon stage, j’ai d´evelopp´e le paquet CDN pour l’impl´ementation d’une copule multivari´ee bas´ee sur le Cumulative Distribution Network, un outil permettant la construction de distributions en grande dimension La fonction de r´epartition sur le CDN se factorise en produit de fonctions de r´epartition bivari´ee Pour construire le CDN dans R, le graphe est tout d’abord cr´e´e d’une mani`ere la plus simple et visuelle via le paquet igraph Ensuite, j’ai install´e quelques familles de copule populaires telles que Gumbel, Frank, FGM, AMH, Joe, Gauss Pour calculer la fonction de vraisemblance, un algorithme de message-passing est impl´ement´e Enfin, l’inf´erence dans le CDN est r´ealis´ee grˆ ace ` a la m´ethode de maximum de vraisemblance En outre, l’impl´ementation de CDN est mis en oeuvre sous forme d’un paquet R Cela permet aux utilisateurs de l’utiliser gratuitement et librement C’est aussi la contribution importante de mon stage Apr`es la soumission du paquet sur un d´epˆot des paquets tel que http://cran.r-project org/, son entretien et sa mise `a jour doivent ˆetre souvent r´ealis´es En effet, il est n´ecessaire de corriger des erreurs ´eventuelles d´etect´ees par les utilisateurs lors de leur utilisation Les options peuvent ˆetre ajout´ees aux fonctions du paquet afin de donner plus de choix aux utilisateurs Par exemple, en plus de six mod`eles d´ej`a install´es, on peut impl´ementer des autres si les utilisateurs s’y int´eressent comme la copule de Student [18] Autre exemple est que la simulation des donn´ees pour le mod`ele FGM n’est pas disponible pour l’instant dans le paquet On peut l’impl´ementer dans l’avenir En outre, ce paquet est aussi prˆet ` a ˆetre ´etendu si des autres algorithmes et des autres applications sur le CDN sont publi´es 40 Bibliographie [1] R B Nelsen An Introduction to Copulas Springer, 2006 [2] P Jaworski, F Durante, W.K Hăardle, and T Rychlik Copula Theory and Its Applications : Proceedings of the Workshop Held in Warsaw Springer, 2010 [3] G Mazo, F Forbes, and S Girard A pratical high dimensional copula class based on products of bivariate copulas En pr´eparation [4] J.C Huang and N Jojic Maximum-likelihood learning of cumulative distribution functions on graphs In 13th International Conference on Artificial Intelligence and Statistics, AISTATS, 2010 [5] R Core Team R : A Language and Environment for Statistical Computing R Foundation for Statistical Computing URL http://www.R-project.org/ [6] T Pham and G Mazo Un package pour utiliser les cumulative distribution networks Deuxi`emes rencontres R, 2013 URL http://r2013-lyon.sciencesconf org [7] J.C Huang Cumulative distribution networks : Inference, estimation and applications of graphical models for cumulative distribution functions PhD thesis, University of Toronto, 2009 [8] K Keith Mathematical statistics Chapman & Hall/CRC Press, 2000 [9] J.A Nocedal and S.J Wright Numerical Optimization Springer, 1999 [10] I Zezula On multivariate Gaussian copulas Journal Statistical Planning Inference, 139(11) :3942–3946, 2009 [11] E Liebscher Construction of asymmetric multivariate copulas Journal of Multivariate Analysis, 99(10) :2234–2250, 2008 [12] F Leisch Creating r packages : A tutorial In Compstat 2008 - Proceedings in Computational Statistics 2008 41 Bibliography 42 [13] D Eddelbuettel and R Francois Rcpp : Seamless r and c++ integration Journal of Statistical Software, 40(8) :1–18, 2011 [14] R Diestel Graph Theory, 4th Edition Springer, 2012 [15] C E.J Hedetniemi, S.M and S.T Hedetniemi Linear algorithms for finding the jordan center and path center of a tree Transportation Science, 15 :98–114, 1981 [16] G.R Lindfield and J.E.T Penny Microcomputers in numerical analysis E Horwood, 1989 [17] C Genest and A.C Favre Everything you always wanted to know about copula modeling but were afraid to ask Journal of Hydrologic Engineering, 2007 [18] S Demarta and A.J McNeil The t copula and related copulas International Statistical Review, 73 :111–129, 2005 Annexe A mpAlgo A.1 Initialisation de l’algorithme de message-passing // I n i t i a l i z a t i o n o f algorithm v o i d CDN : : a l g o I n i t ( v e c t o r i s L e a f v ) { / / I n i t i a l i s a t i o n f o r mu and lamda f u n c t i o n s v f mu r e s i z e ( binMat s i z e ( ) ) ; g r a v f mu r e s i z e ( binMat s i z e ( ) ) ; v e c t o r tmp ( binMat [ ] s i z e ( ) ) ; v e c t o r < v e c t o r > tmp1 ( binMat [ ] s i z e ( ) ) ; v e c t o r tmp2 ( t h e t a s i z e ( ) ) ; f o r ( u n s i g n e d i = ; i < binMat s i z e ( ) ; i ++) { 10 v f mu [ i ] = tmp ; 11 f o r ( u n s i g n e d j = ; j < binMat [ i ] s i z e ( ) ; j ++) { 12 13 tmp1 [ j ] = tmp2 ; } 14 g r a v f mu [ i ] = tmp1 ; 15 } 16 vf la = v f mu ; 17 f v mu = v f mu ; 18 fv la = v f mu ; 19 gra vf l a = g r a v f mu ; 20 g r a f v mu = g r a v f mu ; 21 gra fv l a = g r a v f mu ; 22 v e c t o r () swap ( tmp ) ; / / Free memory 23 v e c t o r < v e c t o r >() swap ( tmp1 ) ; / / Free memory 24 v e c t o r () swap ( tmp2 ) ; / / Free memory 25 f o r ( u n s i g n e d i = ; i < binMat s i z e ( ) ; i ++) 26 27 28 f o r ( u n s i g n e d j = ; j < binMat [ i ] s i z e ( ) ; j ++) i f ( ( i s L e a f v [ i ] )&&( binMat [ i ] [ j ] == ) ) v f mu [ i ] [ j ] = ; 29 } 43 Appendix A mpAlgo A.2 44 Propagation des messages b o o l i s S t o p = f a l s e ; / / For s t o p p i n g a l g o r i t h m while ( ! isStop ) { / / Messages from f u n c t i o n s t o v a r i a b l e s f o r ( i n t u n s i g n e d i = ; i < nFunc ; i ++) { v e c t o r neiVar ; / / Neighbor v a r i a b l e s o f f u n c t i o n f o r ( i n t u n s i g n e d j = ; j < nVar ; j ++) i f ( binMat [ j ] [ i ] == ) neiVar push back ( j ) ; 10 11 / / Update mu and lamda f u n c t i o n s from f u n c t i o n t o v a r i a b l e f v mu [ neiVar [ ] ] [ i ] = dxPhi ( v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , a [ i ] , d x f , g , dxg , type ) ∗ v f mu [ neiVar [ ] ] [ i ] + Phi ( v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , a [ i ] , f , g , dxg , type ) ∗ v f l a [ neiVa r [0]][ i ]; 12 13 f v mu [ neiVar [ ] ] [ i ] = dxPhi ( v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , a [ i ] , d x f , g , dxg , type ) ∗ v f mu [ neiVar [ ] ] [ i ] + Phi ( v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , a [ i ] , f , g , dxg , type ) ∗ v f l a [ neiVar [ ] ] [ i ] ; 14 15 f v l a [ neiVar [ ] ] [ i ] = dxdyPhi ( v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , a [ i ] , dxdyf , g , dxg , type ) ∗ v f mu [ neiVar [ ] ] [ i ] + dxPhi ( v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , a [ i ] , d x f , g , dxg , type ) ∗ v f l a [ neiVar [ ] ] [ i ] ; 16 17 f v l a [ neiVar [ ] ] [ i ] = dxdyPhi ( v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , a [ i ] , dxdyf , g , dxg , type ) ∗ v f mu [ neiVar [ ] ] [ i ] + dxPhi ( v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , a [ i ] , d x f , g , dxg , type ) ∗ v f l a [ neiVar [ ] ] [ i ] ; 18 19 i f ( out > ) { / / g r a d i e n t o r both 20 v e c t o r g r P h i ( nPara ) , grDxPhi1 ( nPara ) ; 21 v e c t o r grDxPhi2 ( nPara ) , grDxDyPhi ( nPara ) ; 22 f o r ( u n s i g n e d i n t i i = ; i i < nbTheta ; 23 i i ++){ g r P h i = addNumberVector ( g r a P h i ( v e c t [ neiVar [ ] ] , nbNeighbor [ neiV a r [ ] ] , v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , a [ i ] , g r a f , g , dxg , type ) [ i i ] , i ∗ nbTheta + i i , g r P h i ) ; 24 25 grDxPhi1 = addNumberVector ( graDxPhi ( v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , a [ i ] , g r a d x f , g , dxg , type ) [ i i ] , i ∗ nbTheta + i i , grDxPhi1 ) ; 26 Appendix A mpAlgo 27 45 grDxPhi2 = addNumberVector ( graDxPhi ( v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , a [ i ] , g r a d x f , g , dxg , type ) [ i i ] , i ∗ nbTheta + i i , grDxPhi2 ) ; 28 29 grDxDyPhi = addNumberVector ( graDxDyPhi ( v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , a [ i ] , g r a d x d y f , g , dxg , type ) [ i i ] , i ∗ nbTheta + i i , grDxDyPhi ) ; 30 } 31 / / Update g r a d i e n t 32 g r a f v mu [ neiVar [ ] ] [ i ] = add ( add ( add ( ( m u l t i p l e ( grDxPhi1 , v f mu [ neiVar [ ] ] [ i ] ) ) , ( m u l t i p l e ( g r a v f mu [ neiVar [ ] ] [ i ] , dxPhi ( v e c t [ neiVa r [ ] ] , nbNeighbor [ neiVar [ ] ] , v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , a [ i ] , d x f , g , dxg , type ) ) ) ) , ( m u l t i p l e ( grPhi , v f l a [ neiVar [ ] ] [ i ] ) ) ) , ( m u l t i p l e ( g r a v f l a [ neiVar [ ] ] [ i ] , Phi ( v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , v e c t [ neiV ar [ ] ] , nbNeighbor [ neiVar [ ] ] , a [ i ] , f , g , dxg , type ) ) ) ) ; 33 34 g r a f v mu [ neiVar [ ] ] [ i ] = add ( add ( add ( ( m u l t i p l e ( grDxPhi2 , v f mu [ neiVar [ ] ] [ i ] ) ) , ( m u l t i p l e ( g r a v f mu [ neiVar [ ] ] [ i ] , dxPhi ( v e c t [ neiVa r [ ] ] , nbNeighbor [ neiV ar [ ] ] , v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , a [ i ] , d x f , g , dxg , type ) ) ) ) , ( m u l t i p l e ( grPhi , v f l a [ neiVar [ ] ] [ i ] ) ) ) , ( m u l t i p l e ( g r a v f l a [ neiVar [ ] ] [ i ] , Phi ( v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , v e c t [ neiV ar [ ] ] , nbNeighbor [ neiVar [ ] ] , a [ i ] , f , g , dxg , type ) ) ) ) ; 35 36 g r a f v l a [ neiVar [ ] ] [ i ] = add ( add ( add ( ( m u l t i p l e ( grDxDyPhi , v f mu [ neiVar [ ] ] [ i ] ) ) , ( m u l t i p l e ( g r a v f mu [ neiVar [ ] ] [ i ] , dxdyPhi ( v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , a [ i ] , dxdyf , g , dxg , type ) ) ) ) , ( m u l t i p l e ( grDxPhi2 , v f l a [ neiVar [ ] ] [ i ] ) ) ) , ( m u l t i p l e ( g r a v f l a [ neiVar [ ] ] [ i ] , dxPhi ( v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , a [ i ] , d x f , g , dxg , type ) ) ) ) ; 37 38 g r a f v l a [ neiVar [ ] ] [ i ] = add ( add ( add ( ( m u l t i p l e ( grDxDyPhi , v f mu [ neiVar [ ] ] [ i ] ) ) , ( m u l t i p l e ( g r a v f mu [ neiVar [ ] ] [ i ] , dxdyPhi ( v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , a [ i ] , dxdyf , g , dxg , type ) ) ) ) , ( m u l t i p l e ( grDxPhi1 , v f l a [ neiVar [ ] ] [ i ] ) ) ) , ( m u l t i p l e ( g r a v f l a [ neiVar [ ] ] [ i ] , dxPhi ( v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , v e c t [ neiVar [ ] ] , nbNeighbor [ neiVar [ ] ] , a [ i ] , d x f , g , dxg , type ) ) ) ) ; 39 v e c t o r () swap ( g r P h i ) ; / / Free memory 40 v e c t o r () swap ( grDxPhi1 ) ; / / Free memory 41 v e c t o r () swap ( grDxPhi2 ) ; / / Free memory 42 v e c t o r () swap ( grDxDyPhi ) ; / / Free memory } 43 44 45 46 v e c t o r () swap ( neiVar ) ; / / Free memory } Appendix A mpAlgo 46 47 / / Messages from v a r i a b l e s t o f u n c t i o n s 48 f o r ( i n t u n s i g n e d i = ; i < nVar ; i ++) 49 i f ( ! isLeaf v [ i ]) { 50 v e c t o r neiFunc ; / / Neighbor f u n c t i o n s o f v a r i a b l e 51 f o r ( i n t u n s i g n e d j = ; j < nFunc ; j ++) 52 i f ( binMat [ i ] [ j ] == ) 53 neiFunc push back ( j ) ; f o r ( u n s i g n e d j = ; j < neiFunc s i z e ( ) ; j ++) { 54 55 d o u b l e prod = ; 56 d o u b l e sum = ; 57 v e c t o r g r a sum ( nPara ) , g r a sum2 ( nPara ) ; 58 f o r ( u n s i g n e d k = ; k < neiFunc s i z e ( ) ; k++) 59 i f ( ( k != j )&&( f v mu [ i ] [ neiFunc [ k ] ] !=0 ) ) { 60 prod ∗= f v mu [ i ] [ neiFunc [ k ] ] ; 61 sum += f v l a [ i ] [ neiFunc [ k ] ] / f v mu [ i ] [ neiFunc [ k ] ] ; 62 i f ( out 63 > 0) { g r a sum = add ( m u l t i p l e ( g r a f v mu [ i ] [ neiFunc [ k ] ] , / f v mu [ i ] [ neiFunc [ k ] ] ) , g r a sum ) ; 64 65 g r a sum2 = add ( m u l t i p l e ( add ( m u l t i p l e ( g r a f v l a [ i ] [ neiFunc [ k ] ] , f v mu [ i ] [ neiFunc [ k ] ] ) , m u l t i p l e ( g r a f v mu [ i ] [ neiFunc [ k ] ] , − f v l a [ i ] [ neiFunc [ k ] ] ) ) , pow ( f v mu [ i ] [ neiFunc [ k ] ] , − ) ) , g r a sum2 ) ; } 66 } 67 68 69 / / Update lamda and mu f u n c t i o n s from v a r i a b l e t o f u n c t i o n 70 v f mu [ i ] [ neiFunc [ j ] ] = prod ; 71 v f l a [ i ] [ neiFunc [ j ] ] = prod ∗ sum ; 72 i f ( out 73 > ) { / / g r a d i e n t and both g r a v f mu [ i ] [ neiFunc [ j ] ] = m u l t i p l e ( g r a sum , prod ) ; 74 75 g r a v f l a [ i ] [ neiFunc [ j ] ] = add ( m u l t i p l e ( g r a v f mu [ i ] [ neiFunc [ j ] ] , sum ) , m u l t i p l e ( g r a sum2 , prod ) ) ; 76 v e c t o r () swap ( g r a sum ) ; / / Free memory 77 v e c t o r () swap ( g r a sum2 ) ; / / f r e e memory } 78 } 79 80 81 v e c t o r () swap ( neiFunc ) ; / / Free memory } 82 −−; 83 nIteration 84 i f ( nIteration 85 86 } isStop = true ; < 1) Appendix A mpAlgo A.3 47 Calcul de la densit´ e et du gradient // I n i t i a l i s a t i o n values f o r r e s u l t s double u = ; double z = ; v e c t o r g r a u ( nPara ) , g r a z ( nPara ) , g r a p ( nPara ) ; / / C a l c u l a t e P and g r a d i e n t o f P f o r ( u n s i g n e d i = ; i < n e i R o o t s i z e ( ) ; i ++) { i f ( f v mu [ r o o t ] [ n e i R o o t [ i ] ] !=0 ) { u ∗= f v mu [ r o o t ] [ n e i R o o t [ i ] ] ; 10 z += f v l a [ r o o t ] [ n e i R o o t [ i ] ] / f v mu [ r o o t ] [ n e i R o o t [ i ] ] ; 11 i f ( out 12 > 0) { g r a u = add ( m u l t i p l e ( g r a f v mu [ r o o t ] [ n e i R o o t [ i ] ] , / f v mu [ r o o t ] [ neiRoot [ i ] ] ) , gra u) ; 13 14 g r a z = add ( m u l t i p l e ( add ( m u l t i p l e ( g r a f v l a [ r o o t ] [ n e i R o o t [ i ] ] , f v mu [ r o o t ] [ n e i R o o t [ i ] ] ) , m u l t i p l e ( g r a f v mu [ r o o t ] [ n e i R o o t [ i ] ] , −f v l a [ r o o t ] [ n e i R o o t [ i ] ] ) ) , pow ( f v mu [ r o o t ] [ n e i R o o t [ i ] ] , − ) ) , gra z ) ; } 15 16 } 17 } 18 v e c t o r < v e c t o r < v e c t o r > >() swap ( g r a f v mu ) ; / / Free memory 19 v e c t o r < v e c t o r < v e c t o r > >() swap ( g r a f v l a ) ; / / Free memory 20 v e c t o r < v e c t o r < v e c t o r > >() swap ( g r a v f mu ) ; / / Free memory 21 v e c t o r < v e c t o r < v e c t o r > >() swap ( g r a v f l a ) ; / / f r e e memory 22 v e c t o r < v e c t o r >() swap ( f v mu ) ; / / Free memory 23 v e c t o r < v e c t o r >() swap ( f v l a ) ; / / Free memory 24 v e c t o r < v e c t o r >() swap ( v f mu ) ; / / Free memory 25 v e c t o r < v e c t o r >() swap ( v f l a ) ; / / Free memory 26 v e c t o r () swap ( n e i R o o t ) ; / / Free memory 27 d o u b l e p = u ∗ z ; / / Compute d e n s i t y 28 r e t [ ] = p ; 29 i f ( out > 0) { 30 gra u = multiple ( gra u , u) ; 31 g r a p = add ( m u l t i p l e ( g r a z , u ) , m u l t i p l e ( g r a u , z ) ) ; / / Compute g r a d i e n t 32 f o r ( i n t i = ; i < r e t s i z e ( ) ; i ++) 33 r e t [ i ] = gra p [ i −1]; 34 v e c t o r () swap ( g r a u ) ; / / Free memory 35 v e c t o r () swap ( g r a z ) ; / / Free memory 36 v e c t o r () swap ( g r a p ) ; / / Free memory 37 v e c t o r () swap ( i s L e a f v ) ; / / Free memory 38 } Annexe B cdnOptim B.1 Calcul de la fonction de vraisemblance et son gradient s t a t i c d o u b l e ∗ fmin ( i n t n , d o u b l e ∗p ) { CDN cdn ; NumericVector g r a d i e n t ( dimPara ) ; double de ns it y = ; NumericVector t h e t a ( n ) ; f o r ( i n t i = ; i < n ; i ++) theta [ i ] = p [ i ] ; f o r ( i n t i = ; i < nbObs ; i ++){ NumericVector tmpX( dimData ) ; 10 f o r ( i n t j = ; j < dimData ; j ++){ 11 tmpX [ j ] = ddata [ i ∗ dimData + j ] ; 12 } 13 cdn p a r a m e t e r s I n i t ( binMat , t h e t a , tmpX , r o o t , f , n I t e r a t i o n , dxf , 14 dxdyf , g r a f , g r a d x f , gradxdyf , t y p e f , g , dxg , o ) ; / / Parameters t r a n s m i s s i o n 15 NumericVector r e s u l t a t ; 16 r e s u l t a t = cdn a l g o ( ) ; 17 f o r ( i n t j = ; j < dimPara ; j ++) g r a d i e n t [ j ] += − r e s u l t a t [ j + ] / r e s u l t a t [ ] ; 18 d e n s i t y += − l o g ( r e s u l t a t [ ] ) ; 19 20 } 21 d o u b l e ∗ r e t = new d o u b l e [ n + ] ; 22 ret [ ] = density ; 23 f o r ( i n t i = ; i < n + ; i ++) { ret [ i ] = gradient [ i − ] ; 24 25 } 26 return ret ; 27 } 48 Appendix B cdnOptim B.2 49 M´ ethode de Broyden-Fletcher-Goldfarb-Shanno bfgs RcppExport SEXP b f g s (SEXP par , SEXP m binMat , SEXP m x , SEXP m r o o t , SEXP m f , SEXP m n I t e r a t i o n , SEXP m dxf , SEXP m dxdyf , SEXP m g r a f , SEXP m g r a d x f , SEXP m gradxdyf , SEXP m type , SEXP m g , SEXP m dxg , SEXP out ) { s e t P a r a m e t e r s (m binMat , m x , m r o o t , m f , m n I t e r a t i o n , m dxf , m dxdyf , m g r a f , m g r a d x f , m gradxdyf , m type , m g , m dxg , out , par ) ; i n t npar = LENGTH( par ) ; / / l e n g t h o f v a r i a b l e d o u b l e ∗ x = REAL( par ) ; / / s t a r t i n g p o i n t d o u b l e Fmin = ; / / Value minimum o f f u n c t i o n int trace = 0; i n t maxit = 0 ; 10 int f a i l = 0; 11 int fncount = 0; 12 i n t grcount = ; 13 i n t nREPORT = ; 14 i n t ∗mask ; 15 mask = ( i n t ∗ ) R a l l o c ( npar , s i z e o f ( i n t ) ) ; 16 f o r ( i n t i i = ; i i < npar ; 17 d o u b l e a b s t o l = ( d o u b l e ) −1.0 / ; i i ++) mask [ i i ] = ; 18 d o u b l e r e l t o l = 1 e −08; 19 vmmin m o d i f i e d ( npar , x , &Fmin , fmin , maxit , t r a c e , mask , a b s t o l , r e l t o l , 20 NumericVector r e t ( npar ) ; 21 f o r ( i n t i = ; i < npar ; i ++) nREPORT, &f n c o u n t , &grcount , & f a i l ) ; 22 23 24 } ret [ i ] = x [ i ] ; return ret ; Appendix B cdnOptim B.3 50 Limited-memory BFGS with bounds lbfgsb RcppExport SEXP l b f g s b (SEXP par , SEXP lower , SEXP upper , SEXP m binMat , SEXP m x , SEXP m r o o t , SEXP m f , SEXP m n I t e r a t i o n , SEXP m dxf , SEXP m dxdyf , SEXP m g r a f , SEXP m g r a d x f , SEXP m gradxdyf , SEXP m type , SEXP m g , SEXP m dxg , SEXP out ) { s e t P a r a m e t e r s (m binMat , m x , m r o o t , m f , m n I t e r a t i o n , m dxf , m dxdyf , m i n t npar = LENGTH( par ) ; / / Length o f v a r i a b l e d o u b l e ∗ x = REAL( par ) ; / / S t a r t i n g p o i n t d o u b l e ∗ l = REAL( l o w e r ) ; / / Lower o f v a r i a b l e d o u b l e ∗ u = REAL( upper ) ; / / Upper o f v a r i a b l e d o u b l e Fmin = ; / / Value minimum o f f u n c t i o n i n t lmm = ; g r a f , m g r a d x f , m gradxdyf , m type , m g , m dxg , out , par ) ; 10 int trace = 0; 11 i n t maxit = 0 ; 12 double pgtol = ; 13 d o u b l e f a c t r = e +8; 14 i n t nREPORT = ; 15 i n t ∗ nbd = new i n t [ npar ] ; 16 f o r ( i n t i = ; i < npar ; i ++) 17 nbd [ i ] = ; 18 int f a i l = 0; 19 int fncount = 0; 20 i n t grcount = ; 21 c h a r msg [ ] ; 22 l b f g s b m o d i f i e d ( npar , lmm , x , l , u , nbd , &Fmin , fmin , &f a i l , f a c t r , p g t o l 23 NumericVector r e t ( npar ) ; 24 f o r ( i n t i = ; i < npar ; i ++) , &f n c o u n t , &grcount , maxit , msg , t r a c e , nREPORT) ; 25 26 27 } ret [ i ] = x [ i ] ; return ret ; Annexe C rCdn, pCdn et dCdn C.1 G´ en´ eration al´ eatoire des observations rCdn # # Random Number Generation for Cumulative Distribution Networks rCdn

Ngày đăng: 23/09/2020, 22:12

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN