Различные оценки силуэта для одних и тех же данных и количества кластеров

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

Поскольку мой набор данных довольно скуден, я использовал MaxAbsScaler и TruncatedSVD перед кластеризацией.

Метод кластеризации, который я использую, является k-means, так как я больше всего знаком с этим (я был бы признателен за ваше предложение о другом методе кластеризации).

Когда я установил номер кластера на 80 и запустил k-means, я каждый раз получал разные оценки силуэта. Это потому, что k-means каждый раз дает разные кластеры? Иногда оценка силуэта для кластера с числом 80 меньше 200, а иногда наоборот. Поэтому я не понимаю, как выбрать разумное количество кластеров.

Кроме того, диапазон моей оценки силуэта довольно мал и не сильно меняется, так как я увеличиваю количество кластеров, которое колеблется от 0,15 до 0,2.

Вот результат, который я получил, запустив Силуэт:

For n_clusters=80, The Silhouette Coefficient is 0.17329035592930178
For n_clusters=100, The Silhouette Coefficient is 0.16970208098407866
For n_clusters=200, The Silhouette Coefficient is 0.1961679920561574
For n_clusters=300, The Silhouette Coefficient is 0.19367019831221857
For n_clusters=400, The Silhouette Coefficient is 0.19818865972762675
For n_clusters=500, The Silhouette Coefficient is 0.19551544844885604
For n_clusters=600, The Silhouette Coefficient is 0.19611760638136203

Буду очень признателен за ваши предложения! Заранее спасибо!

2 ответа

Да, k-means рандомизирован, поэтому он не всегда дает один и тот же результат.

Обычно это означает, что это не хорошо.

Но не стоит слепо полагаться на силуэт. Это не достаточно надежно, чтобы найти "лучший" k. Во многом потому, что обычно нет лучшего k вообще.

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

Я думаю, что вы используете sklearn, так что установка random_state Параметр к числу должен позволить вам получить воспроизводимые результаты для разных исполнений k-средних для одного и того же k. Вы можете установить это число равным 0, 42 или как хотите, просто сохраняйте одно и то же число для разных прогонов кода, и результаты будут одинаковыми.

Другие вопросы по тегам