Как использовать модель гауссовой смеси для кластеризации?

#python #machine-learning #scikit-learn #k-means #gmm

#python #машинное обучение #scikit-learn #k-означает #gmm

Вопрос:

Я использую k-Means для кластеризации данных в 2 класса. Однако сейчас я хотел бы использовать другой подход и использовать модель гауссовой смеси для кластеризации данных в 2 класса. Я просмотрел документацию Scikit-Learn и другие вопросы SO, но не могу понять, как я могу использовать GMM для кластеризации 2-го класса в моем текущем контексте.

Я могу легко разделить данные на 2 класса, используя k-Means следующим образом:-

 import pandas as pd
from scipy import stats
from sklearn.cluster import KMeans
import numpy as np

df = pd.read_pickle('my_df.pkl')
clmns = df.columns

df = df.fillna(df.mean())
df.isnull().any

df_tr_std = stats.zscore(df[clmns])

kmeans = KMeans(n_clusters = 2, random_state = 0, n_init = 100, max_iter=500, n_jobs = -1).fit(df_tr_std)
# >>> kmeans
# KMeans(algorithm='auto', copy_x=True, init='k-means  ', max_iter=300,
#     n_clusters=2, n_init=10, n_jobs=None, precompute_distances='auto',
#     random_state=0, tol=0.0001, verbose=0)
labels = kmeans.labels_
  

Я был бы признателен за любой один фрагмент строки / короткого кода, который я могу использовать для подгонки модели GMM к моим данным ( df_tr_std ). Я уверен, что это должен быть довольно простой процесс, соответствующий модели GMM, но я очень смущен тем, как мой текущий контекст k-Means может быть изменен на GMM.

Комментарии:

1. Как именно мы можем это сделать для ваших (неизвестных нам) df_tr_std данных? И что именно не так или чего не хватает в примерах с радужной оболочкой и эллипсоидами в документации?

2. Спасибо за комментарий. Я согласен, что данные вам неизвестны, но именно с этой целью я включил код котельной плиты для подгонки df_tr_std (фрейм обучающих данных, который состоит из множества функций) в модель k-средних. Iris и другие подобные примеры делают это, но я не могу понять, как то же самое можно применить в данном контексте. Моя главная проблема в том, что я могу найти такие вещи, как gmm = GMM (n_components = 4).fit(X) labels = gmm.predict(X), которые можно использовать в аналогичном контексте (ссылка jakevdp.github.io/PythonDataScienceHandbook /… ).

3. Но не очевидно, является ли это наиболее подходящим способом размещения GMM в фрейме данных на основе Pandas, который я, конечно, могу преобразовать в неровный массив. Я был бы признателен за вашу любезную помощь и предложения в этом отношении. Пожалуйста, рассмотрите приведенный выше код k-Means как текущий контекст, в котором df_tr_std является фреймом данных со всеми функциями обучения.

Ответ №1:

Рассмотрим следующее:

Гауссианы смеси

Это уравнение даст вам распределение по гауссу с учетом вашего конкретного случая x и группового среднего , дисперсии σ2 и стандартного отклонения σ .

Z Оценка покажет вам, где вырезать классы, предполагая вероятность 0,5 в этой точке, и, таким образом, правильно сгенерировать ваши разные классы. C является центром тяжести классов, N количество примеров.

Два гауссиана

Центроиды Гаусса

Комментарии:

1. Спасибо за ваш ответ. Однако я уже знаком с уравнениями распределения Гаусса и ищу способы реализовать это в коде (как указано в вопросе) в данном контексте, чтобы я мог соответственно сгруппировать свои данные в 2 класса.