def fit(self, X, y):
eucl = euclidean_distances(X)
k = self.k
while True:
simi_m = 1 / (1 + eucl)
to_remove = simi_m.shape[0] - (k + 1)
for vec in simi_m:
vec[vec.argsort()[:to_remove]] = 0
g = Graph.Weighted_Adjacency(simi_m.tolist(), mode=ADJ_UNDIRECTED, loops=False)
if g.is_connected():
break
k += 1
self.k = k
comm = g.community_multilevel()
self.y_comm = np.array(comm.membership)
self.y = y
self.X = X
self.mapping = {}
for c in list(set(comm.membership)):
com_clas = self.y[self.y_comm==c]
self.mapping[c] = Counter(com_clas).most_common(1)[0][0]
评论列表
文章目录