fork(1) download
  1. import os
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. import scipy.io as spio
  5. from scipy.stats import norm
  6. from scipy.stats import multivariate_normal
  7. import time
  8. import sys
  9.  
  10. flt_min = sys.float_info.min
  11.  
  12. %matplotlib notebook
  13.  
  14. mixGaussTrue = dict()
  15. mixGaussTrue['k'] = 3
  16. mixGaussTrue['d'] = 2
  17. mixGaussTrue['weight'] = np.array([0.1309, 0.3966, 0.4725])
  18. mixGaussTrue['mean'] = np.array([[ 4.0491 , 4.8597],[ 7.7578 , 1.6335],[ 11.9945, 8.9206]]).T
  19. mixGaussTrue['cov'] = np.reshape([0.5, 0.25], newshape=(1,1,2))
  20. mixGaussTrue['cov'] = np.zeros(shape=(mixGaussTrue['d'],mixGaussTrue['d'],mixGaussTrue['k']))
  21. mixGaussTrue['cov'][:,:,0] = np.array([[ 4.2534, 0.4791], [0.4791, 0.3522]])
  22. mixGaussTrue['cov'][:,:,1] = np.array([[ 0.9729, 0.8723],[ 0.8723, 2.6317]])
  23. mixGaussTrue['cov'][:,:,2] = np.array([[ 0.9886, -1.2244],[ -1.2244, 3.0187]])
  24.  
  25. def sampleFromDiscrete(probDist):
  26. """
  27. Draws a random sample from a discrete probability distribution using a rejection sampling method.
  28.  
  29. Keyword arguments:
  30. probDist -- discrete probability ditrubtion to sample from.
  31.  
  32. Returns:
  33. r -- sampled point.
  34. """
  35. nIndex = len(probDist)
  36. while True:
  37. #choose random index
  38. r=int(np.floor(np.random.uniform()*nIndex))
  39. #choose random height
  40. randHeight = np.random.uniform()
  41. #if height is less than probability value at this point in the
  42. # histogram then select
  43. if randHeight<probDist[r]:
  44. break
  45. return r def getGaussian2SD(m,s,angle1):
  46. """
  47. Find position of in xy co-ordinates at 2SD out for a certain angle.
  48. """
  49.  
  50. if s.shape[1] == 1:
  51. s = diag(s)
  52.  
  53. vec = np.array([np.cos(angle1), np.sin(angle1)])
  54.  
  55. factor = 4/(vec@np.linalg.inv(s)@vec.T)
  56.  
  57. x = np.cos(angle1) * np.sqrt(factor)
  58. y = np.sin(angle1) * np.sqrt(factor)
  59.  
  60. x = x + m[0]
  61. y = y + m[1]
  62.  
  63. return x,y
  64.  
  65. def drawGaussianOutline(m,s,w):
  66. """
  67. Draw 2DGaussian
  68. """
  69. angleInc = 0.1
  70. c = (0.9*(1-w), 0, 0)
  71.  
  72. for cAngle in np.arange(0,2*np.pi,angleInc):
  73. angle1 = cAngle
  74. angle2 = cAngle+angleInc
  75. x1, y1 = getGaussian2SD(m,s,angle1)
  76. x2, y2 = getGaussian2SD(m,s,angle2)
  77. plt.plot([x1, x2],[y1, y2],'-',linewidth=2,color=c)
  78. return
  79.  
  80. def drawEMData2d(data,mixGauss):
  81. """
  82. Plot the data plot the mixtures of Gaussian model, mixGauss, on top of it.
  83.  
  84. Keyword arguments:
  85. data -- d by n matrix of data points.
  86. mixGauss -- dict with mixture of gaussian information.
  87.  
  88. """
  89. #set(gcf,'Color',[1 1 1])
  90. plt.cla()
  91. plt.plot(data[0,:],data[1,:],'k.')
  92.  
  93. for cGauss in range(mixGauss['k']):
  94. drawGaussianOutline(mixGauss['mean'][:,cGauss],mixGauss['cov'][:,:,cGauss],mixGauss['weight'][cGauss])
  95.  
  96. return
  97.  
  98. def mixGaussGen(mixGauss, nData):
  99. """
  100. Generates data from a d-dimensional mixture of Gaussians model.
  101.  
  102. Keyword arguments:
  103. mixGauss -- dict containing the mixture of gaussians arguments.
  104. nData -- number of data points to generate.
  105.  
  106. Returns:
  107. data -- d by nData, generated data points.
  108.  
  109. """
  110. # create space for output data
  111. data = np.zeros(shape=(mixGauss['d'], nData))
  112. # for each data point
  113. for cData in range(nData):
  114. # randomly choose Gaussian according to probability distributions
  115. h = sampleFromDiscrete(mixGauss['weight'])
  116. # draw a sample from the appropriate Gaussian distribution
  117. # first sample from the covariance matrix (google how to do this - it
  118. # will involve the numpy function np.linalg.cholesky(). Then add the mean vector
  119. # TO DO (f)- insert data generation code here
  120. placeholder = -1 # remove this palceholder when you do.
  121. #rr=
  122. #data[:,cData] = np.transpose(mixGauss['mean'][0][h])+np.random.normal(1,mixGauss['d'])* np.transpose(np.linalg.cholesky(mixGauss['cov'][:,:,h]))
  123. data[:,cData]=np.random.multivariate_normal(mixGauss['mean'][:,h], mixGauss['cov'][:,:,h])
  124. return data
  125.  
  126.  
  127. #define number of samples to generate
  128. nData = 400;
  129.  
  130. #generate data from the mixture of Gaussians
  131. #make sure you've filled in the routine above.
  132. data = mixGaussGen(mixGaussTrue,nData)
  133.  
  134. #draw data, true Gaussians
  135. drawEMData2d(data,mixGaussTrue)
  136.  
  137. def getMixGaussLogLike(data, mixGaussEst):
  138. """
  139. Calculate the log likelihood for the whole dataset under a mixture of Gaussians model.
  140.  
  141. Keyword arguments:
  142. data -- d by n matrix containing data points.
  143. mixGaussEst -- dict containing the mixture of gaussians parameters.
  144.  
  145. Returns:
  146. logLike -- scalar containing the log likelihood.
  147.  
  148. """
  149.  
  150. data = np.atleast_2d(data)
  151. # find total number of data items
  152. nDims, nData = data.shape
  153.  
  154. # initialize log likelihoods
  155. logLike = 0;
  156.  
  157. # run through each data item
  158. for cData in range(nData):
  159. thisData = data[:, cData]
  160. # TO DO - calculate likelihood of this data point under mixture of
  161. # Gaussians model. Replace this
  162. like = 0
  163.  
  164. for m in range(mixGaussEst['k']):
  165. #like = like + mixGaussEst['weight'][m]+1/((2*np.pi)^(nDims)*numpy.linalg.det(mixGaussEst['cov'][:,:,h]))^(1/2)* exp(-0.5*(np.transpose(thisData-mixGaussEst['mean'][:,h])))*np.linalg.inv(mixGaussEst['cov'][:,:,m])*(thisData-mixGaussEst['mean'][:,h])
  166. #mu = mixGaussEst['mean'][:,m]
  167. #var = mixGaussEst['cov'][:,:,m]
  168. #norm = 1/((2*np.pi)**(nDims)*np.linalg.det(mixGaussEst['cov'][:,:,m]))**(1/2)*np.exp(-0.5*(np.transpose(thisData-mixGaussEst['mean'][:,m])))*np.linalg.inv(mixGaussEst['cov'][:,:,m])*(thisData-mixGaussEst['mean'][:,m])
  169. #lambdaK = mixGaussEst['weight'][m]
  170. #like = like + lambdaK*norm
  171. #print(1/((2*np.pi)**(nDims)*np.linalg.det(mixGaussEst['cov'][:,:,m]))**(1/2))
  172. #print(np.exp(-0.5*(np.transpose(thisData-mixGaussEst['mean'][:,m])))*np.linalg.inv(mixGaussEst['cov'][:,:,m])*(thisData-mixGaussEst['mean'][:,m]))
  173. like = like+(1/((2*np.pi)**(nDims)*np.linalg.det(mixGaussEst['cov'][:,:,m]))**(1/2))*np.exp(-0.5*(np.transpose(thisData-mixGaussEst['mean'][:,m])))@np.linalg.inv(mixGaussEst['cov'][:,:,m])@(thisData-mixGaussEst['mean'][:,m])
  174. #print(np.exp(-0.5*(np.transpose(thisData-mixGaussEst['mean'][:,m]))))
  175. #print(like)
  176.  
  177. #print(like)
  178. # add to total log like
  179. logLike = logLike + np.log(like)
  180. #print(logLike)
  181. #loglike= np.vectorize(loglike)
  182. #return np.asscalar((logLike))
  183. return np.asscalar(np.array(logLike))
  184.  
  185.  
  186.  
  187.  
  188.  
  189. def fitMixGauss(data, k):
  190. """
  191. Estimate a k MoG model that would fit the data. Incremently plots the outcome.
  192.  
  193.  
  194. Keyword arguments:
  195. data -- d by n matrix containing data points.
  196. k -- scalar representing the number of gaussians to use in the MoG model.
  197.  
  198. Returns:
  199. mixGaussEst -- dict containing the estimated MoG parameters.
  200.  
  201. """
  202.  
  203. # MAIN E-M ROUTINE
  204. # In the E-M algorithm, we calculate a complete posterior distribution over
  205. # the (nData) hidden variables in the E-Step.
  206. # In the M-Step, we update the parameters of the Gaussians (mean, cov, w).
  207.  
  208. nDims, nData = data.shape
  209.  
  210.  
  211. postHidden = np.zeros(shape=(k, nData))
  212.  
  213. # we will initialize the values to random values
  214. mixGaussEst = dict()
  215. mixGaussEst['d'] = nDims
  216. mixGaussEst['k'] = k
  217. mixGaussEst['weight'] = (1 / k) * np.ones(shape=(k))
  218. mixGaussEst['mean'] = 2 * np.random.randn(nDims, k)
  219. mixGaussEst['cov'] = np.zeros(shape=(nDims, nDims, k))
  220. for cGauss in range(k):
  221. mixGaussEst['cov'][:, :, cGauss] = 2.5 + 1.5 * np.random.uniform() * np.eye(nDims)
  222.  
  223.  
  224. # calculate current likelihood
  225. # TO DO - fill in this routine
  226. logLike = getMixGaussLogLike(data, mixGaussEst)
  227. print('Log Likelihood Iter 0 : {:4.3f}\n'.format(logLike))
  228.  
  229. nIter = 30;
  230.  
  231. logLikeVec = np.zeros(shape=(2 * nIter))
  232. boundVec = np.zeros(shape=(2 * nIter))
  233.  
  234. fig, ax = plt.subplots(1, 1)
  235.  
  236. for cIter in range(nIter):
  237.  
  238. # ===================== =====================
  239. # Expectation step
  240. # ===================== =====================
  241. curCov = mixGaussEst['cov']
  242. curWeight = mixGaussEst['weight']
  243. curMean = mixGaussEst['mean']
  244. num= np.zeros(shape=(k,nData))
  245. for cData in range(nData):
  246. # TO DO (g) : fill in column of 'hidden' - calculate posterior probability that
  247. # this data point came from each of the Gaussians
  248. # replace this:
  249.  
  250.  
  251. thisData = data[:,cData]
  252. #for c in range(k):
  253. # num[c] = mixGaussEst['weight'][c] * (1/((2*np.pi)**(nDims)*np.linalg.det(mixGaussEst['cov'][:,:,c]))**(1/2))*np.exp(-0.5*(np.transpose(thisData-mixGaussEst['mean'][:,c])))@np.linalg.inv(mixGaussEst['cov'][:,:,c])@(thisData-mixGaussEst['mean'][:,c])
  254.  
  255.  
  256. thisdata = data[:,cData];
  257. denominatorExp = 0
  258. for j in range(k):
  259. mu = curMean[:,j]
  260. sigma = curCov[:,:,j]
  261. curNorm = (1/((2*np.pi)**(nDims)*np.linalg.det(sigma))**(1/2))*np.exp(-0.5*(np.transpose(thisData-mu)))@np.linalg.inv(sigma)@(mu)
  262. num[j,cData] = curWeight[j]*curNorm
  263. denominatorExp = denominatorExp + num[j,cData]
  264.  
  265. postHidden[:, cData] = num[:,cData]/denominatorExp
  266.  
  267.  
  268. # ===================== =====================
  269. # Maximization Step
  270. # ===================== =====================
  271. # for each constituent Gaussian
  272. for cGauss in range(k):
  273. # TO DO (h): Update weighting parameters mixGauss.weight based on the total
  274. # posterior probability associated with each Gaussian. Replace this:
  275. #mixGaussEst['weight'][cGauss] = mixGaussEst['weight'][cGauss]
  276. sum_Kth_Gauss_Resp = np.sum(postHidden[cGauss,:])
  277.  
  278. mixGaussEst['weight'][cGauss] = sum_Kth_Gauss_Resp /np.sum(postHidden)
  279.  
  280.  
  281.  
  282.  
  283. #mixGaussEst['weight'][cGauss] = np.sum(postHidden[cGauss,:])/sum(sum(postHidden[:,:]));
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290. # TO DO (i): Update mean parameters mixGauss.mean by weighted average
  291. # where weights are given by posterior probability associated with
  292. # Gaussian. Replace this:
  293. #mixGaussEst['mean'][:,cGauss] = mixGaussEst['mean'][:,cGauss]
  294. numerator = 0
  295. for j in range(nData):
  296. numerator = numerator + postHidden[cGauss,j]*data[:,j]
  297. numerator = np.dot( postHidden[cGauss,:],data[0,:])
  298. mixGaussEst['mean'][:,cGauss] = numerator / sum_Kth_Gauss_Resp
  299.  
  300.  
  301. # TO DO (j): Update covarance parameter based on weighted average of
  302. # square distance from update mean, where weights are given by
  303. # posterior probability associated with Gaussian
  304. #mixGaussEst['cov'][:,:,cGauss] = mixGaussEst['cov'][:,:,cGauss]
  305. muMatrix = mixGaussEst['mean'][:,cGauss]
  306. numerator = 0
  307. for j in range(nData):
  308. numerator_i = postHidden[cGauss,j]*(data[:,j]-muMatrix)@np.transpose(data[:,j]-muMatrix)
  309. numerator = numerator + numerator_i
  310.  
  311. mixGaussEst['cov'][:,:,cGauss] = numerator /sum_Kth_Gauss_Resp
  312.  
  313. # draw the new solution
  314.  
  315. drawEMData2d(data, mixGaussEst)
  316. time.sleep(0.7)
  317. fig.canvas.draw()
  318.  
  319. # calculate the log likelihood
  320. logLike = getMixGaussLogLike(data, mixGaussEst)
  321. print('Log Likelihood After Iter {} : {:4.3f}\n'.format(cIter, logLike))
  322.  
  323.  
  324. return mixGaussEst
  325.  
  326.  
  327.  
  328. #define number of components to estimate
  329. nGaussEst = 3
  330.  
  331. #fit mixture of Gaussians (Pretend someone handed you some data. Now what?)
  332. #TO DO fill in this routine (below)
  333.  
  334.  
  335. mixGaussEst = fitMixGauss(data,nGaussEst);
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Main.java:1: error: '.' expected
import os 
         ^
Main.java:2: error: ';' expected
import numpy as np
      ^
Main.java:2: error: class, interface, or enum expected
import numpy as np
             ^
Main.java:3: error: ';' expected
import matplotlib.pyplot as plt
                        ^
Main.java:4: error: ';' expected
import scipy.io as spio
               ^
Main.java:5: error: '.' expected
from scipy.stats import norm 
                            ^
Main.java:6: error: ';' expected
from scipy.stats import multivariate_normal
    ^
Main.java:6: error: '.' expected
from scipy.stats import multivariate_normal
                                           ^
Main.java:7: error: ';' expected
import time
      ^
Main.java:8: error: '.' expected
import sys
          ^
Main.java:10: error: ';' expected
flt_min = sys.float_info.min
       ^
Main.java:17: error: unclosed character literal
mixGaussTrue['weight'] = np.array([0.1309, 0.3966, 0.4725])
             ^
Main.java:17: error: unclosed character literal
mixGaussTrue['weight'] = np.array([0.1309, 0.3966, 0.4725])
                    ^
Main.java:18: error: unclosed character literal
mixGaussTrue['mean'] = np.array([[ 4.0491 , 4.8597],[ 7.7578 , 1.6335],[ 11.9945, 8.9206]]).T
             ^
Main.java:18: error: unclosed character literal
mixGaussTrue['mean'] = np.array([[ 4.0491 , 4.8597],[ 7.7578 , 1.6335],[ 11.9945, 8.9206]]).T
                  ^
