Пример #1
0
def estNum(neigh,epsilon):
	m=len(neigh);
	if epsilon<0:
		return len([i for i in neigh if i>0]);
	sc=[0.0 for i in range(0,m+1)];
	for i in range(0,m):
		if neigh[i]>0:
			sc[i]=-epsilon*neigh[i]/2.0;
		else:
			sc[i]=epsilon*(neigh[i]-1)/2.0;
	for i in range(0,m+1):
		sc[i]=math.exp(sc[i]);
	sm=sum(sc);
	sc=[i/sm for i in sc]
	multi=mult(1,sc);
	ret=min([i for i in range(0,m+1) if multi[i]>0]);
	if ret==m:
		return len([i for i in neigh if i>0]);
	val=neigh[ret];
	
	v1=len([i for i in neigh if i>val]);
		
	v2=len([i for i in neigh if i==val]);


	return rand.randint(v1,v1+v2-1);
Пример #2
0
def estNum(MU,y,pval,epsilon):
    #bnd_sc=math.sqrt(chi2.ppf((1.0-pval),df=1));
    bnd_sc=math.sqrt(pval);
    ret=MU.normY(y);
    nm=ret[0];
    sen=ret[1];


    n=len(y);
    if sen>0:
        bnd_est=bnd_sc*abs(nm+Lap(0.0,2.0*sen/epsilon));
	if MU.k>0:
		bnd_est=bnd_est/math.sqrt(n-MU.k-1);
    else:
        bnd_est=bnd_sc*nm;

    
    neigh=MU.neighDist(y,bnd_est);
    m=len(neigh);
    if epsilon<0:
        return len([i for i in neigh if i>0]);
    sc=[0.0 for i in range(0,m+1)];
    for i in range(0,m):
        if neigh[i]>0:
            sc[i]=-epsilon*neigh[i]/4.0;
        else:
            sc[i]=epsilon*(neigh[i]-1)/4.0;
    for i in range(0,m+1):
        sc[i]=math.exp(sc[i]);
    sm=sum(sc);
    sc=[i/sm for i in sc]
    multi=mult(1,sc);
    ret=min([i for i in range(0,m+1) if multi[i]>0]);
    if ret==m:
        return len([i for i in neigh if i>0]);
    val=neigh[ret];
        
    v1=len([i for i in neigh if i>val]);
        
    v2=len([i for i in neigh if i==val]);
        
        
    return rand.randint(v1,v1+v2-1);
Пример #3
0
def expPick(sc,mret):
    m=len(sc);
        fnd=[0 for i in range(0,mret)]
        scores=[s for s in sc]
        for i in range(0,mret):
            ms=max(scores);
                scores=[s-ms for s in scores];
                prb=[math.exp(s) for s in scores];
                sm=sum(prb);
                prb=[s/sm for s in prb];
                while sum(prb)>1:
                    sm=sum(prb);
                    prb=[s/sm for s in prb];
                
                mlt=mult(1,prb);
                
                k=min([k for k in range(0,m) if mlt[k]>0]);
                
                fnd[i]=k;
            scores[k]=-float("inf");
Пример #4
0
 def sample(self, N=100, shuffle=True):
     """
     Generate N samples from the model. Returns three numpy arrays: z2 of size (N,) with cluster assignments,
     x = (N,d) with the observations, and z with the cluster counts (used for debugging only).
     """
     z = mult(N, self.phi,
              size=1).reshape(self.K)  # these are the cluster assignments
     x = np.zeros((N, self.d))
     z2 = np.zeros(
         N, dtype=int)  # To rexpress z as vector with cluster assignments
     ct = 0
     for k in np.arange(self.K):
         x[ct:ct + z[k], :] = mnorm(self.mu[k], self.Sigma[k], z[k])
         z2[ct:ct + z[k]] = k
         ct += z[k]
     if shuffle:
         idx = np.random.permutation(np.arange(N))
         z2 = z2[idx]
         x = x[idx, :]
     return (z2, x, z)
