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
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