Main.java:19: error: unclosed character literal
mixGaussTrue['cov'] = np.reshape([0.5, 0.25], newshape=(1,1,2))
             ^
Main.java:19: error: unclosed character literal
mixGaussTrue['cov'] = np.reshape([0.5, 0.25], newshape=(1,1,2))
                 ^
Main.java:20: error: unclosed character literal
mixGaussTrue['cov'] = np.zeros(shape=(mixGaussTrue['d'],mixGaussTrue['d'],mixGaussTrue['k']))
             ^
Main.java:20: error: unclosed character literal
mixGaussTrue['cov'] = np.zeros(shape=(mixGaussTrue['d'],mixGaussTrue['d'],mixGaussTrue['k']))
                 ^
Main.java:21: error: unclosed character literal
mixGaussTrue['cov'][:,:,0] = np.array([[  4.2534, 0.4791], [0.4791, 0.3522]])
             ^
Main.java:21: error: unclosed character literal
mixGaussTrue['cov'][:,:,0] = np.array([[  4.2534, 0.4791], [0.4791, 0.3522]])
                 ^
Main.java:22: error: unclosed character literal
mixGaussTrue['cov'][:,:,1] = np.array([[  0.9729, 0.8723],[  0.8723,  2.6317]])
             ^
Main.java:22: error: unclosed character literal
mixGaussTrue['cov'][:,:,1] = np.array([[  0.9729, 0.8723],[  0.8723,  2.6317]])
                 ^
Main.java:23: error: unclosed character literal
mixGaussTrue['cov'][:,:,2] = np.array([[  0.9886, -1.2244],[ -1.2244, 3.0187]])
             ^
Main.java:23: error: unclosed character literal
mixGaussTrue['cov'][:,:,2] = np.array([[  0.9886, -1.2244],[ -1.2244, 3.0187]])
                 ^
Main.java:26: error: unclosed string literal
    """
      ^
Main.java:34: error: unclosed string literal
    """
      ^
Main.java:37: error: illegal character: '#'
        #choose random index                                                               
        ^
Main.java:39: error: illegal character: '#'
        #choose random height                                                              
        ^
Main.java:41: error: illegal character: '#'
        #if height is less than probability value at this point in the                     
        ^
Main.java:42: error: illegal character: '#'
        # histogram then select                                                            
        ^
Main.java:46: error: unclosed string literal
    """
      ^
Main.java:48: error: unclosed string literal
    """
      ^
Main.java:55: error: class, interface, or enum expected
    factor = 4/(vec@np.linalg.inv(s)@vec.T)
                                          ^
Main.java:66: error: unclosed string literal
    """
      ^
Main.java:68: error: unclosed string literal
    """
      ^
Main.java:81: error: unclosed string literal
    """
      ^
Main.java:88: error: unclosed string literal
    """
      ^
