Выбор подходящей метрики сходства и оценка достоверности модели кластеризации k-средних - PullRequest
4 голосов
/ 12 ноября 2011

Я реализовал кластеризацию k-средних для определения кластеров в 300 объектах.Каждый мой объект имеет около 30 измерений.Расстояние рассчитывается с использованием евклидовой метрики.

Мне нужно знать

  1. Как определить, правильно ли работают мои алгоритмы?У меня не может быть графика, который даст некоторое представление о правильности моего алгоритма.
  2. Является ли евклидово расстояние правильным методом для вычисления расстояний?Что если у меня 100 измерений вместо 30?

Ответы [ 4 ]

12 голосов
/ 14 ноября 2011

Эти два вопроса в ОП являются отдельными темами (т. Е. Нет совпадений в ответах), поэтому я постараюсь отвечать на них по одному, начиная с пункта 1 в списке.

Как бы я определил, правильно ли работают мои [кластеризованные] алгоритмы?

k-средних, как и другие неконтролируемые методы ML, не хватает хорошего набора диагностических тестов для ответа на такие вопросы«Являются ли кластерные назначения, возвращаемые k-средними, более значимыми для k = 3 или k = 5?»

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

межцентровое разделение / внутрикластерная дисперсия

По мере того, как значение этого отношения увеличивается, качество вашего результата кластеризации увеличивается.

Это интуитивно понятно.Первая из этих метрик заключается в том, насколько далеко каждый кластер отделен от других (измеряется в соответствии с центрами кластеров)?

Но межцентроидное разделение само по себе не рассказывает всей истории, потому что два алгоритма кластеризации могут возвращать результаты, имеющие одинаковое межцентровое разделение, хотя один явно лучше, потому что кластеры "более узкие" (т. Е.меньшие радиусы);другими словами, края кластера имеют большее разделение.Вторая метрика - внутрикластерная дисперсия - объясняет это.Это просто средняя дисперсия, рассчитанная на кластер.

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

Желаемый результат - плотные (маленькие) кластеры, каждый из которых находится далеко от других.

Расчет прост:

Для Межцентровое разделение :

  • рассчитать попарное расстояние между центрами кластеров;затем

  • вычислите медиану этих расстояний.

Для внутрикластерная дисперсия :

  • для каждого кластера, рассчитать расстояние до каждой точки данных в данномкластер из его кластерного центра;далее

  • (для каждого кластера) вычислим дисперсию последовательности расстояний от шага выше;затем

  • усредните эти значения дисперсии.


Это мой ответ на первый вопрос.Вот второй вопрос:

Является ли евклидово расстояние правильным методом для вычисления расстояний?Что если у меня есть 100 измерений вместо 30?

Во-первых, простой вопрос - является ли евклидово расстояние действительной метрикой при увеличении размеров / элементов?

Евклидово расстояние отлично масштабируется - работает для двух измерений или двух тысяч.Для любой пары точек данных:

  • поэлементно вычитать их векторы признаков,

  • квадрат каждого элемента в этом векторе результатов,

  • сумма результата,

  • взять квадратный корень из этого скаляра.

Нигде в этой последовательностирасчеты зависят от масштаба.

Но является ли евклидово расстояние подходящим показателем подобия для вашей задачи, зависит от ваших данных.Например, это чисто числовой (непрерывный)?Или он также имеет дискретные (категориальные) переменные (например, пол? M / F). Если одним из ваших измерений является «текущее местоположение» и из 200 пользователей 100 имеют значение «Сан-Франциско», а другие 100 имеют «Бостон ", вы не можете сказать, что ваши пользователи в среднем откуда-то из Канзаса, но это как раз то, что будет делать евклидово расстояние.

В любом случае, поскольку мы ничего об этом не знаем, я просто дам вам простую блок-схему, чтобы вы могли применить ее к своим данным и определить соответствующую метрику сходства.

Чтобы определить подходящую метрику сходства с учетом ваших данных:

enter image description here

1 голос
/ 16 июля 2018

Евклидово расстояние - это интуитивное и «нормальное» расстояние между непрерывной переменной.Это может быть неуместно, если слишком шумно или если данные имеют негауссовское распределение.

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

Существует множество других метрик расстояния для конкретных задач (например, расстояние Брея-Кертиса для данных счета).Возможно, вы захотите попробовать некоторые расстояния, реализованные в pdist, из модуля python scipy.spatial.distance.

1 голос
/ 23 ноября 2011

Не могли бы вы просто попробовать sum | xi - yi | вместо этого, если (XI - YI) ^ 2 в вашем коде и посмотреть, если это имеет большое значение?

У меня не может быть графика, который даст некоторое представление о правильности моего алгоритма.

Пара возможностей:

Кстати, scipy.spatial.cKDTree может легко дать вам 3 ближайших соседа в каждой точке, в р = 2 (евклидово) или р = 1 (манхэттен, L1), чтобы посмотреть. Это быстро до ~ 20 дней, и с ранним отключением работает даже в 128 дней.


Добавлено: Мне нравится Косинусное расстояние в больших размерах; см. евклидово расстояние-обычно-не-хорошо-для-разреженных-данных , почему.
1 голос
/ 13 ноября 2011
  1. Евклидово расстояние хорошо, когда размеры сопоставимы и в одном масштабе.Если одно измерение представляет длину, а другое - вес предмета - евклидово должно быть заменено на взвешенное.

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

...