gpt4 book ai didi

python - 使用 TSNE 在 Python 中可视化集群

转载 作者:行者123 更新时间:2023-12-01 06:32:50 30 4
gpt4 key购买 nike

我正在使用 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]: /image/Jth9X.png

最佳答案

我看了你的代码,除了可能使用一些参数之外,看起来你的可视化效果还不错。由于 t-sne 是一种非常戏剧性的数据非线性变换,因此在 t-sne 分析时,聚类算法找到的组并不总是会出现。

我对您提供的示例数据运行了 tsne(目前没有 TruncatedSVD 步骤),并生成了此 tsne 嵌入图。

enter image description here

它表明,此嵌入中出现的组主要由 K-means 分配的相同簇的成员组成,这意味着这两种算法在组中至少存在一些相似性正在提议。

数据中可能有多少个簇的基本事实是否有可能不是 3?根据您决定将“k”值设为 3 的原因,您可以考虑验证这一点。 Silhouette scoreCalinski-Harabasz score有两个度量示例,可用于评估簇的拟合优度 - 您可以使用不同的 k 值运行 k 均值,并使用分数来确定哪个 k 值返回最适合数据的簇(根据这些措施)。您还可以尝试自行决定“k”值的聚类算法。

最后,就可视化簇的其他方法而言,PCA、SVD 或 TSNE 是我所知道的传统降维方法。您可以通过查找原始特征/colNames 中的(统计上显着的)差异来研究不同的集群。

关于python - 使用 TSNE 在 Python 中可视化集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59810088/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com