def k_means(x, k):
    #max_v = max([v for xi in x for v in xi])
    #min_v = min([v for xi in x for v in xi])
    miu = [x[0], x[1], x[2], x[6], x[8]]

    #miu = []
    #for i in range(k):
    #miu.append([random.randint(min_v,max_v) for j in range(len(x[0]))])
    n = 0
    while n < 50:
        w = [None] * k
        for i in range(len(x)):
            dists = [(cos_similarity(x[i], miu[j]), j) for j in range(k)]
            min_center = max(dists, key=lambda x: x[0])[1]

            if w[min_center]:
                w[min_center].append(i)
            else:
                l = []
                l.append(i)
                w[min_center] = l

        for m in range(k):
            if w[m]:
                centroid = numpy.array([0.0] * len(x[0]))
                for v in w[m]:
                    centroid += x[v]
                miu[m] = centroid / len(w[m])
            #else:
            #print 'wrong'
            #sys.exit()
        n = n + 1

    return miu, w
def k_means(x,k):
    #max_v = max([v for xi in x for v in xi])
    #min_v = min([v for xi in x for v in xi])
    miu = [x[0],x[1],x[2],x[6],x[8]]
            
    #miu = []         
    #for i in range(k):
        #miu.append([random.randint(min_v,max_v) for j in range(len(x[0]))])
    n = 0      
    while n < 50:        
        w = [None]*k     
        for i in range(len(x)):
            dists = [(cos_similarity(x[i],miu[j]),j) for j in range(k)]
            min_center = max(dists,key=lambda x:x[0])[1]
           
            if w[min_center]:
                w[min_center].append(i)
            else:
                l = []
                l.append(i)
                w[min_center] = l
                
        for m in range(k):
            if w[m]:
                centroid = numpy.array([0.0]*len(x[0]))
                for v in w[m]:
                    centroid += x[v]
                miu[m] = centroid/len(w[m]) 
            #else:
                #print 'wrong'
                #sys.exit()           
        n = n + 1  
                                  
    return miu,w
Beispiel #3
0
def k_means(x,k):
    miu = [x[i] for i in range(k)]
    n = 0      
    while n < 1000:        
        w = [None]*k     
        for i in range(len(x)):
            dists = [(cos_similarity(x[i],miu[j]),j) for j in range(k)]
            min_center = min(dists,key=lambda x:x[0])[1]
            if w[min_center]:
                w[min_center].append(i)
            else:
                l = []
                l.append(i)
                w[min_center] = l
        for m in range(k):
            if w[m] and len(w[m]):
                centroid = numpy.array([0]*len(x[0]))
                for v in w[m]:
                    centroid = centroid + x[v]
                miu[m] = centroid/len(w[m]) 
            #else:
                #print 'wrong'
                #sys.exit()           
        n = n + 1  
                  
    #print miu,w               
    return miu,w
def state_probability(probabiliy_matrix):
    dimension = probabiliy_matrix.shape[0]
    start_states = numpy.array([1.0/dimension]*dimension)
    old_states = start_states
    while True:
        states = numpy.mat(start_states) * probabiliy_matrix
        if math.acos(cos_similarity(states,old_states)) < (math.pi/180):
            break
        else:
            old_states = states
    
    print states
    return states