K означает кластеризацию в R: пошаговое руководство с примером
Опубликовано: 2020-02-17Как специалист по данным, вы будете много заниматься кластеризацией. Существует множество доступных алгоритмов кластеризации, и вы должны хорошо разбираться в их использовании. В этой статье мы обсудим популярный алгоритм кластеризации K-средних и посмотрим, как он используется в R.
Вы узнаете основную теорию кластеризации K-средних в R и то, как она используется. Мы также обсудили практический пример позже в статье. Не забудьте добавить эту статью в закладки для дальнейшего использования. Узнайте больше о кластерном анализе в Data Mining.
Прежде чем мы начнем обсуждать K означает кластеризацию в R, мы должны взглянуть на типы существующих алгоритмов кластеризации, чтобы вы могли лучше понять, как этот алгоритм работает с ними.
Читайте: Лучшие библиотеки R в науке о данных
Оглавление
Типы кластеризации
Когда вы группируете несколько объектов таким образом, что объекты, наиболее похожие друг на друга, находятся в тесном кластере, это называется кластеризацией. Расстояние между объектами может иметь отношение к их сходству. Сходство показывает силу связи между двумя разными объектами в науке о данных. Кластеризация — популярный метод интеллектуального анализа данных. Кластеризация находит применение во многих отраслях и областях, включая анализ изображений, машинное обучение, сжатие данных, распознавание образов и многие другие.
Кластеризация бывает двух видов — жесткая и мягкая. Кратко обсудим каждый из них.
- В жестком кластере точка данных будет полностью принадлежать кластеру или не принадлежать ему вообще. Нет промежуточного.
- В мягком кластере объект данных может быть связан с более чем одним кластером одновременно из-за некоторой вероятности или вероятности.
Изучите онлайн -курс по науке о данных в лучших университетах мира. Участвуйте в программах Executive PG, Advanced Certificate Programs или Master Programs, чтобы ускорить свою карьеру.
Типы алгоритмов кластеризации
Так же, как существуют разные типы кластеров, существуют и разные типы алгоритмов кластеризации. Вы можете различать алгоритмы на основе их кластерной модели. Это означает, что вы можете различать их по тому, как они образуют кластеры. Если мы начнем говорить о всевозможных алгоритмах кластеризации, это руководство станет слишком длинным и далеким от сути. Итак, мы обсудим только несколько известных типов алгоритмов кластеризации. Существуют алгоритмы кластеризации на основе связности, центроида, плотности и распределения.
Основная концепция K-средних
Основная концепция K-средних довольно проста. K-средние связаны с определением кластеров таким образом, чтобы общая вариация внутри кластера была минимально возможной. Существует множество алгоритмов k-средних. Наиболее распространенным алгоритмом k-средних является алгоритм Хартигана-Вонга, который утверждает, что общая внутрикластерная вариация равна сумме квадратов евклидовых расстояний между центроидами и их элементами:
W( C k )= x i C k ( x i – k ) 2
Здесь x i относится к точке данных, которая принадлежит кластеру C k , а k относится к среднему значению точек данных, присутствующих в кластере Ck.
Значение x i должно быть таким, чтобы сумма квадратов расстояния между x i и k была минимальной.
Что такое алгоритм К-средних?
Чтобы использовать алгоритм, нам сначала нужно указать количество кластеров K, которые будут присутствовать в нашем результате. Алгоритм сначала выбирает K объектов случайным образом, чтобы они действовали как центры начальных кластеров. Мы называем эти объекты кластерными центроидами или средними значениями. Затем мы присваиваем оставшимся объектам их ближайшие центроиды. Евклидово расстояние между центроидами кластера и объектами определяет, насколько они близки.
После того, как мы присвоили объектам их соответствующие центроиды, алгоритм вычисляет среднее значение кластеров. После этого повторного вычисления мы перепроверяем наблюдения, чтобы увидеть, могут ли они быть ближе к другому кластеру. Затем мы соответствующим образом переназначаем объекты центроидам. Мы продолжаем повторять эти шаги до тех пор, пока не остановится назначение кластеров. Это означает, что мы прекращаем повторять итерации, когда кластеры, сформированные на итерации, такие же, как и на предыдущей итерации.
Использование кластеризации K-средних (пример)
Теперь, когда вы знаете, что такое алгоритм K-средних в R и как он работает, давайте обсудим пример для лучшего понимания. В этом примере мы сгруппируем клиентов организации, используя базу данных оптовых клиентов. Данные для этой задачи доступны в репозитории машинного обучения Berkley UCI. Вы можете проверить это здесь .
Сначала мы прочитаем данные. А затем получить его резюме. Прочитав данные и просмотрев их сводку, вы увидите, что между ведущими потребителями в разных категориях есть существенные различия. Вы найдете некоторые выбросы, которые вы не можете легко удалить с помощью нормализации (или масштабирования). Имея эти данные, компания захочет узнать, что чаще всего покупают их средние клиенты. Это потому, что у компании должно быть хорошее представление о том, что покупают ее лучшие клиенты.
Чтобы создать кластер клиентов среднего уровня, мы должны сначала избавиться от верхнего слоя клиентов из каждой категории. Итак, мы удалим 5 лучших и создадим новый набор. Вот как мы это сделаем:
top.n.custs <- function (data,cols,n=5) { #Требуется некоторый фрейм данных и верхний N для удаления
idx.to.remove <-integer(0) # Инициализировать вектор для хранения удаляемых клиентов
for (c in cols){ # Для каждого столбца данных, которые мы передали этой функции
col.order <-order(data[,c],decreasing=T) #Сортировать столбец «c» в порядке убывания (больше вверху)
#Order возвращает отсортированный индекс (например, строки 15, 3, 7, 1, …), а не фактические отсортированные значения.
idx <-head(col.order, n) # Берем первые n отсортированного столбца C в
idx.to.remove <-union(idx.to.remove,idx) # Объединить и удалить дубликаты идентификаторов строк, которые необходимо удалить
}
return(idx.to.remove) #Возвращает индексы удаляемых клиентов
}
top.custs <-top.n.custs(данные,столбцы=3:8,n=5)
length(top.custs) #Сколько клиентов необходимо удалить?
data[top.custs,] # Изучите доступных клиентов
data.rm.top<-data[-c(top.custs),] #Удаление необходимых клиентов
С этим новым файлом мы можем начать работу над нашим кластерным анализом. Для выполнения кластерного анализа мы будем использовать следующий код:

