К-медоиды в r: пошаговый пример


Кластеризация — это метод машинного обучения, который пытается найти группы или кластеры наблюдений в наборе данных.

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

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

Кластеризация часто используется в маркетинге, когда предприятия имеют доступ к такой информации, как:

  • Семейный доход
  • Размер семьи
  • Глава семьи Профессия
  • Расстояние до ближайшего населенного пункта

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

Одна из наиболее распространенных форм кластеризации известна как кластеризация k-средних .

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

Что такое кластеризация K-Medoids?

Кластеризация K-медоидов — это метод, при котором мы помещаем каждое наблюдение из набора данных в один из K- кластеров.

Конечная цель состоит в том, чтобы иметь K кластеров, в которых наблюдения внутри каждого кластера очень похожи друг на друга, в то время как наблюдения в разных кластерах сильно отличаются друг от друга.

На практике мы используем следующие шаги для выполнения кластеризации K-средних:

1. Выберите значение К.

  • Во-первых, нам нужно решить, сколько кластеров мы хотим идентифицировать в данных. Часто нам просто нужно протестировать несколько разных значений K и проанализировать результаты, чтобы увидеть, какое количество кластеров кажется наиболее подходящим для конкретной задачи.

2. Случайным образом отнесите каждое наблюдение к начальному кластеру от 1 до K.

3. Выполняйте следующую процедуру, пока назначения кластера не перестанут меняться.

  • Для каждого из K кластеров вычислите центр тяжести кластера. Это вектор p- медиан признаков для наблюдений k- го кластера.
  • Назначьте каждое наблюдение кластеру с ближайшим центроидом. Здесь ближайший определяется с использованием евклидова расстояния .

Техническое примечание:

Поскольку k-medoids вычисляет центроиды кластера, используя медианы, а не средние значения, он имеет тенденцию быть более устойчивым к выбросам, чем k-средние.

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

Кластеризация K-медоидов в R

В следующем руководстве представлен пошаговый пример выполнения кластеризации k-medoids в R.

Шаг 1. Загрузите необходимые пакеты

Сначала мы загрузим два пакета, содержащие несколько полезных функций для кластеризации k-медоидов в R.

 library (factoextra)
library (cluster)

Шаг 2. Загрузите и подготовьте данные

В этом примере мы будем использовать набор данных USArrests , встроенный в R, который содержит количество арестов на 100 000 человек в каждом штате США в 1973 году за убийства , нападения и изнасилования , а также процент населения каждого штата, проживающего в городах. области. , Урбанпоп .

Следующий код показывает, как сделать следующее:

  • Загрузить набор данных USArrests
  • Удалить все строки с пропущенными значениями
  • Масштабируйте каждую переменную в наборе данных так, чтобы ее среднее значение было равно 0, а стандартное отклонение — 1.
 #load data
df <-USArrests

#remove rows with missing values
df <- na. omitted (df)

#scale each variable to have a mean of 0 and sd of 1
df <- scale(df)

#view first six rows of dataset
head(df)

               Murder Assault UrbanPop Rape
Alabama 1.24256408 0.7828393 -0.5209066 -0.003416473
Alaska 0.50786248 1.1068225 -1.2117642 2.484202941
Arizona 0.07163341 1.4788032 0.9989801 1.042878388
Arkansas 0.23234938 0.2308680 -1.0735927 -0.184916602
California 0.27826823 1.2628144 1.7589234 2.067820292
Colorado 0.02571456 0.3988593 0.8608085 1.864967207

Шаг 3. Найдите оптимальное количество кластеров

Чтобы выполнить кластеризацию k-medoid в R, мы можем использовать функцию pam() , которая означает «разбиение вокруг медиан» и использует следующий синтаксис:

pam(данные, k, метрика = «Евклидова», стенд = ЛОЖЬ)

Золото:

  • данные: Имя набора данных.
  • k: количество кластеров.
  • метрика: метрика, используемая для расчета расстояния. По умолчанию используется евклидово значение, но вы также можете указать манхэттенское .
  • стенд: следует ли нормализовать каждую переменную в наборе данных. Значение по умолчанию неверно.

Поскольку мы заранее не знаем, какое количество кластеров является оптимальным, мы создадим два разных графика, которые помогут нам принять решение:

1. Количество кластеров относительно общего количества в сумме квадратов

