Sklearn.KMeans (): Получить метки центроида класса и ссылку на набор данных

Sci-Kit изучает уменьшение размерности Kmeans и PCA

У меня есть набор данных, 2М строк по 7 столбцов, с различными измерениями потребления энергии на дому с датой для каждого измерения.

  • Дата,
  • Global_active_power,
  • Global_reactive_power,
  • Напряжение,
  • Global_intensity,
  • Sub_metering_1,
  • Sub_metering_2,
  • Sub_metering_3

Я поместил свой набор данных в рамку данных pandas, выбрав все столбцы, но столбец даты, а затем выполнил разделение перекрестной проверки.

import pandas as pd from sklearn.cross_validation import train_test_split data = pd.read_csv('household_power_consumption.txt', delimiter=';') power_consumption = data.iloc[0:, 2:9].dropna() pc_toarray = power_consumption.values hpc_fit, hpc_fit1 = train_test_split(pc_toarray, train_size=.01) power_consumption.head() 

стол питания

Я использую классификацию K-сред, за которой следует уменьшение размерности PCA для отображения.

 from sklearn.cluster import KMeans import matplotlib.pyplot as plt import numpy as np from sklearn.decomposition import PCA hpc = PCA(n_components=2).fit_transform(hpc_fit) k_means = KMeans() k_means.fit(hpc) x_min, x_max = hpc[:, 0].min() - 5, hpc[:, 0].max() - 1 y_min, y_max = hpc[:, 1].min(), hpc[:, 1].max() + 5 xx, yy = np.meshgrid(np.arange(x_min, x_max, .02), np.arange(y_min, y_max, .02)) Z = k_means.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) plt.figure(1) plt.clf() plt.imshow(Z, interpolation='nearest', extent=(xx.min(), xx.max(), yy.min(), yy.max()), cmap=plt.cm.Paired, aspect='auto', origin='lower') plt.plot(hpc[:, 0], hpc[:, 1], 'k.', markersize=4) centroids = k_means.cluster_centers_ inert = k_means.inertia_ plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', s=169, linewidths=3, color='w', zorder=8) plt.xlim(x_min, x_max) plt.ylim(y_min, y_max) plt.xticks(()) plt.yticks(()) plt.show() 

Выход PCA

Теперь я хотел бы узнать, какие строки попадают под данный класс, а затем какие даты попадают под данный класс.

  • Есть ли способ связать точки на графике с индексом в моем наборе данных после PCA?
  • Какой-то метод, о котором я не знаю?
  • Или мой подход принципиально испорчен?
  • Любые рекомендации?

Я довольно новичок в этой области и пытаюсь прочитать много кода, это компиляция нескольких примеров, которые я видел документально.

Моя цель – классифицировать данные, а затем получать даты, которые относятся к классу.

Спасибо

One Solution collect form web for “Sklearn.KMeans (): Получить метки центроида класса и ссылку на набор данных”

KMeans (). Предсказывает (X) ..docs здесь


Предскажите ближайший кластер, к которому принадлежит каждый образец в X.

В литературе векторного квантования cluster_centers_ называется кодовой книгой, и каждое значение, возвращаемое предсказанием, является индексом ближайшего кода в кодовой книге.

 Parameters: (New data to predict) X : {array-like, sparse matrix}, shape = [n_samples, n_features] Returns: (Index of the cluster each sample belongs to) labels : array, shape [n_samples,] 

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

 train_test_split() 

который возвращает два массива случайных строк в вашем наборе данных, что фактически разрушает ваш заказ набора данных, что затрудняет сопоставление меток, возвращаемых из классификации KMeans, в последовательные даты в вашем наборе данных.


Вот пример:

 import pandas as pd import numpy as np from sklearn.cluster import KMeans #read data into pandas dataframe df = pd.read_csv('household_power_consumption.txt', delimiter=';') 

Начальная страница набора данных

 #convert merge date and time colums and convert to datetime objects df['Datetime'] = pd.to_datetime(df['Date'] + ' ' + df['Time']) df.set_index(pd.DatetimeIndex(df['Datetime'],inplace=True)) df.drop(['Date','Time'], axis=1, inplace=True) #put last column first cols = df.columns.tolist() cols = cols[-1:] + cols[:-1] df = df[cols] df = df.dropna() 

предварительно обработанные даты

 #convert dataframe to data array and removes date column not to be processed, sliced = df.iloc[0:, 1:8].dropna() hpc = sliced.values k_means = KMeans() k_means.fit(hpc) # array of indexes corresponding to classes around centroids, in the order of your dataset classified_data = k_means.labels_ #copy dataframe (may be memory intensive but just for illustration) df_processed = df.copy() df_processed['Cluster Class'] = pd.Series(classified_data, index=df_processed.index) 

Законченный


  • Теперь вы можете увидеть, что ваш результат соответствует вашему набору данных с правой стороны.
  • Теперь, когда это классифицировано, вам нужно понять смысл.
  • Это просто хороший пример того, как его можно использовать, от начала до конца.
  • Отображая ваш результат, посмотрите на PCA или сделайте другие графики зависимыми от класса.
  • Самая быстрая реализация SVM, используемая в Python
  • Не целочисленные метки классов Scikit-Learn
  • Сочетание поиска сетки и перекрестной проверки в scikit learn
  • Как извлечь информацию из scikits.learn классификатора, чтобы затем использовать в коде C
  • Подготовьте данные для классификации текста с помощью Scikit Learn SVM
  • Есть ли способ использовать рекурсивный выбор функций с нелинейными моделями с scikit-learn?
  • Индекс за пределами: установка SSVM с использованием Pystruct
  • Поддержка векторной машины в Python с использованием примера функций libsvm
  • Python - лучший язык программирования в мире.