Использование TSNE для визуализации кластеров в Python - PullRequest
0 голосов
/ 19 января 2020

Я использую TSNE для визуализации своих кластеров, но вывод кажется немного странным. Предполагается, что будет 3 кластера, но вместо этого есть 4 линии. Что-то не так с тем, как я их визуализирую, или это сам метод kmeans? Как еще можно визуализировать кластеры?

import pandas as pd
import numpy as np
import ast
from sklearn import metrics
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
from sklearn.decomposition import TruncatedSVD

colNames = ['unixTime', 'sampleAmount','Time','samplingRate', 'Data']

data = pd.read_csv("project_fan.csv",  sep = ';', error_bad_lines = False, names = colNames) 

# changing data into list
data['Data'] = data.Data.transform(ast.literal_eval)

# Selecting the average value from the list and replacing the list with it
data['Data'] = data.Data.apply(np.mean)

kmeanModel = KMeans(n_clusters = 3)
kmeanModel.fit(data)

y = kmeanModel.labels_


X_train, X_test, y_train, y_test = train_test_split(data, y, test_size = 0.2, random_state = 1)

k = 3
tfs_reduced = TruncatedSVD(n_components=k, random_state=0).fit_transform(data)
tfs_embedded = TSNE(n_components=2, perplexity=40, verbose=2).fit_transform(tfs_reduced)
fig = plt.figure(figsize = (10, 10))
ax = plt.axes()
plt.scatter(tfs_embedded[:, 0], tfs_embedded[:, 1], marker = "x", c = km.labels_)
plt.show()

Образец набора данных: https://drive.google.com/file/d/1APIG7C5d-zWPfe1bZa2azDmfQIkDOyVu/view?usp=sharing

       unixTime  sampleAmount  Time  samplingRate         Data
0  1.556891e+09         16384   340  48188.235294  1620.242170
1  1.556891e+09         16384   341  48046.920821  1620.237716
2  1.556891e+09         16384   340  48188.235294  1620.236340
3  1.556891e+09         16384   340  48188.235294  1620.229289
4  1.556891e+09         16384   340  48188.235294  1620.227541

Мой вывод:

[![enter image description here][1]][1]


  [1]: https://i.stack.imgur.com/Jth9X.png

1 Ответ

1 голос
/ 20 января 2020

Я посмотрел на ваш код, и кроме того, что можно поиграть с некоторыми параметрами, он выглядит так, как будто вы все визуализируете. Так как t-sne является довольно драматичным c нелинейным преобразованием данных, не всегда бывает, что группы, найденные с помощью алгоритмов кластеризации, также появляются при анализе t-sne.

Я запустил tsne ( без шага TruncatedSVD на данный момент) на предоставленных вами образцах данных и сгенерировал этот график внедрения tsne.

enter image description here

Это показывает, что группы, которые появляются в этом вложении, в основном состоят из членов тех же кластеров, назначенных с помощью K-средних, что означает, что есть по крайней мере некоторое сходство в группах, предлагаемых двумя алгоритмами.

Существует ли вероятность того, что основополагающая истина о количестве кластеров в данных не равна 3? В зависимости от того, почему вы выбрали 3 для значения «k», вы можете проверить это. Оценка по силуэту и Оценка по Калински-Харабазу являются двумя примерами мер, которые можно использовать для оценки качества подбора кластеров - вы можете запустить k-средних с различными значениями k и используйте оценки, чтобы определить, какое значение k возвращает кластеры, которые лучше всего соответствуют данным (согласно этим показателям). Вы также можете попробовать алгоритмы кластеризации, которые сами определяют значение «k».

Наконец, однако, с точки зрения других способов визуализации кластеров, PCA, SVD или TSNE являются общепринятыми методы уменьшения размерности, которые я знаю. Вы можете изучить различные кластеры, отыскивая (статистически значимые) различия в их необработанных характеристиках / colNames.

...