рассчитать оценку силуэта fcluster scipy, используя оценку силуэта scikit-learn

Я выполняю кластеризацию иерархии, используя scipy.cluster, за которым следует fcluster с другим ограничением. Я также хочу использовать scikit Silhouette_score. Я вижу сообщение Как рассчитать оценку силуэта fcluster scipy, используя оценку силуэта scikit-learn? Однако я получил ошибку «слишком много логических индексов»??

Мои коды следующие:

import fastcluster
from sklearn import metrics
from scipy.cluster import hierarchy as hac


Temps=[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]
Distance=[]
#read the Distance obtained as a list then
Distances=np.array(Distances)
Z=fastcluster.linkage(Distances, "complete", "euclidean")
for Cutoff in Temps:
    results=hac.fcluster(Z,Cutoff,'distance')
    metrics.silhouette_score(Distances, results, metric="euclidean")

Отчет об ошибке был:

Traceback (most recent call last):
  File "Clustering_2.py", line 93, in <module>
    main(argv)
  File "Clustering_2.py", line 69, in main
    silscore=metrics.silhouette_score(Distances, results,metric='euclidean')
  File "/home/wangz18/site-packages2/sklearn/metrics/cluster/unsupervised.py", line 93, in silhouette_score
    return np.mean(silhouette_samples(X, labels, metric=metric, **kwds))
  File "/home/wangz18/site-packages2/sklearn/metrics/cluster/unsupervised.py", line 157, in silhouette_samples
    for i in range(n)])
  File "/home/wangz18/site-packages2/sklearn/metrics/cluster/unsupervised.py", line 187, in _intra_cluster_distance
    a = np.mean(distances_row[mask])
ValueError: too many boolean indices

в чем проблема? пожалуйста, порекомендуйте. Спасибо


person user1830108    schedule 11.05.2016    source источник
comment
этот пример кода неполный, можете ли вы добавить импорт для fastcluster и hac и определение Distances и Cutoff?   -  person maxymoo    schedule 12.05.2016
comment
также добавьте трассировку для слишком большого количества логических индексов, пожалуйста!   -  person joeln    schedule 12.05.2016
comment
Изменения были внесены спросил. Спасибо!   -  person user1830108    schedule 17.05.2016
comment
Вы уверены, что вводите правильные данные для silhouette_score? Согласно документам, первый аргумент X должен быть X : массив [n_samples_a, n_samples_a], если метрика == «предварительно вычисленная», или [n_samples_a, n_features] в противном случае . Я понимаю, что это означает, что если вы не установите metric на «предварительно вычисленный», он ожидает матрицу признаков, а не расстояний.   -  person patrick    schedule 17.05.2016
comment
Расстояния - это сжатая матрица расстояний.   -  person user1830108    schedule 17.05.2016
comment
да, это то, что я имею в виду. Если вы посмотрите на документы, я не думаю, что они ожидают, что вы введете матрицу расстояний, но вашу исходную матрицу признаков: [n_samples_a, n_features]   -  person patrick    schedule 17.05.2016
comment
Спасибо! я думаю, следует сделать еще один шаг Dicts =squareform(Distances), затем использовать Dicts для metrics.silhouette_score   -  person user1830108    schedule 17.05.2016
comment
Я не знаком с тем, что делает квадратная форма, но похоже, что это даст вам еще одну матрицу расстояний. Насколько я понимаю, простое изменение вашего кода на metrics.silhouette_score(Distances, results, metric="precomputed") должно избавиться от [the|an] ошибки. Cf docs: Если X — это сам массив расстояний, используйте metric=precomputed   -  person patrick    schedule 18.05.2016


Ответы (1)


У меня тот же вопрос, и, пожалуйста, проверьте:

  1. Расстояние равно N*N, N – количество выборок.

  2. results — N, а значение — класс кластера.

  3. Количество кластеров должно быть > 1

Если №1 и №2 правильные, то и они должны быть правильными.

person Lilly Wu    schedule 14.03.2019