Давайте разберемся с кластеризацией K-средних без сложной математики!

1.1 Основная идея K-Means

K-Means — это неконтролируемый метод машинного обучения, основная идея которого состоит в том, чтобы каким-то образом сгруппировать (или сгруппировать) записи или точки данных на основе определенных функций, чтобы каждая группа содержала записи, очень похожие друг на друга, но менее похожие на записи. других групп. Здесь под записью или точками данных я просто подразумеваю одну строку вашего набора данных, а под функциями Я имею в виду столбцы вашего набора данных.

Здесь важно отметить одну важную вещь: группируя записи, мы на самом деле не знаем, какой ярлык (или имя) можно присвоить каждой группе?или какие или какие записи будут сгруппированы вместе? Это делает метод K-Means неконтролируемым методом машинного обучения.

После того, как записи сгруппированы вместе, мы можем случайным образом проверить некоторые записи из каждой группы и попытаться понять, какие записи хранятся вместеи/или Можно ли дать этой группе имя на основе записей в этой конкретной группе? Таким образом, мы можем выполнить этот тип ручной оценки (иногда называемой "качественной проверкой"), чтобы понять, как K-Means ведет себя с нашими данными. Однако, поскольку это ручная проверка, это может быть невозможно сделать, если у вас большое количество групп или большое количество записей в каждой группе.

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

