【发布时间】:2020-05-05 16:24:17
【问题描述】:
我正在使用 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
【问题讨论】:
-
如果您将 TSNE 直接应用于您的数据并跳过 SVD 步骤会怎样?鉴于您的数据只有 5 个特征,因此您不需要 SVD。
-
@MaximeKan 那仍然没有给出理想的结果。我只得到 4 条不同的“线”(每条线有 5 个不同颜色的部分)而不是簇。
-
您可能会考虑提供指向您的数据的链接...
-
@SergeyBushmanov 我添加了一个链接!
-
在修改了您的数据后,我可以与您分享的不是解决方案——因为我相信这里没有解决方案——而是一些想法。 (1) 一般来说
TSNE不是一个很好的获取数据结构的工具。里面的参数太多了。改变它们,有时您将能够发现基本事实,有时则不能。您可以尝试自己更改它们,或者以谷歌为例,有很多在线资源。 (2) 虽然它本身不是一个好的工具,但它可以作为一个初步的特征提取工具,作为其他算法的基础(参见 Kaggle 的模型堆叠)
标签: python pandas scikit-learn data-science data-analysis