вводить
Мне очень нравится работать над задачами обучения без присмотра. Они представляют собой совершенно иную проблему, чем проблема обучения с учителем, и у меня гораздо больше возможностей для экспериментов с имеющимися данными, чем с обучением с учителем. Нет сомнений в том, что большинство разработок и прорывов в области машинного обучения произошло в области неконтролируемого обучения.
Одним из самых популярных методов обучения без учителя является кластеризация. Эту концепцию мы обычно изучаем на заре машинного обучения, и ее легко понять. Я уверен, что вы сталкивались и даже работали над такими проектами, как сегментация клиентов, анализ покупательской корзины и т. д.
Но проблема в том, что кластеризация имеет много аспектов. Он не ограничивается базовыми алгоритмами, которые мы изучили ранее. Это мощная техника обучения без учителя, которую мы можем точно использовать в реальном мире.
Модель смеси Гаусса — это один из алгоритмов кластеризации, который я хочу обсудить в этой статье.
Хотите прогнозировать продажи вашего любимого продукта? Может быть, вы хотите понять отток через призму различных сегментов клиентов. Какой бы метод вы ни использовали, вы обнаружите, что смешанные модели Гаусса очень полезны.
В этой статье мы воспользуемся подходом «снизу вверх». Итак, давайте сначала рассмотрим основы кластеризации, включая краткий обзор алгоритма k-средних. Затем мы углубимся в концепции смешанных моделей Гаусса и реализуем их на Python.
содержание
- Введение в кластеризацию
- Введение в кластеризацию k-средних
- Недостатки кластеризации k-средних
- Знакомство с гауссовскими моделями смесей
- Гауссово распределение
- Алгоритм EM максимизации ожидания
- Максимизация ожиданий гауссовских моделей смесей
- Реализация гауссовских смешанных моделей для кластеризации в Python
Введение в кластеризацию
Прежде чем мы углубимся в суть моделей гауссовских смесей, давайте быстро обновим некоторые основные понятия.
Примечание. Если вы уже знакомы с идеей кластеризации и с тем, как работает алгоритм кластеризации k-средних, вы можете сразу перейти к части 4 «Введение в гауссовские смешанные модели».
Итак, давайте начнем с формального определения основной идеи:
Кластеризация относится к группированию похожих точек данных вместе на основе их атрибутов или характеристик.
Например, если у нас есть группа доходов и расходов людей, мы можем разделить их на следующие группы:
- зарабатывать больше, тратить больше
- Зарабатывай больше, трать меньше
- Зарабатывайте меньше, тратьте меньше
- Зарабатывай меньше, трать больше
Каждая из этих групп имеет схожие характеристики, которые особенно полезны в определенных ситуациях. Например, кредитные карты, автомобильные / жилищные кредиты и т. Д. Простыми словами:
Введение в кластеризацию k-средних
Кластеризация k-средних — это алгоритм, основанный на расстоянии. Это означает, что он пытается сгруппировать ближайшие точки в кластер.
Рассмотрим подробнее, как работает этот алгоритм. Это создаст основы, которые помогут вам понять, где гауссовские смешанные модели вступят в игру позже в этой статье.
Итак, мы сначала определяем количество групп, на которые мы хотим разделить население — это значение k. В зависимости от желаемого количества кластеров или групп мы случайным образом инициализируем k центросом.
Затем эти точки данных назначаются ближайшему к нему кластеру. Затем обновите центр, переназначив точки данных. Этот процесс повторяется до тех пор, пока положение центра кластера не перестанет меняться.
Примечание. Это краткий обзор кластеризации k-средних, и его должно быть достаточно для этой статьи.
Недостатки кластеризации k-средних
Концепция кластеризации методом k-средних звучит великолепно, не так ли?Она проста для понимания, относительно проста в реализации и может применяться во многих случаях использования. Но есть некоторые подводные камни и ограничения, о которых мы должны знать.
Давайте возьмем пример доходов и расходов, который мы видели выше. Алгоритм k-средних работает нормально, не так ли? Подождите — если вы присмотритесь, то увидите, что все кластеры имеют круглую форму. Это связано с тем, что центроиды кластеров итеративно обновляются с использованием среднего значения.
Теперь рассмотрим следующий пример, где распределение точек не круговое. Как вы думаете, что произойдет, если мы используем кластеризацию k-средних для этих данных?Он по-прежнему пытается сгруппировать точки данных по кругу. Это не здорово.
Поэтому нам нужен другой способ назначения кластеров точкам данных. Поэтому мы больше не будем использовать модели, основанные на расстоянии, а модели, основанные на распределении. Модели гауссовых смесей Представляем модели на основе распределения!
Введение в модели гауссовских смесей
Гауссовы смешанные модели (GMM) предполагают существование определенного количества гауссовских распределений, каждое из которых представляет собой кластер. Следовательно, смешанные модели Гаусса имеют тенденцию группировать вместе точки данных, которые принадлежат одному распределению.
Предположим, у нас есть три распределения Гаусса (подробнее об этом в следующем разделе) — GD1, GD2 и GD3. Среднее значение составляет (μ1, μ2, μ3), а дисперсия — (σ1, σ2, σ3) значений соответственно. Для заданного набора точек данных наш GMM определит вероятность того, что каждая точка данных принадлежит этим распределениям.
Минутку, вероятности?
Вы правильно прочитали!Модели гауссовской смеси являются вероятностными моделями., используя метод мягкой кластеризации для распределения точек по разным кластерам. Я приведу еще один пример, чтобы его было легче понять.
Здесь у нас есть три кластера, представленные тремя цветами — синим, зеленым и голубым. В качестве примера возьмем точку данных, выделенную красным. Вероятность того, что эта точка является частью синего цвета, равна 1, а вероятность того, что она является частью зеленого или голубого цвета, равна 0.
Теперь рассмотрим другую точку, где-то между синим и голубым (выделена на диаграмме ниже). Вероятность того, что эта точка зеленая, равна 0. Вероятность того, что эта точка принадлежит синему и голубому, равна 0,2 и 0,8 соответственно.
В смешанных моделях Гаусса используются методы мягкой кластеризации для сопоставления точек данных с распределением Гаусса.
Гауссово распределение
Я уверен, что вы знакомы с распределением Гаусса (или нормальным распределением). Он имеет колоколообразную кривую с точками данных, симметрично распределенными вокруг среднего значения. На следующем изображении есть несколько изображений нормальных распределений с разным средним значением (μ) и разной дисперсией (σ2) распределения Гаусса. Помните, чем ниже значение σ, тем четче изображение:
В одномерном пространстве функция плотности вероятности распределения Гаусса имеет вид:
где μ — среднее значение, а σ2 — дисперсия.
Но это верно только для одномерного случая. В двумерном случае вместо двухмерной колоколообразной кривой мы используем трехмерную колоколообразную кривую, как показано на изображении ниже:
Функция плотности вероятности:
где x — входной вектор, μ — двумерный средний вектор, а Σ — ковариационная матрица 2 × 2. Ковариация определяет форму кривой. Мы можем обобщить d-мерный случай.
Следовательно, многомерная гауссовская модель x и μ — это векторы длины d, а Σ — ковариационная матрица dxd.
Таким образом, для набора данных с d функциями у нас будет смесь из k распределений Гаусса (где k равно количеству кластеров), каждое из которых имеет определенный средний вектор и ковариационную матрицу. Но подождите, как вы назначаете значения среднего и дисперсии для каждого распределения Гаусса?
Эти значения определяются с помощью метода, называемого максимизацией ожидания (EM). Прежде чем погрузиться в модели гауссовых смесей, нам нужно понять эту технику.
Алгоритм EM максимизации ожидания
Максимизация ожидания (EM) — это статистический алгоритм для нахождения правильных параметров модели. Обычно мы используем EM, когда в данных отсутствуют значения, или, другими словами, алгоритм EM используется, когда данные неполны.
Эти недостающие переменные называютсяскрытая переменная. При решении задач обучения без учителя мы считаем цель (или количество кластеров) неизвестной.
Из-за отсутствия этих переменных сложно определить правильные параметры модели. Подумайте об этом так: если вы знаете, какая точка данных принадлежит какому кластеру, вы можете легко определить средний вектор и ковариационную матрицу.
Поскольку у нас нет значений для скрытых переменных, максимизация ожидания пытается использовать существующие данные, чтобы определить наилучшие значения для этих переменных, а затем найти параметры модели.. На основе этих параметров модели мы возвращаем и обновляем значения скрытых переменных и так далее.
Вообще говоря, алгоритм максимизации ожидания состоит из двух шагов:
- Е шаг: На этом этапе доступные данные используются для оценки (угадывания) значения отсутствующей переменной.
- М шаг: Обновите параметры с помощью полных данных на основе оценок, полученных на шаге E.
Максимизация ожидания лежит в основе многих алгоритмов, включая смешанные модели Гаусса. Итак, как GMM использует концепцию EM? Как мы применим ее к заданному набору точек? Давайте посмотрим!
Максимизация ожиданий гауссовских моделей смесей
Давайте разберемся на другом примере. Я хочу, чтобы вы кристаллизовали эту идею по мере чтения. Это поможет вам лучше понять, о чем мы говорим.
Предположим, нам нужно выделить k кластеров. Распределение Гаусса, что означает наличие k средних µ1, µ2, ..µk и ковариационных матриц Σ1, Σ2, ..Σk. Кроме того, существует параметр для распределений, который определяет веса отдельных распределений, веса, представляющие количество точек для каждого кластера, обозначаемого Πi.
Теперь нам нужно найти значения этих параметров, чтобы определить распределение Гаусса. Мы определили количество кластеров и случайным образом назначили средние значения, ковариации и веса. Далее мы выполним шаги E и M!
Е шаг:
Для каждой точки xi вычислить вероятность того, что она принадлежит распределениям c1, c2,...ck. Для этого используется следующая формула:
Это значение будет высоким, если точка назначена правильному кластеру, и низким в противном случае.
М шаг:
После шага E мы возвращаемся назад и обновляем значения Π, μ и Σ. Эти материалы обновляются следующим образом:
- Новый вес определяется как отношение количества данных в кластере к общему количеству данных:
- Матрицы среднего и ковариации обновляются на основе значений, присвоенных распределению, пропорциональных значениям вероятности точек данных. Следовательно, точка данных, которая с большей вероятностью будет частью этого распределения, будет иметь больший вклад:
На основе обновленных значений, сгенерированных на этом шаге, мы вычисляем новые вероятности для каждой точки данных и итеративно обновляем эти значения. Этот процесс повторяется, чтобы максимизировать логарифмическую функцию правдоподобия. На самом деле мы можем сказать
k-means учитывает только обновление среднего значения центров кластеров, в то время как GMM учитывает среднее значение и дисперсию данных.
Реализация гауссовских смешанных моделей в Python
Пришло время погрузиться в код! Это одна из моих любимых частей любой статьи, так что давайте начнем.
Начнем с загрузки данных. Вот временный файл, который я создал — вы можете скачать данные по этой ссылке: https://s3-ap-south-1.amazonaws.com/av-blog-media/wp-content/uploads/2019/10/Clustering_gmm .csv.
import pandas as pd
data = pd.read_csv('Clustering_gmm.csv')
plt.figure(figsize=(7,7))
plt.scatter(data["Weight"],data["Height"])
plt.xlabel('Weight')
plt.ylabel('Height')
plt.title('Data Distribution')
plt.show()
Это наши данные. Сначала мы строим модель k-средних на этих данных:
#训练k-means模型
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=4)
kmeans.fit(data)
#kmeans预测
pred = kmeans.predict(data)
frame = pd.DataFrame(data)
frame['cluster'] = pred
frame.columns = ['Weight', 'Height', 'cluster']
#输出结果
color=['blue','green','cyan', 'black']
for k in range(0,4):
data = frame[frame["cluster"]==k]
plt.scatter(data["Weight"],data["Height"],c=color[k])
plt.show()
Результаты не очень точны. Модель k-средних не смогла определить правильные кластеры. Присмотримся к кластеру, расположенному в центре, хотя распределение данных эллиптическое, k-means попытался построить круговой кластер (помните недостаток, который мы обсуждали ранее?)
Теперь давайте построим смешанную модель Гаусса на тех же данных и посмотрим, сможем ли мы улучшить k-средние:
import pandas as pd
data = pd.read_csv('Clustering_gmm.csv')
# 训练高斯混合模型
from sklearn.mixture import GaussianMixture
gmm = GaussianMixture(n_components=4)
gmm.fit(data)
#GMM预测
labels = gmm.predict(data)
frame = pd.DataFrame(data)
frame['cluster'] = labels
frame.columns = ['Weight', 'Height', 'cluster']
color=['blue','green','cyan', 'black']
for k in range(0,4):
data = frame[frame["cluster"]==k]
plt.scatter(data["Weight"],data["Height"],c=color[k])
plt.show()
Это именно то, на что мы надеялись. Модель смеси Гаусса превосходит модель k-средних в этом наборе данных
конец
Это вводное руководство по гауссовым моделям смесей. Моя цель здесь — познакомить вас с этой мощной техникой кластеризации и показать, насколько она эффективна и действенна по сравнению с традиционными алгоритмами.
Я призываю вас начать кластерный проект и попробовать GMM. Это лучший способ изучить и закрепить концепцию, и, поверьте мне, вы в полной мере оцените, насколько полезен этот алгоритм.