Кроме того, не существует идеального метода для определения количества групп (#groups или #clusters или K в K-средних) для ваших данных. Иногда знание предмета помогает определить значение K , но так может быть не всегда!

1.2 Давайте разберемся на примере

Представьте, что вы наняты университетом для изучения доходов студентов после выпуска. Все предыдущие попытки сделать это со стороны университета не увенчались успехом! Критериями (или характеристиками), которые университет должен был решить для решения вышеупомянутой проблемы, были: средний балл студента, баллы SAT, баллы GRE и многие другие. К сожалению, эти критерии не помогли решить проблему.

Итак, вы придумали что-то уникальное: вы обратились к выпускникам и спросили их следующее: «В среднем, сколько часов вы тратили на обучение в семестр во время обучения по программе получения степени?». По сути, ваша идея заключалась в том, чтобы понять модели доходов путем группирования студентов на основе часов, которые они потратили на обучение в течение определенного семестра. Важно помнить: мы непрогнозируем доход на основе часов обучения, а просто пытаемся понять группы, если они существуют. Вы получили ~1000 анонимных ответов, и ваш примерный набор данных выглядит следующим образом (предположим, что их программа на получение степени состояла всего из 2 семестров!!):

Теперь вы не знаете, сколько групп (или кластеров) может быть основано на этих часах, чтобы понять структуру дохода. То есть для решения задачи может хватить всего двух групп — высокодоходных и низкодоходных или трех групп — высоко-, средне-, низкодоходных — или может быть достаточно четырех групп — очень высоко-, высоко-, низко- и очень низкий доход (в 1.1 я упомянул, что мы фактически заранее не знаем названия групп, но здесь я называю их для простоты понимания). Кроме того, студент может принадлежать только к одной группе. Итак, возникает вопрос: какое оптимальное количество групп (или кластеров) требуется для наилучшего описания данных?

Затем вы приступили к реализации алгоритма K-средних, используя ваш любимый язык программирования. Как я упоминал ранее, идеального способа оценить качество кластеров не существует. Итак, вы определили свой критерий (на практике это может даже не понадобиться). Что вы делаете: выполняете K-Means с #clusters = 2, что означает разделение всех учащихся на два отдельных кластера.

НЕОБЯЗАТЕЛЬНО: Некоторые технические подробности о предыдущем абзаце: когда вы запускаете K-Means, он случайным образом объявляет 2 точки с некоторым набором координат (которые будут центроидами двух кластеров). ) в n-мерном пространстве (n = #features). Затем он вычисляет расстояние между каждой записью набора данных и этими двумя центроидами. И, наконец, помещает запись в кластер с ближайшим центром тяжести в зависимости от расстояния.

Теперь, поскольку первоначальное объявление двух центроидов было случайным, мы не обязательно можем получить хорошее качество кластеризации. Итак, K-Means делает следующее: он посещает каждый кластер один за другим и находит новый центроид для каждого кластера, усредняя значения точек данных в этом конкретном кластере. Таким образом, мы получаем новый набор местоположений для двух центроидов, а затем он пересчитывает расстояние между каждой записью и новыми центроидами и помещает записи в ближайший кластер.

Этот процесс повторяется много раз, пока размещение (или назначение) записей в разные кластеры не перестанет меняться. И весь процесс остается одинаковым для любого количества кластеров и функций.

Затем найдите среднее количество часов, которые студенты, попадающие в один и тот же кластер, изучили во время обучения по программе на получение степени. То есть среднее количество часов (M_1) всех студентов, попавших в кластер-1, и столько же для кластера-2 (M_2). Скажем, из этого базового анализа вы обнаружите, что между M_1 и M_2 нет большой разницы. Другими словами, учащиеся, попадающие в разные кластеры, каким-то образом учились более или менее одинаковое количество часов (при условии, что в данных нет выбросов!). Таким образом, эта кластеризация не даст вам никакой связи между зарплатой студентов и часами, которые они учились. Другими словами, вы, вероятно, не сможете разделить учащихся, просто используя два кластера (или, в данном случае, две группы по доходам).

И теперь ваша цель — максимизировать разницу между средними значениями часов разных кластеров. В конечном итоге это приводит к увеличению: несходства между кластерами (с точки зрения среднего количества часов) и сходства внутри кластера.

Затем вы делаете K-Means с #clusters = 3 и получаете: M_1, M_2 и M_3. Проведите качественную проверку, как и раньше, и, если она вас не удовлетворит, увеличьте количество кластеров еще больше. Допустим, когда вы реализовали K-Means с #clusters = 5, вы получили довольно хорошие результаты, то есть между кластерами существовала значительная разница в среднем количестве часов, которые студенты изучили в течение каждого семестра. В этом примере 5 кластеров могут обозначать пять групп доходов, таких как: очень высокий, высокий, средний, низкий и очень низкий доход (и это вы, безусловно, можете проверить, случайно взглянув на доход некоторых студентов из каждого кластера в данных).

Ваш вывод или предложение университету может быть следующим: студенты, которые в среднем тратят очень много часов на учебу, зарабатывают намного больше по сравнению со студентами, которые тратят меньше часов на учебу. Другими словами, предположим, что студенты, которые потратили много времени на учебу в течение семестра, попадают в группу 1, а те, кто потратил на учебу очень мало времени, попадают в группу 5. Это может означать, что средняя заработная плата студентов в кластере-1 довольно высока по сравнению со студентами в кластере-5.

Плюсы K-средних:

  1. Это простая техника для понимания. Даже с учетом математики!
  2. Довольно быстро для небольших наборов данных.

Минусы K-средних:

  1. Для больших наборов данных и большого количества функций это становится дорогостоящим в вычислительном отношении.
  2. Если набор данных разреженный, мы можем не получить кластеризацию хорошего качества.
  3. Иногда трудно определить количество кластеров для K-средних.
  4. Он чувствителен к выбросам, поэтому вам следует подумать о масштабировании своих функций перед внедрением K-средних.
  5. Поскольку начальное объявление центроидов является случайным, мы можем закончить с разными назначениями записей в разные кластеры каждый раз, когда мы запускаем K-Means. То есть при первом полном прогоне, если какие-то записи попадают в кластер-1, то при следующем прогоне они могут не оказаться в том же кластере.

Примечания:

  1. На YouTube существует множество видеороликов, блогов и статей, объясняющих K-средние математически, так что не стесняйтесь гуглить их!
  2. Я использовал слова группы и кластеры как синонимы.
  3. Критерий, который мы определили для оценки производительности K-Means, является необязательным (или вы можете определить любой критерий на основе вопроса, на который вы пытаетесь ответить). Причина, по которой это было сделано здесь, заключалась в том, чтобы: прийти к какому-то заключению и интерпретировать результаты, поскольку интерпретация является ключом к четкому общению.

Я надеюсь, что эта статья помогла вам понять K-средние без какой-либо сложной математики!