#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
и группового среднего x̄
, дисперсии σ2
и стандартного отклонения σ
.
Z
Оценка покажет вам, где вырезать классы, предполагая вероятность 0,5 в этой точке, и, таким образом, правильно сгенерировать ваши разные классы. C
является центром тяжести классов, N
количество примеров.
Комментарии:
1. Спасибо за ваш ответ. Однако я уже знаком с уравнениями распределения Гаусса и ищу способы реализовать это в коде (как указано в вопросе) в данном контексте, чтобы я мог соответственно сгруппировать свои данные в 2 класса.