Advertisement
Guest User

Untitled

a guest
Oct 19th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.42 KB | None | 0 0
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from matplotlib.colors import LogNorm
  4. from sklearn import mixture
  5. import math
  6.  
  7.  
  8. n_samples = 300
  9. dimension_de_x =2
  10. k=2
  11.  
  12. def Expectation (data, sigma, mu, phi, i, j):
  13.  
  14. #numerateur
  15. determinant = np.linalg.det(sigma[j])
  16. determinant = np.absolute(determinant)
  17. dataligne = [data[i,]]
  18. dataligne = np.matrix(np.array(dataligne))
  19. dataligne = dataligne - np.matrix(np.array([mu[j,]]))
  20. transpose = dataligne.transpose()
  21.  
  22. num = (1/((2*math.pi)*math.sqrt(determinant)))
  23. num = num*math.exp(-((dataligne)*np.linalg.inv(sigma[j])*transpose))*phi[0,j]
  24. #print("le numerateur est",num)
  25.  
  26.  
  27. #denominateur
  28. determinant = np.linalg.det(sigma[0])
  29. determinant = np.absolute(determinant)
  30. den1 = (1/((2*math.pi)*math.sqrt(determinant)))
  31. dataligne = [data[i,]]
  32. dataligne = np.matrix(np.array(dataligne))
  33. dataligne = dataligne - np.matrix(np.array([mu[0,]]))
  34. transpose = dataligne.transpose()
  35. den1 = den1*math.exp(-((dataligne)*np.linalg.inv(sigma[0])*transpose))*phi[0,0]
  36.  
  37. determinant = np.linalg.det(sigma[1])
  38. determinant = np.absolute(determinant)
  39. den2 = (1/((2*math.pi)*math.sqrt(determinant)))
  40. dataligne = [data[i,]]
  41. dataligne = np.matrix(np.array(dataligne))
  42. dataligne = dataligne - np.matrix(np.array([mu[1,]]))
  43. transpose = dataligne.transpose()
  44. den2 = den2*math.exp(-((dataligne)*np.linalg.inv(sigma[1])*transpose))*phi[0,1]
  45.  
  46. den=den1+den2
  47.  
  48. #print(den)
  49.  
  50. return num/den
  51.  
  52.  
  53.  
  54.  
  55. def Maximisation_phi (w, phi):
  56.  
  57. sommekluster1 = 0
  58. sommekluster2 = 0
  59.  
  60. for i in range (600):
  61.  
  62. #print("la valeur en i ",i,"et j 1 est ",w[i,0])
  63. sommekluster1 = sommekluster1 + w[i,0]
  64.  
  65. #print("la valeur en i ",i,"et j 2 est ",w[i,1])
  66. sommekluster2 = sommekluster2 + w[i,1]
  67.  
  68. #print("Cluster 1 ",sommekluster1/600," Cluster 2 ",sommekluster2/600)
  69.  
  70. phi[0,0]=sommekluster1/600
  71. phi[0,1]=sommekluster2/600
  72.  
  73. return phi
  74.  
  75.  
  76.  
  77. def Maximisation_mu (w,data,mu):
  78.  
  79. sommekluster1 = 0
  80. sommekluster2 = 0
  81.  
  82. sommeproba1 = 0
  83. sommeproba2 = 0
  84.  
  85. for i in range (600):
  86.  
  87. #print(dataligne)
  88. sommekluster1=sommekluster1+w[i,0]*data[i]
  89. sommekluster2=sommekluster2+w[i,1]*data[i]
  90.  
  91. sommeproba1=sommeproba1+w[i,0]
  92. sommeproba2=sommeproba2+w[i,1]
  93.  
  94. mu[0]=sommekluster1/sommeproba1
  95. mu[1]=sommekluster2/sommeproba2
  96.  
  97. print("Somme des valeur en cluster 1", sommekluster1)
  98. print("Somme des valeur en cluster 2", sommekluster2)
  99. print("Somme en valeur cluster 1", sommeproba1)
  100. print("Somme en valeur cluster 2", sommeproba2)
  101.  
  102. return mu
  103.  
  104.  
  105.  
  106. def Maximisation_sigma (w,data,mu,sigma):
  107.  
  108. sommekluster1 = 0
  109. sommekluster2 = 0
  110. temp1 = 0
  111. temp2 = 0
  112.  
  113. sommeproba1 = 0
  114. sommeproba2 = 0
  115.  
  116. for i in range (600):
  117.  
  118. dataligne = [data[i,]]
  119. dataligne = np.matrix(np.array(dataligne))
  120. dataligne = dataligne - np.matrix(np.array([mu[j,]]))
  121.  
  122. transpose = dataligne.transpose()
  123.  
  124. #print("prob ", w[i,0])
  125. #print("ecart au centroid", dataligne)
  126. #print("transpose", transpose)
  127.  
  128. temp1=w[i,0]*transpose*dataligne
  129.  
  130. sommekluster1=sommekluster1+temp1
  131. sommeproba1=sommeproba1+w[i,0]
  132.  
  133. sigma[0]=sommekluster1/sommeproba1
  134.  
  135.  
  136.  
  137. dataligne = [data[i,]]
  138. dataligne = np.matrix(np.array(dataligne))
  139. dataligne = dataligne - np.matrix(np.array([mu[j,]]))
  140.  
  141. transpose = dataligne.transpose()
  142.  
  143. #print("prob ", w[i,0])
  144. #print("ecart au centroid", dataligne)
  145. #print("transpose", transpose)
  146.  
  147. temp2=w[i,1]*transpose*dataligne
  148.  
  149. sommekluster2=sommekluster2+temp2
  150. sommeproba2=sommeproba2+w[i,1]
  151.  
  152. sigma[1]=sommekluster2/sommeproba2
  153.  
  154.  
  155. return sigma
  156.  
  157.  
  158.  
  159. # generate random sample, two components
  160. np.random.seed(1)
  161.  
  162. # generate spherical data centered on (20, 20)
  163. shifted_gaussian = np.random.randn(n_samples, dimension_de_x) + np.array([20, 20])
  164.  
  165. # generate zero centered stretched Gaussian data
  166. C = np.array([[0., -0.7], [3.5, .7]])
  167. stretched_gaussian = np.dot(np.random.randn(n_samples, dimension_de_x), C)
  168.  
  169. #probablities
  170. w = np.random.randn(600, 2)
  171.  
  172. # concatenate the two datasets into the final training set
  173. X_train = np.vstack([shifted_gaussian, stretched_gaussian])
  174.  
  175. sigma = np.array([np.random.rand(k,dimension_de_x), np.random.rand(k,dimension_de_x)])
  176. mu = np.array([np.random.rand(1,dimension_de_x), np.random.rand(1,dimension_de_x)])
  177. phi = np.matrix([[ 0.3333333, 0.6666667]])
  178.  
  179. for iteration in range(10):
  180. for i in range(600) :
  181. for j in range(2):
  182.  
  183. test=Expectation(X_train,sigma,mu,phi,i,j)
  184. w[i,j]=test
  185.  
  186.  
  187. print ("Before maximisation phi ", phi)
  188. phi=Maximisation_phi(w,phi)
  189. print("After maximisation phi ", phi)
  190.  
  191. print ("Before maximisation sigma ", sigma)
  192. sigma=Maximisation_sigma(w,X_train,mu,sigma)
  193. print ("After maximisation sigma ", sigma)
  194.  
  195. print ("Before maximisation mu ", mu)
  196. mu=Maximisation_mu(w,X_train,mu)
  197. print("After maximisation mu ", mu)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement