Внедрение кластеризации K-средних для набора данных о преступности



Внедрение кластеризации Kmeans в наборе данных о преступности США

В этом блоге вы узнаете, что такое кластеризация K-средних и как ее можно применить к криминальным данным, собранным в различных штатах США. Данные содержат такие преступления, как нападение, убийство и изнасилование при арестах на 100 000 жителей в каждом из 50 штатов США в 1973 году. Помимо анализа данных, вы также узнаете о:

    • Нахождение оптимального количества кластеров.
    • Минимизация искажений
    • Создание и анализ изгиба локтя.
  • Понимание механизма алгоритма k-средних.

Начнем с анализа. Данные выглядят так:





dataset

Нажмите на изображение, чтобы загрузить этот набор данных

Нужен этот набор данных? Нажмите на изображение выше, чтобы загрузить его.



Сначала подготовим данные для анализа. Для этого мы должны удалить все значения NA, которые могут присутствовать в данных, и преобразовать данные в матрицу.

> преступление0 преступление str (преступление) число [1:50, 1: 4] 13.2 10 8.1 8.8 9 7.9 3.3 5.9 15.4 17.4 ... - attr (*, 'dimnames') = Список из 2 .. $: chr [1 : 50] 'Алабама' Аляска 'Аризона' Арканзас ... .. $: chr [1: 4] 'Убийство' Нападение 'UrbanPop' Изнасилование

Возьмем количество кластеров равным 5. Функция Kmeans () принимает входные данные и количество кластеров, в которых данные должны быть кластеризованы. Синтаксис: kmeans (data, k), где k - количество центров кластера.

> cl class (cl) [1] 'kmeans'

Анализ кластеризации:



> str (cl) Список кластеров из 9 $: Именованный int [1:50] 5 3 3 5 3 5 4 5 3 5 ... ..- attr (*, 'names') = chr [1:50] ' Алабама 'Аляска' Аризона 'Арканзас' ... $ center: num [1: 5, 1: 4] 2,95 6,11 12,14 5,59 11,3 ... ..- attr (*, 'dimnames') = Список из 2 .. .. $: chr [1: 5] '1' '2' '3' '4' ... .. .. $: chr [1: 4] 'Murder' 'Assault' 'UrbanPop' 'Изнасилование '$ totss: num 355808 $ withinss: num [1: 5] 4548 2286 16272 1480 3653 $ tot.withinss: num 28240 $ betweenss: num 327568 $ size: int [1: 5] 10 9 14 10 7 $ iter: int 3 $ ifault: int 0 - attr (*, 'class') = chr 'kmeans'

Функция str () дает структуру kmeans, которая включает в себя различные параметры, такие как insidess, betweenss и т. Д., Анализируя которые, вы можете узнать производительность kmeans.

betweenss: Между суммой квадратов, т.е. внутрикластерным сходством

insidess: в пределах суммы квадратов, т.е. межкластерное сходство

totwithinss: Сумма всех внутри кластеров, то есть общее внутрикластерное сходство.

Хорошая кластеризация будет иметь более низкое значение insidess и более высокое значение betweenss, которое зависит от количества кластеров «k», выбранных изначально. Давайте посмотрим, как мы можем найти оптимальное значение «k».

Нахождение оптимального значения «k»

Оптимальное значение «k» - это значение, которое дает нам сходящийся набор кластеров с минимальным искажением. Чем больше искажение, тем хуже будут образовываться кластеры.

Искажение:

Искажение может быть рассчитано с точки зрения «внутри» от каждого из кластеров. Чем меньше значение «внутри» конкретного кластера, тем он более густонаселенным, следовательно, искажения минимальны.

kmeans.wss.k<- function(crime, k){ km = kmeans(crime, k) return (km$tot.withinss) }

Эта функция принимает данные и значение k и возвращает для них «km $ totwithinss». «Km $ totwithinss» - это общая сумма квадратов внутри кластера, включая, таким образом, внутри всех 5 созданных кластеров, т.е.сумма (в пределах). Чем выше значение «km $ totwithinss», тем больше будет искажение.

Для k = 5 внутренний размер равен 24417,02.

> kmeans.wss.k (криминал, 5) [1] 24417.02

Увеличим значение k с 5 до 10 и заметим разницу.

> kmeans.wss.k (криминал, 10) [1] 11083.04

Видно, что с увеличением значения K искажение уменьшается.

Мы можем взять различные значения «km $ totwithinss» и изобразить их на графике, чтобы найти взаимосвязь между искажением и значением k. За нас это делает следующая функция:

> kmeans.dis maxk = 10> dis = kmeans.dis (Crime, maxk)> plot (1: maxk, dis, type = 'b', xlab = 'Number of Clusters', + ylab = 'Distortion', + col = 'синий')

Да Да !!! Таким образом, у нас есть знаменитый изгиб локтя.

Кривая локтя:

Это график между «k», количеством кластеров и «totalwithinss» (или искажением) для каждого значения k. Вы можете видеть, когда количество кластеров меньше, искажение постепенно уменьшается, но по мере того, как мы продолжаем увеличивать значение k, скорость уменьшения значений искажения становится постоянной.

Это значение k, при превышении которого степень искажения становится постоянной, является оптимальным значением. Здесь k = 4.

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

> библиотека (анимация)> cl<- kmeans.ani(crime, 4)

Алгоритм кластеризации Kmeans:

Давайте разберемся с алгоритмом, по которому работает кластеризация k-средних:

Шаг 1. Если k = 4, мы выбираем 4 случайные точки и предполагаем, что они являются центрами кластеров для создаваемых кластеров.

Шаг 2. Мы берем случайную точку данных из пространства и узнаем ее расстояние от всех 4 центров кластера. Если точка данных находится ближе всего к центру зеленого кластера, она окрашивается в зеленый цвет, и аналогично все точки классифицируются по 4 кластерам.

Шаг 3. Теперь мы вычисляем центроид всех зеленых точек и назначаем эту точку в качестве центра кластера для этого кластера.

Точно так же мы вычисляем центроиды для всех 4 окрашенных (сгруппированных) точек и назначаем новые центроиды в качестве центров кластера.

Шаг №4. Шаги 2 и 3 выполняются итеративно, если только центры кластеров не сходятся в одной точке и больше не перемещаются.


Таким образом, мы достигаем центров сходящихся кластеров.

Видно, что данные разделены на 4 кластера. Центрами кластера являются:

> cl $ center Убийство Нападение UrbanPop Изнасилование Техас 4,740741 104,8519 62,96296 16,10 Луизиана 10,907143 219,9286 71,71429 25,95 Южная Каролина 13,375000 284,5000 46,25000 25,05 Нью-Мексико 11,040000 298,0000 77,60000 32,68

В кластере 4 с центром кластера «Нью-Мексико» высокий уровень преступности и самый высокий уровень населения.

Кластер-3 и кластер-2 - продолжение.

Каждому штату назначается кластер, в зависимости от которого мы теперь можем предсказать его рейтинг преступности. Результат выглядит так:

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

структура данных словаря в Java

Похожие сообщения: