Я пытаюсь использовать силуэт графика, чтобы определить количество кластеров в моем наборе данных. Учитывая набор данных Train , я использовал следующий код Matlab
Train_data = full(Train);
Result = [];
for num_of_cluster = 1:20
centroid = kmeans(Train_data,num_of_cluster,'distance','sqeuclid');
s = silhouette(Train_data,centroid,'sqeuclid');
Result = [ Result; num_of_cluster mean(s)];
end
plot( Result(:,1),Result(:,2),'r*-.');`
Результирующий график приведен ниже с xaxis в качестве номера кластера и среднего значения yaxis для силуэта .
Как мне интерпретировать этот график? Как из этого определить номер кластера?
Ответы:
Ответ Сергея содержит критическую точку, которая заключается в том, что коэффициент силуэта количественно определяет качество достигнутой кластеризации - поэтому вам следует выбрать количество кластеров, которое максимизирует коэффициент силуэта.
Длинный ответ заключается в том, что лучший способ оценить результаты ваших усилий по кластеризации - это начать с фактического изучения - человеческого осмотра - сформированных кластеров и принятия решения на основе понимания того, что представляют данные, что представляет собой кластер, и что кластеризация предназначена для достижения.
Существует множество количественных методов оценки результатов кластеризации, которые следует использовать в качестве инструментов, с полным пониманием ограничений. Они имеют тенденцию быть довольно интуитивными по своей природе и, таким образом, имеют естественную привлекательность (например, проблемы с кластеризацией в целом).
Примеры: масса кластера / радиус / плотность, когезия или разделение между кластерами и т. Д. Эти концепции часто объединяются, например, отношение разделения к когезии должно быть большим, если кластеризация прошла успешно.
Способ измерения кластеризации определяется типом используемых алгоритмов кластеризации. Например, измерение качества полного алгоритма кластеризации (в котором все точки помещаются в кластеры) может сильно отличаться от измерения качества алгоритма нечеткой кластеризации на основе порогов (в котором некоторая точка может быть оставлена некластеризованной как «шум»). ).
Коэффициент силуэта является одной из таких мер. Это работает следующим образом:
Для каждой точки p сначала найдите среднее расстояние между p и всеми другими точками в том же кластере (это мера сцепления, назовите его A). Затем найдите среднее расстояние между p и всеми точками в ближайшем кластере (это мера отделения от ближайшего другого кластера, назовите его B). Коэффициент силуэта для p определяется как разность между B и A, деленная на большее из двух (max (A, B)).
Мы оцениваем коэффициент кластера каждой точки и из этого мы можем получить «общий» средний коэффициент кластера.
Интуитивно мы пытаемся измерить пространство между кластерами. Если сцепление кластера хорошее (А мало) и хорошее разделение кластера (В велико), числитель будет большим и т. Д.
Я построил пример здесь, чтобы продемонстрировать это графически.
На этих графиках одни и те же данные представлены пять раз; цвета обозначают кластеры, созданные кластеризацией с помощью k-средних, с k = 1,2,3,4,5. То есть я заставил алгоритм кластеризации разделить данные на 2 кластера, затем на 3 и т. Д. И соответствующим образом раскрасить график.
График силуэта показывает, что коэффициент силуэта был наивысшим при k = 3, что предполагает оптимальное количество кластеров. В этом примере нам повезло, что мы можем визуализировать данные, и мы можем согласиться с тем, что три кластера действительно лучше всего отражают сегментацию этого набора данных.
Если бы мы не смогли визуализировать данные, возможно, из-за более высокой размерности, силуэтный график все равно дал бы нам предложение. Тем не менее, я надеюсь, что мой довольно многословный ответ здесь также указывает на то, что это «предложение» может быть очень недостаточным или просто неверным в определенных сценариях.
источник
the average silhouette witdh "suggestion" could be very insufficient or just plain wrong in certain scenarios.
вы утверждаете.Взгляните на панель инструментов Cluster Validity Analysis (CVAP) и некоторые материалы (ссылки) из CVAP:
Вы также можете проверить этот (простой) инструмент для оценки количества кластеров
Просто взгляните на примеры обоих наборов инструментов (вы также можете использовать другие методы проверки кластера)
источник
Я изучал то же самое сегодня и нашел здесь интерпретацию . Это логично, но я не уверен, можем ли мы слепо применять интерпретацию для наших наборов данных. Итак, эта статья говорит о следующем:
Тем не менее, кажется, что мы можем использовать ширину силуэта, чтобы поймать выбросы. В задаче кластеризации документов, которую я сейчас выполняю, задачи с отрицательной шириной силуэта являются определенными выбросами (при перекрестной проверке с их семантическим значением). Я не уверен, улучшится ли эта ширина после удаления выбросов (опять же, это логично, но я сам этого не делал).
источник
Если вы пытаетесь выбрать количество кластеров для обучения без учителя, то, возможно, вы можете попробовать сделать что-то вроде:
http://scikit-learn.org/stable/auto_examples/cluster/plot_kmeans_silhouette_analysis.html
Они используют больше, чем просто среднее значение (они используют распределение), но это имеет смысл. Кажется, он предпочитает кластеры меньшего размера, но, возможно, вы могли бы попробовать это с некоторыми сгенерированными данными и посмотреть, работает ли?
Кроме того, вы можете проверить эту бумагу-
http://www.sciencedirect.com/science/article/pii/0377042787901257
источник