Main.java:89: error: illegal character: '#'
    #set(gcf,'Color',[1 1 1])
    ^
Main.java:89: error: unclosed character literal
    #set(gcf,'Color',[1 1 1])
             ^
Main.java:89: error: unclosed character literal
    #set(gcf,'Color',[1 1 1])
                   ^
Main.java:91: error: unclosed character literal
    plt.plot(data[0,:],data[1,:],'k.')
                                 ^
Main.java:91: error: unclosed character literal
    plt.plot(data[0,:],data[1,:],'k.')
                                    ^
Main.java:94: error: unclosed character literal
        drawGaussianOutline(mixGauss['mean'][:,cGauss],mixGauss['cov'][:,:,cGauss],mixGauss['weight'][cGauss])
                                     ^
Main.java:94: error: unclosed character literal
        drawGaussianOutline(mixGauss['mean'][:,cGauss],mixGauss['cov'][:,:,cGauss],mixGauss['weight'][cGauss])
                                          ^
Main.java:94: error: unclosed character literal
        drawGaussianOutline(mixGauss['mean'][:,cGauss],mixGauss['cov'][:,:,cGauss],mixGauss['weight'][cGauss])
                                                                ^
Main.java:94: error: unclosed character literal
        drawGaussianOutline(mixGauss['mean'][:,cGauss],mixGauss['cov'][:,:,cGauss],mixGauss['weight'][cGauss])
                                                                    ^