Сначала мы воспользуемся функцией fviz_nbclust() , чтобы построить график зависимости количества кластеров от суммы квадратов:

 fviz_nbclust(df, pam, method = “ wss ”) 

Оптимальные кластеры для k-медоидов

Общая сумма квадратов обычно всегда будет увеличиваться по мере увеличения количества кластеров. Поэтому, когда мы создаем этот тип графика, мы ищем «колено», где сумма квадратов начинает «изгибаться» или выравниваться.

Точка кривизны графика обычно соответствует оптимальному количеству кластеров. За пределами этой цифры, скорее всего, произойдет переобучение .

На этом графике видно, что имеется небольшой излом или «изгиб» при k = 4 кластерах.

2. Количество кластеров в сравнении со статистикой пробелов

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

Мы можем вычислить статистику разрыва для каждого количества кластеров, используя функцию clusGap() из пакета кластеров , а также построить график зависимости кластеров от статистики разрывов, используя функцию fviz_gap_stat() :

 #calculate gap statistic based on number of clusters
gap_stat <- clusGap(df,
                    FUN = pam,
                    K.max = 10, #max clusters to consider
                    B = 50) #total bootstrapped iterations

#plot number of clusters vs. gap statistic
fviz_gap_stat(gap_stat) 

K-медоиды оптимальное количество кластеров в R

На графике мы видим, что статистика разрывов самая высокая при k = 4 кластерах, что соответствует методу локтя, который мы использовали ранее.

Шаг 4. Выполните кластеризацию K-Medoids с помощью Optimal K.

Наконец, мы можем выполнить кластеризацию k-медоидов в наборе данных, используя оптимальное значение k , равное 4:

 #make this example reproducible
set.seed(1)

#perform k-medoids clustering with k = 4 clusters
kmed <- pam(df, k = 4)

#view results
kmed

              ID Murder Assault UrbanPop Rape
Alabama 1 1.2425641 0.7828393 -0.5209066 -0.003416473
Michigan 22 0.9900104 1.0108275 0.5844655 1.480613993
Oklahoma 36 -0.2727580 -0.2371077 0.1699510 -0.131534211
New Hampshire 29 -1.3059321 -1.3650491 -0.6590781 -1.252564419
Vector clustering:
       Alabama Alaska Arizona Arkansas California 
             1 2 2 1 2 
      Colorado Connecticut Delaware Florida Georgia 
             2 3 3 2 1 
        Hawaii Idaho Illinois Indiana Iowa 
             3 4 2 3 4 
        Kansas Kentucky Louisiana Maine Maryland 
             3 3 1 4 2 
 Massachusetts Michigan Minnesota Mississippi Missouri 
             3 2 4 1 3 
       Montana Nebraska Nevada New Hampshire New Jersey 
             3 3 2 4 3 
    New Mexico New York North Carolina North Dakota Ohio 
             2 2 1 4 3 
      Oklahoma Oregon Pennsylvania Rhode Island South Carolina 
             3 3 3 3 1 
  South Dakota Tennessee Texas Utah Vermont 
             4 1 2 3 4 
      Virginia Washington West Virginia Wisconsin Wyoming 
             3 3 4 4 3 
Objective function:
   build swap 
1.035116 1.027102 

Available components:
 [1] "medoids" "id.med" "clustering" "objective" "isolation" 
 [6] "clusinfo" "silinfo" "diss" "call" "data"          

Обратите внимание, что все четыре центроида кластера являются фактическими наблюдениями в наборе данных. В верхней части вывода мы видим, что четыре центроида представляют собой следующие состояния:

  • Алабама
  • Мичиган
  • Оклахома
  • Нью-Гемпшир

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

 #plot results of final k-medoids model
fviz_cluster(kmed, data = df)

Построение кластеров k-медоидов в R

Мы также можем добавить назначения кластеров каждого состояния в исходный набор данных:

 #add cluster assignment to original data
final_data <- cbind(USArrests, cluster = kmed$cluster)

#view final data
head(final_data)

           Murder Assault UrbanPop Rape cluster
Alabama 13.2 236 58 21.2 1
Alaska 10.0 263 48 44.5 2
Arizona 8.1 294 80 31.0 2
Arkansas 8.8 190 50 19.5 1
California 9.0 276 91 40.6 2
Colorado 7.9 204 78 38.7 2

Полный код R, использованный в этом примере, вы можете найти здесь .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *