Возможно ли, что есть кластеры, которые не имеют членов в кластеризации k-средних? - PullRequest
0 голосов
/ 03 ноября 2019

У меня есть проект кластеризации текста, использующий алгоритм k-средних. Мой набор данных - это политические настроения комментариев Facebook, так что каждый комментарий имеет положительный, отрицательный и нейтральный ярлык.

В моей прикладной программе я сделал следующее:

1. Normalize text and delete stopwords.
2. Term weighting using tf-idf.
3. Constructing a matrix of vectors for each comment data.
4. Set the number of clusters to 3 (based on the number of labels).
5. Choose centroid randomly based on the label. So each label contributes 1 comment as a centroid.
6. Calculate the distance of each comment's vector with each centroid, assign to the closest centroid.
7. Calculate the vector's average of each cluster as a new centroid.
8. Repeat steps 6 and 7 until the centroid does not change.
9. The final cluster results.

В результатах кластеризации, которые я получил, есть кластеры, в которых нет участников. Например, я установил число кластеров равным 3, но в результате только 2 кластера имеют членов, а 1 другой кластер пуст.

Возможно ли это для алгоритма k-средних? Как решить эту проблему? Или, может быть, в моей прикладной программе есть ошибки?

Ответы [ 2 ]

0 голосов
/ 03 ноября 2019

Да, k-означает, что кластеры могут стать пустыми.

Скорее всего, это произойдет с неправильными начальными значениями и другими ошибками программирования, поэтому, если вы часто видите это, я все равно отлаживаю.

В вашем подходе также есть одна большая концептуальная ошибка: здесь нет ничего , что сделало бы классы "положительными", "отрицательными" или "нейтральными". Это контролируемые концепции, кластеризация не может этого сделать.

0 голосов
/ 03 ноября 2019

Очевидно, это возможно. Если вы запрашиваете три кластера, но имеете только две точки данных, то вы не получите три кластера.

На практике это кажется крайне подозрительным. К-среднее обычно начинается с существующих точек данных в качестве центров кластера. Каждая последующая итерация k-средних использует центроид группы точек в данных. Чтобы в этом кластере не было точек данных, потребовалось бы наличие центроида точек данных, который НЕ является ближайшим центроидом хотя бы к одной из этих точек данных.

Возможно, можно создать сценарий, в котором это происходит,Но это кажется маловероятным в реальном мире. Возможно ли, что у вас есть какой-то другой механизм фильтрации кластеров, например минимальный размер, который фильтрует кластеры? Для k-средних нет ничего необычного в том, чтобы создавать очень маленькие выбросы. На самом деле, я думаю, что это лучше всего подходит для поиска таких.

...