Main.java:94: error: unclosed character literal
        drawGaussianOutline(mixGauss['mean'][:,cGauss],mixGauss['cov'][:,:,cGauss],mixGauss['weight'][cGauss])
                                                                                            ^
Main.java:94: error: unclosed character literal
        drawGaussianOutline(mixGauss['mean'][:,cGauss],mixGauss['cov'][:,:,cGauss],mixGauss['weight'][cGauss])
                                                                                                   ^
Main.java:99: error: unclosed string literal
    """
      ^
Main.java:109: error: unclosed string literal
    """
      ^
Main.java:110: error: illegal character: '#'
    # create space for output data                                                                               
    ^
Main.java:112: error: illegal character: '#'
    # for each data point                                                                                        
    ^
Main.java:114: error: illegal character: '#'
        # randomly choose Gaussian according to probability distributions                                        
        ^
Main.java:115: error: unclosed character literal
        h = sampleFromDiscrete(mixGauss['weight'])                                                               
                                        ^
Main.java:115: error: unclosed character literal
        h = sampleFromDiscrete(mixGauss['weight'])                                                               
                                               ^
Main.java:116: error: illegal character: '#'
        # draw a sample from the appropriate Gaussian distribution  
        ^
Main.java:117: error: illegal character: '#'
        # first sample from the covariance matrix (google how to do this - it
        ^
Main.java:118: error: illegal character: '#'
        # will involve the numpy function np.linalg.cholesky().  Then add the mean vector
        ^
Main.java:119: error: illegal character: '#'
        # TO DO (f)- insert data generation code here                                                                               
        ^
Main.java:120: error: illegal character: '#'
        placeholder = -1 # remove this palceholder when you do. 
                         ^
Main.java:121: error: illegal character: '#'
        #rr=
        ^
Main.java:122: error: illegal character: '#'
        #data[:,cData] = np.transpose(mixGauss['mean'][0][h])+np.random.normal(1,mixGauss['d'])* np.transpose(np.linalg.cholesky(mixGauss['cov'][:,:,h]))
        ^
Main.java:122: error: unclosed character literal
        #data[:,cData] = np.transpose(mixGauss['mean'][0][h])+np.random.normal(1,mixGauss['d'])* np.transpose(np.linalg.cholesky(mixGauss['cov'][:,:,h]))
                                               ^
Main.java:122: error: unclosed character literal
        #data[:,cData] = np.transpose(mixGauss['mean'][0][h])+np.random.normal(1,mixGauss['d'])* np.transpose(np.linalg.cholesky(mixGauss['cov'][:,:,h]))
                                                    ^
Main.java:122: error: unclosed character literal
        #data[:,cData] = np.transpose(mixGauss['mean'][0][h])+np.random.normal(1,mixGauss['d'])* np.transpose(np.linalg.cholesky(mixGauss['cov'][:,:,h]))
                                                                                                                                          ^
