Используйте функцию подобия для кластеризации scikit-learn
Я использую функцию для вычисления сходства между парой документов и хочу выполнить кластеризацию, используя эту меру сходства.
Код пока
Sim=np.zeros((n, n)) # create a numpy arrary
i=0
j=0
for i in range(0,n):
for j in range(i,n):
if i==j:
Sim[i][j]=1
else:
Sim[i][j]=simfunction(list_doc[i],list_doc[j]) # calculate similarity between documents i and j using simfunction
Sim=Sim+ Sim.T - np.diag(Sim.diagonal()) # complete the symmetric matrix
AggClusterDistObj=AgglomerativeClustering(n_clusters=num_cluster,linkage='average',affinity="precomputed")
Res_Labels=AggClusterDistObj.fit_predict(Sim)
Меня беспокоит то , что здесь я использовал функцию подобия, и я думаю, что в соответствии с документами это должна быть матрица несходства, как я могу изменить ее на матрицу несходства.
Кроме того, что было бы более эффективным способом сделать это.
1 ответ:
Пожалуйста, отформатируйте ваш код правильно , поскольку отступ имеет значение в Python.
Если возможно, сохраните код полным (вы пропустили
import numpy as np).Поскольку
rangeвсегда начинается с нуля, вы можете опустить его и написатьrange(n).Индексация в numpy работает как [i, j, k, ...].
Поэтому вместоSim[i][j]Вы на самом деле хотите написатьSim[i, j], потому что в противном случае вы делаете две операции: сначала берете весь срез строки, а затем индексируете колонка. Вот еще один способ скопировать элементы верхнего треугольника в НижнийSim = np.identity(n) # diagonal with ones (100 percent similarity) for i in range(n): for j in range(i+1, n): # +1 skips the diagonal Sim[i, j]= simfunction(list_doc[i], list_doc[j]) # Expand the matrix (copy triangle) tril = np.tril_indices_from(Sim, -1) # take lower & upper triangle's indices triu = np.triu_indices_from(Sim, 1) # (without diagonal) Sim[tril] = Sim[triu]Предположим, что у вас действительно есть сходство в пределах диапазона (0, 1), чтобы преобразовать вашу матрицу подобия в матрицу расстояния, вы можете просто сделать
dm = 1 - SimЭта операция будет векторизована numpy
Comments