@Test public void setMean() { GaussianGmm_F64 g = new GaussianGmm_F64(3); g.setMean(new double[]{1,2,3}); for (int i = 0; i < 3; i++) { assertEquals(i+1,g.mean.get(i,0),1e-8); } }
@Test public void addMean() { GaussianGmm_F64 g = new GaussianGmm_F64(3); g.addMean(new double[]{2,3,-1},0.7); g.addMean(new double[]{4,1,0.5},1.2); assertEquals(2*0.7 + 4*1.2,g.mean.data[0],1e-8); assertEquals(3*0.7 + 1*1.2,g.mean.data[1],1e-8); assertEquals(-1*0.7 + 0.5*1.2,g.mean.data[2],1e-8); assertEquals(0.7 + 1.2, g.weight, 1e-8); }
/** * Copy constructor */ public AssignGmm_F64( AssignGmm_F64 original ) { mixture = new ArrayList<GaussianGmm_F64>(); for (int i = 0; i < original.mixture.size(); i++) { GaussianGmm_F64 o = original.mixture.get(i); mixture.add(o.copy()); } int N = mixture.get(0).mean.getNumElements(); glm = new GaussianLikelihoodManager(N,mixture); glm.precomputeAll(); }
mixture.get(i).zero(); mixture.get(j).addMean(p.point,p.weights.get(j)); mixture.get(j).addCovariance(dx, pp.weights.get(j));
@Test public void addCovariance() { GaussianGmm_F64 g = new GaussianGmm_F64(3); g.setMean(new double[]{4,3,6}); Equation eq = new Equation(); eq.process("Q = zeros(3,3)"); for (int i = 0; i < 5; i++) { DMatrixRMaj x = RandomMatrices_DDRM.rectangle(3,1,rand); eq.alias(x,"x",0.4+i*0.1,"w"); eq.process("Q = Q + w*x*x'"); g.addCovariance(x.data,0.4+i*0.1); } DMatrixRMaj Q = eq.lookupDDRM("Q"); assertTrue(MatrixFeatures_DDRM.isIdentical(Q, g.covariance, 1e-8)); }
public GaussianGmm_F64 copy() { GaussianGmm_F64 out = new GaussianGmm_F64(mean.getNumElements()); out.mean.set(mean); out.covariance.set(covariance); out.weight = weight; return out; }
@Test public void zero() { GaussianGmm_F64 g = new GaussianGmm_F64(3); CommonOps_DDRM.fill(g.mean,1); CommonOps_DDRM.fill(g.covariance,2); g.weight = 4; g.zero(); assertTrue(CommonOps_DDRM.elementSumAbs(g.mean)==0); assertTrue(CommonOps_DDRM.elementSumAbs(g.covariance)==0); assertTrue(g.weight == 0); }
g.setMean(means.get(i)); CommonOps_DDRM.fill(g.covariance, 0);
mixture.get(i).zero(); mixture.get(j).addMean(p.point,p.weights.get(j)); mixture.get(j).addCovariance(dx, pp.weights.get(j));
public GaussianGmm_F64 copy() { GaussianGmm_F64 out = new GaussianGmm_F64(mean.getNumElements()); out.mean.set(mean); out.covariance.set(covariance); out.weight = weight; return out; }
g.setMean(means.get(i)); CommonOps_DDRM.fill(g.covariance, 0);
public static GaussianGmm_F64 createGaussian( double mean , double var ) { GaussianGmm_F64 ret = new GaussianGmm_F64(1); ret.mean.set(0,0,mean); ret.covariance.set(0,0,var); ret.weight = 2; return ret; } }
a.setMean(alg.info.get(i).point); a.weight = 2; CommonOps_DDRM.setIdentity(a.covariance);
/** * Copy constructor */ public AssignGmm_F64( AssignGmm_F64 original ) { mixture = new ArrayList<GaussianGmm_F64>(); for (int i = 0; i < original.mixture.size(); i++) { GaussianGmm_F64 o = original.mixture.get(i); mixture.add(o.copy()); } int N = mixture.get(0).mean.getNumElements(); glm = new GaussianLikelihoodManager(N,mixture); glm.precomputeAll(); }
private GaussianGmm_F64 computeGaussian( int offset , List<double[]> points ) { GaussianGmm_F64 out = new GaussianGmm_F64(2); // compute the mean for (int i = offset; i < points.size(); i += 2) { double[] p = points.get(i); out.mean.data[0] += p[0]; out.mean.data[1] += p[1]; } CommonOps_DDRM.divide(out.mean,points.size()/2); // compute the covariance Equation eq = new Equation(); eq.alias(out.mean, "mu", out.covariance, "Q"); for (int i = offset; i < points.size(); i += 2) { double[] p = points.get(i); DMatrixRMaj x = DMatrixRMaj.wrap(2,1,p); eq.alias(x,"x"); eq.process("Q = Q + (x-mu)*(x-mu)'"); } CommonOps_DDRM.divide(out.covariance,points.size()/2-1); return out; }
private GaussianGmm_F64 computeGaussian( int which , List<PointInfo> points ) { int N = points.get(0).point.length; GaussianGmm_F64 out = new GaussianGmm_F64(N); // compute the mean double total = 0; for (int i = 0; i < points.size(); i++) { PointInfo p = points.get(i); double w = p.weights.data[which]; total += w; for (int j = 0; j < N; j++) { out.mean.data[j] += w*p.point[j]; } } CommonOps_DDRM.divide(out.mean,total); // compute the covariance Equation eq = new Equation(); eq.alias(out.mean, "mu", out.covariance, "Q"); for (int i = 0; i < points.size(); i++) { PointInfo p = points.get(i); double w = p.weights.data[which]; DMatrixRMaj x = DMatrixRMaj.wrap(N,1,p.point); eq.alias(x,"x",w,"w"); eq.process("Q = Q + w*(x-mu)*(x-mu)'"); } CommonOps_DDRM.divide(out.covariance,total); return out; }
seeds.add( new GaussianGmm_F64(2)); seeds.add( new GaussianGmm_F64(2));
GaussianGmm_F64 a = new GaussianGmm_F64(DOF); GaussianGmm_F64 b = new GaussianGmm_F64(DOF);