set.seed(76964057) # Установить начальное значение для воспроизводимости
k <-kmeans(data.rm.top[,-c(1,2)], center=5) #Создать 5 кластеров, Удалить столбцы 1 и 2
k$centers #Показать центры кластеров
table(k$cluster) # Укажите количество точек данных в каждом кластере
Когда вы запустите этот код в данной базе данных, вы получите следующие результаты:
- Первый кластер будет иметь высококачественные моющие средства, но небольшое количество свежих продуктов питания.
- В третьем кластере будет больше свежего продукта
Вам нужно будет использовать внутри и между для подробной интерпретации результатов. k$withinss равно сумме квадратов расстояния между каждым объектом данных от центра кластера. Чем ниже диапазон, тем лучше будет результат. Если мера в пределах ваших данных высока, это означает, что присутствует много выбросов, и вам необходимо выполнить очистку данных. k$betweenss — это сумма квадратов расстояний между различными центрами кластеров. Расстояние между центрами кластеров должно быть как можно больше.
Читайте: 6 наиболее часто используемых структур данных в R
Вы должны воспользоваться помощью проб и ошибок, чтобы получить наиболее точные результаты. Для этого вам нужно будет попробовать различные значения для K. Если график ваших результатов не показывает приращение в пределах ваших кластеров, эта точка будет наиболее подходящим значением для K. Вы можете найти значение K через следующий код:
rng<-2:20 #K от 2 до 20
trys <-100 #Запустить алгоритм K-средних 100 раз
avg.totw.ss <-integer(length(rng)) #Установить пустой вектор для хранения всех точек
for(v in rng){ # Для каждого значения переменной диапазона
v.totw.ss <-integer(tries) #Установить пустой вектор для хранения 100 попыток
для (я в 1: попытки) {
k.temp <-kmeans(data.rm.top,centers=v) #Выполнить kmeans
v.totw.ss[i] <-k.temp$tot.withinss#Сохранить общее количество
}
avg.totw.ss[v-1] <-mean(v.totw.ss) #Усреднение 100 всего в пределах
}
plot(rng,avg.totw.ss,type=”b”, main=”Всего внутри SS по разным K”,
ylab="Среднее значение суммы квадратов",
xlab="Значение К")
Вот и все. Теперь вы можете использовать график, полученный из этого кода, для получения наилучшего значения K и использовать его для получения требуемых результатов. Используйте этот пример, чтобы проверить свои знания о кластеризации K-средних в R. Вот весь код, который мы использовали в примере:
data <-read.csv("Данные оптовых клиентов.csv",header=T)
сводка (данные)
top.n.custs <- function (data,cols,n=5) { #Требуется некоторый фрейм данных и верхний N для удаления
idx.to.remove <-integer(0) # Инициализировать вектор для хранения удаляемых клиентов
for (c in cols){ # Для каждого столбца данных, которые мы передали этой функции
col.order <-order(data[,c],decreasing=T) #Сортировать столбец «c» в порядке убывания (больше вверху)
#Order возвращает отсортированный индекс (например, строки 15, 3, 7, 1, …), а не фактические отсортированные значения.
idx <-head(col.order, n) # Берем первые n отсортированного столбца C в
idx.to.remove <-union(idx.to.remove,idx) # Объединить и удалить дубликаты идентификаторов строк, которые необходимо удалить
}
return(idx.to.remove) #Возвращает индексы удаляемых клиентов
}
top.custs <-top.n.custs(данные,столбцы=3:8,n=5)
length(top.custs) #Сколько клиентов нужно удалить?
data[top.custs,] #Исследуйте клиентов
data.rm.top <-data[-c(top.custs),] #Удалить клиентов
set.seed(76964057) # Установить начальное значение для воспроизводимости
k <-kmeans(data.rm.top[,-c(1,2)], center=5) #Создать 5 кластеров, Удалить столбцы 1 и 2
k$centers #Показать центры кластеров
table(k$cluster) #Укажите количество точек данных в каждом кластере
rng<-2:20 #K от 2 до 20
trys<-100 #Запустить алгоритм K-средних 100 раз
avg.totw.ss<-integer(length(rng)) #Установить пустой вектор для хранения всех точек
for(v in rng){ # Для каждого значения переменной диапазона
v.totw.ss<-integer(tries) #Установить пустой вектор для хранения 100 попыток
для (я в 1: попытки) {
k.temp<-kmeans(data.rm.top,centers=v) #Выполнить kmeans
v.totw.ss[i]<-k.temp$tot.withinss#Сохранить общее количество в пределах
}
avg.totw.ss[v-1]<-mean(v.totw.ss) #Усреднение 100 всего в пределах
}
plot(rng,avg.totw.ss,type=”b”, main=”Всего внутри SS по разным K”,
ylab="Среднее значение суммы квадратов",
xlab="Значение К")
Заключение
Надеемся, вам понравилось это руководство. Мы постарались сделать его кратким и всеобъемлющим. Если у вас есть какие-либо вопросы об алгоритме K-средних, не стесняйтесь спрашивать нас. Мы будем рады ответить на ваши вопросы.
Если вам интересно узнать о науке о данных, ознакомьтесь с программой IIIT-B & upGrad Executive PG по науке о данных, которая создана для работающих профессионалов и предлагает более 10 тематических исследований и проектов, практические семинары, наставничество с отраслевыми экспертами, 1 -на-1 с отраслевыми наставниками, более 400 часов обучения и помощи в трудоустройстве в ведущих фирмах.
Каковы недостатки использования K-средних?
Выбросы могут тянуть центроиды, или выбросам может быть присвоен отдельный кластер, а не игнорироваться. Поскольку K-средние являются стохастическими, они не могут гарантировать, что будет найдено глобальное оптимальное решение для кластеризации. В действительности выбросы и зашумленные данные могут сделать алгоритм очень чувствительным. Перед группировкой подумайте об исключении или сокращении выбросов. При группировке данных с переменными размерами и плотностью у K-средних возникают трудности. Вы должны обобщить K-средних для кластеризации таких данных. Даже если они явно принадлежат одному и тому же кластеру, алгоритм k-средних не позволяет точкам данных, которые находятся далеко друг от друга, совместно использовать один и тот же кластер.
Что такое метод локтя в K-средствах?
Метод k-средних в значительной степени зависит от поиска подходящего количества кластеров. Локтевой подход — широко используемый метод определения наилучшего значения К. Метод локтя выполняет кластеризацию K-средних в наборе данных для диапазона значений K на графике, а затем вычисляет средний балл для всех кластеров для каждого значения K. Оценка искажения, которая представляет собой сумму квадратов расстояний от каждой точки до назначенного ему центра, вычисляется по умолчанию. Другие модели, управляемые данными, такие как количество основных компонентов для характеристики набора данных, могут использовать тот же метод для определения количества параметров.
Как мы можем найти выбросы в K-средних?
Выбросы в кластеризации K-средних могут быть обнаружены с использованием как метода, основанного на расстоянии, так и метода, основанного на кластерах. Выбросы обнаруживаются с помощью дендрограмм в случае иерархической кластеризации. Цель проекта — обнаружить и устранить выбросы, чтобы сделать кластеризацию более точной. Данные разбиваются на K групп путем распределения их по ближайшим центрам кластеров в подходе идентификации выбросов на основе K-средних. Затем мы можем рассчитать расстояние или несходство между каждым элементом и центром его кластера и выбрать выбросы с наибольшим расстоянием. Поскольку экстремальные значения могут быстро повлиять на среднее значение, метод кластеризации K-средних чувствителен к выбросам.