Пример #5
0
def expPick(sc,mret):
	m=len(sc);
	fnd=[0 for i in range(0,mret)]
	scores=[s for s in sc]
	for i in range(0,mret):
		ms=max(scores);
		scores=[s-ms for s in scores];
		prb=[math.exp(s) for s in scores];
		sm=sum(prb);
		prb=[s/sm for s in prb];
		while sum(prb)>1:
			sm=sum(prb);
			prb=[s/sm for s in prb];

		mlt=mult(1,prb);

		k=min([k for k in range(0,m) if mlt[k]>0]);
		
		fnd[i]=k;
		scores[k]=-float("inf");
	return fnd;
Пример #6
0
def expPick(sc, mret):
    m = len(sc)
    fnd = [0 for i in range(0, mret)]
    scores = [s for s in sc]
    for i in range(0, mret):
        ms = max(scores)
        scores = [s - ms for s in scores]
        prb = [math.exp(s) for s in scores]
        sm = sum(prb)
        prb = [s / sm for s in prb]
        while sum(prb) > 1:
            sm = sum(prb)
            prb = [s / sm for s in prb]

        mlt = mult(1, prb)

        k = min([k for k in range(0, m) if mlt[k] > 0])

        fnd[i] = k
        scores[k] = -float("inf")
    return fnd
Пример #7
0
def estNum(MU, y, pval, epsilon):
    #bnd_sc=math.sqrt(chi2.ppf((1.0-pval),df=1));
    bnd_sc = math.sqrt(pval)
    ret = MU.normY(y)
    nm = ret[0]
    sen = ret[1]

    n = len(y)
    if sen > 0:
        bnd_est = bnd_sc * abs(nm + Lap(0.0, 2.0 * sen / epsilon))
        if MU.k > 0:
            bnd_est = bnd_est / math.sqrt(n - MU.k - 1)
    else:
        bnd_est = bnd_sc * nm

    neigh = MU.neighDist(y, bnd_est)
    m = len(neigh)
    if epsilon < 0:
        return len([i for i in neigh if i > 0])
    sc = [0.0 for i in range(0, m + 1)]
    for i in range(0, m):
        if neigh[i] > 0:
            sc[i] = -epsilon * neigh[i] / 4.0
        else:
            sc[i] = epsilon * (neigh[i] - 1) / 4.0
    for i in range(0, m + 1):
        sc[i] = math.exp(sc[i])
    sm = sum(sc)
    sc = [i / sm for i in sc]
    multi = mult(1, sc)
    ret = min([i for i in range(0, m + 1) if multi[i] > 0])
    if ret == m:
        return len([i for i in neigh if i > 0])
    val = neigh[ret]

    v1 = len([i for i in neigh if i > val])

    v2 = len([i for i in neigh if i == val])

    return rand.randint(v1, v1 + v2 - 1)
Пример #8
0
def estNum(MU,y,pval,epsilon):
    bnd_sc=math.sqrt(chi2.ppf((1.0-pval),df=1));

    [nm,sen]=MU.normY(self,y);


    if sen>0:
        bnd_est=bnd_sc*abs(nm+Lap(0.0,2.0*sen/epsilon));
    else:
        bnd_est=bnd_sc*nm;
    
    neigh=MU.neighDist(y,bnd_est);
    m=len(neigh);
    if epsilon<0:
        return len([i for i in neigh if i>0]);
    sc=[0.0 for i in range(0,m+1)];
    for i in range(0,m):
        if neigh[i]>0:
            sc[i]=-.5*epsilon*neigh[i]/2.0;
        else:
            sc[i]=.5*epsilon*(neigh[i]-1)/2.0;
    for i in range(0,m+1):
        sc[i]=math.exp(sc[i]);
    sm=sum(sc);
    sc=[i/sm for i in sc]
    multi=mult(1,sc);
    ret=min([i for i in range(0,m+1) if multi[i]>0]);
    if ret==m:
        return len([i for i in neigh if i>0]);
    val=neigh[ret];
        
    v1=len([i for i in neigh if i>val]);
        
    v2=len([i for i in neigh if i==val]);
        
        
    return rand.randint(v1,v1+v2-1);