Main.java:122: error: unclosed character literal
        #data[:,cData] = np.transpose(mixGauss['mean'][0][h])+np.random.normal(1,mixGauss['d'])* np.transpose(np.linalg.cholesky(mixGauss['cov'][:,:,h]))
                                                                                                                                              ^
Main.java:123: error: unclosed character literal
        data[:,cData]=np.random.multivariate_normal(mixGauss['mean'][:,h], mixGauss['cov'][:,:,h])                                                                                                 
                                                             ^
Main.java:123: error: unclosed character literal
        data[:,cData]=np.random.multivariate_normal(mixGauss['mean'][:,h], mixGauss['cov'][:,:,h])                                                                                                 
                                                                  ^
Main.java:123: error: unclosed character literal
        data[:,cData]=np.random.multivariate_normal(mixGauss['mean'][:,h], mixGauss['cov'][:,:,h])                                                                                                 
                                                                                    ^
Main.java:123: error: unclosed character literal
        data[:,cData]=np.random.multivariate_normal(mixGauss['mean'][:,h], mixGauss['cov'][:,:,h])                                                                                                 
                                                                                        ^
Main.java:127: error: illegal character: '#'
    #define number of samples to generate
    ^
Main.java:130: error: illegal character: '#'
#generate data from the mixture of Gaussians
^
Main.java:130: error: class, interface, or enum expected
#generate data from the mixture of Gaussians
          ^
Main.java:131: error: illegal character: '#'
#make sure you've filled in the routine above.
^
Main.java:131: error: unclosed character literal
#make sure you've filled in the routine above.
              ^
Main.java:134: error: illegal character: '#'
#draw data, true Gaussians
^
Main.java:138: error: unclosed string literal
    """
      ^
Main.java:148: error: unclosed string literal
    """
      ^
Main.java:151: error: illegal character: '#'
    # find total number of data items                                                                  
    ^
Main.java:154: error: illegal character: '#'
    # initialize log likelihoods                                                                       
    ^
Main.java:157: error: illegal character: '#'
    # run through each data item                                                                       
    ^
Main.java:157: error: class, interface, or enum expected
    # run through each data item                                                                       
          ^
Main.java:160: error: illegal character: '#'
        # TO DO - calculate likelihood of this data point under mixture of                         
        ^
Main.java:161: error: illegal character: '#'
        # Gaussians model. Replace this                                                                
        ^
Main.java:165: error: illegal character: '#'
            #like = like + mixGaussEst['weight'][m]+1/((2*np.pi)^(nDims)*numpy.linalg.det(mixGaussEst['cov'][:,:,h]))^(1/2)* exp(-0.5*(np.transpose(thisData-mixGaussEst['mean'][:,h])))*np.linalg.inv(mixGaussEst['cov'][:,:,m])*(thisData-mixGaussEst['mean'][:,h])
            ^
Main.java:165: error: unclosed character literal
            #like = like + mixGaussEst['weight'][m]+1/((2*np.pi)^(nDims)*numpy.linalg.det(mixGaussEst['cov'][:,:,h]))^(1/2)* exp(-0.5*(np.transpose(thisData-mixGaussEst['mean'][:,h])))*np.linalg.inv(mixGaussEst['cov'][:,:,m])*(thisData-mixGaussEst['mean'][:,h])
                                       ^
Main.java:165: error: unclosed character literal
            #like = like + mixGaussEst['weight'][m]+1/((2*np.pi)^(nDims)*numpy.linalg.det(mixGaussEst['cov'][:,:,h]))^(1/2)* exp(-0.5*(np.transpose(thisData-mixGaussEst['mean'][:,h])))*np.linalg.inv(mixGaussEst['cov'][:,:,m])*(thisData-mixGaussEst['mean'][:,h])
                                              ^
Main.java:165: error: unclosed character literal
            #like = like + mixGaussEst['weight'][m]+1/((2*np.pi)^(nDims)*numpy.linalg.det(mixGaussEst['cov'][:,:,h]))^(1/2)* exp(-0.5*(np.transpose(thisData-mixGaussEst['mean'][:,h])))*np.linalg.inv(mixGaussEst['cov'][:,:,m])*(thisData-mixGaussEst['mean'][:,h])
                                                                                                      ^
