Python - проблема с размером массива в функции cdist - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь найти правильный номер кластера для k-средних и для этого использую функцию cdist .

Я могу понять аргумент для cdist должно быть того же размера.Я попытался напечатать размер обоих аргументов (2542, 39) и (1, 39).

Может кто-нибудь подсказать, где я ошибаюсь?

print(tfidf_matrix.shape) ### Returning --> (2542, 39)
#Finding optimal no. of clusters
from scipy.spatial.distance import cdist
clusters=range(1,10)
meanDistortions=[]

for k in clusters:
    model=KMeans(n_clusters=k)
    model.fit(tfidf_matrix)
    prediction=model.predict(tfidf_matrix)
    print(model.cluster_centers_.shape)  ## Returning (1, 39)
    meanDistortions.append(sum(np.min(cdist(tfidf_matrix, model.cluster_centers_, 'euclidean'), axis=1)) /
                           tfidf_matrix.shape[0])

Ошибка:

ValueError                                Traceback (most recent call last)
<ipython-input-181-c15e32d863d2> in <module>()
     12     prediction=model.predict(tfidf_matrix)
     13     print(model.cluster_centers_.shape)
---> 14     meanDistortions.append(sum(np.min(cdist(tfidf_matrix, model.cluster_centers_, 'euclidean'), axis=1)) /
     15                            tfidf_matrix.shape[0])
     16 

~\Downloads\Conda\envs\data-science\lib\site-packages\scipy\spatial\distance.py in cdist(XA, XB, metric, *args, **kwargs)
   2588 
   2589     if len(s) != 2:
-> 2590         raise ValueError('XA must be a 2-dimensional array.')
   2591     if len(sB) != 2:
   2592         raise ValueError('XB must be a 2-dimensional array.')

ValueError: XA must be a 2-dimensional array.

1 Ответ

0 голосов
/ 20 декабря 2018

Вероятно, это проблема типа .

Tfidf, вероятно, не является плотной матрицей, как того требует cdist.Конечно, здесь имеет смысл использовать разреженную матрицу.

Однако cdist, похоже, не принимает разреженные матрицы: scipy cdist с разреженными матрицами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...