Я бегу это Выбор количества кластеров пример scikit-learn
в python
, Пример получает несколько образцов с 2 функциями и находит лучшее k для kmeans
кластеризация.
В моем случае у меня есть образцы с 3 функциями. они есть 3 dimensional coordinates
в самом деле. Итак, в коде я просто изменяю вход для моих сэмплов, а остальное остается тем же. Количество моих выборочных точек очень велико, может быть, более 10000 баллов.
когда я вводил все свои данные, я получал ошибку памяти (у меня 16 ГБ ОЗУ, и все это было заполнено). Но когда я помещаю половину своих данных, это не выдает ошибку. Хотя ошибка показывает ipython notebook для функции силуэта, но я почти уверен, что это происходит в kmeans, и он не выполняет кластеризацию и внезапно переходит к этой ошибке.
С таким же количеством данных я сделал кластеризацию Kmeans в C++
и это было совершенно нормально и быстро без проблем.
Есть ли идеи, как я могу решить эту проблему?
это ошибка, которую я получил
MemoryError Traceback (most recent call last)
<ipython-input-4-ed4b060ccea1> in <module>()
41 # This gives a perspective into the density and separation of the formed
42 # clusters
---> 43 silhouette_avg = silhouette_score(X, cluster_labels)
44 print("For n_clusters =", n_clusters,
45 "The average silhouette_score is :", silhouette_avg)
/usr/lib64/python2.7/site-packages/sklearn/metrics/cluster/unsupervised.pyc in silhouette_score(X, labels, metric, sample_size, random_state, **kwds)
82 else:
83 X, labels = X[indices], labels[indices]
---> 84 return np.mean(silhouette_samples(X, labels, metric=metric, **kwds))
85
86
/usr/lib64/python2.7/site-packages/sklearn/metrics/cluster/unsupervised.pyc in silhouette_samples(X, labels, metric, **kwds)
141
142 """--> 143 distances = pairwise_distances(X, metric=metric, **kwds)
144 n = labels.shape[0]
145 A = np.array([_intra_cluster_distance(distances[i], labels, i)
/usr/lib64/python2.7/site-packages/sklearn/metrics/pairwise.pyc in pairwise_distances(X, Y, metric, n_jobs, **kwds)
649 func = pairwise_distance_functions[metric]
650 if n_jobs == 1:
--> 651 return func(X, Y, **kwds)
652 else:
653 return _parallel_pairwise(X, Y, func, n_jobs, **kwds)
/usr/lib64/python2.7/site-packages/sklearn/metrics/pairwise.pyc in euclidean_distances(X, Y, Y_norm_squared, squared)
181 distances.flat[::distances.shape[0] + 1] = 0.0
182
--> 183 return distances if squared else np.sqrt(distances)
184
185
MemoryError:
Это не k-означает, что не хватает памяти.
Но нужен индекс оценки Силуэт квадратный расчеты расстояния, и, по-видимому, Sklearn пытается сделать это путем вычисления матрица расстояний. Скорее всего, ему даже потребуется несколько его копий.
Теперь сделай математику сам. Большинству реализаций не хватает памяти около 64 тыс. Экземпляров при попытке вычисления матрицы полного расстояния.
Таким образом, уберите призыв к силуэту.
Других решений пока нет …