Main.java:165: error: unclosed character literal
            #like = like + mixGaussEst['weight'][m]+1/((2*np.pi)^(nDims)*numpy.linalg.det(mixGaussEst['cov'][:,:,h]))^(1/2)* exp(-0.5*(np.transpose(thisData-mixGaussEst['mean'][:,h])))*np.linalg.inv(mixGaussEst['cov'][:,:,m])*(thisData-mixGaussEst['mean'][:,h])
                                                                                                          ^
Main.java:165: error: unclosed character literal
            #like = like + mixGaussEst['weight'][m]+1/((2*np.pi)^(nDims)*numpy.linalg.det(mixGaussEst['cov'][:,:,h]))^(1/2)* exp(-0.5*(np.transpose(thisData-mixGaussEst['mean'][:,h])))*np.linalg.inv(mixGaussEst['cov'][:,:,m])*(thisData-mixGaussEst['mean'][:,h])
                                                                                                                                                                         ^
Main.java:165: error: unclosed character literal
            #like = like + mixGaussEst['weight'][m]+1/((2*np.pi)^(nDims)*numpy.linalg.det(mixGaussEst['cov'][:,:,h]))^(1/2)* exp(-0.5*(np.transpose(thisData-mixGaussEst['mean'][:,h])))*np.linalg.inv(mixGaussEst['cov'][:,:,m])*(thisData-mixGaussEst['mean'][:,h])
                                                                                                                                                                              ^
Main.java:165: error: unclosed character literal
            #like = like + mixGaussEst['weight'][m]+1/((2*np.pi)^(nDims)*numpy.linalg.det(mixGaussEst['cov'][:,:,h]))^(1/2)* exp(-0.5*(np.transpose(thisData-mixGaussEst['mean'][:,h])))*np.linalg.inv(mixGaussEst['cov'][:,:,m])*(thisData-mixGaussEst['mean'][:,h])
                                                                                                                                                                                                                   ^
Main.java:165: error: unclosed character literal
            #like = like + mixGaussEst['weight'][m]+1/((2*np.pi)^(nDims)*numpy.linalg.det(mixGaussEst['cov'][:,:,h]))^(1/2)* exp(-0.5*(np.transpose(thisData-mixGaussEst['mean'][:,h])))*np.linalg.inv(mixGaussEst['cov'][:,:,m])*(thisData-mixGaussEst['mean'][:,h])
                                                                                                                                                                                                                       ^
Main.java:165: error: unclosed character literal
            #like = like + mixGaussEst['weight'][m]+1/((2*np.pi)^(nDims)*numpy.linalg.det(mixGaussEst['cov'][:,:,h]))^(1/2)* exp(-0.5*(np.transpose(thisData-mixGaussEst['mean'][:,h])))*np.linalg.inv(mixGaussEst['cov'][:,:,m])*(thisData-mixGaussEst['mean'][:,h])
                                                                                                                                                                                                                                                        ^
Main.java:165: error: unclosed character literal
            #like = like + mixGaussEst['weight'][m]+1/((2*np.pi)^(nDims)*numpy.linalg.det(mixGaussEst['cov'][:,:,h]))^(1/2)* exp(-0.5*(np.transpose(thisData-mixGaussEst['mean'][:,h])))*np.linalg.inv(mixGaussEst['cov'][:,:,m])*(thisData-mixGaussEst['mean'][:,h])
                                                                                                                                                                                                                                                             ^
Main.java:166: error: illegal character: '#'
            #mu = mixGaussEst['mean'][:,m]
            ^
Main.java:166: error: unclosed character literal
            #mu = mixGaussEst['mean'][:,m]
                              ^
Main.java:166: error: unclosed character literal
            #mu = mixGaussEst['mean'][:,m]
                                   ^
Main.java:167: error: illegal character: '#'
            #var = mixGaussEst['cov'][:,:,m]
            ^
100 errors
stdout
Standard output is empty