gpt4 book ai didi

python-3.x - 质心不以簇为中心

转载 作者:行者123 更新时间:2023-11-30 09:48:25 26 4
gpt4 key购买 nike

我正在尝试使用以下代码绘制 k 均值分析的质心和聚类:

matrix_reduced = TruncatedSVD(n_components = num_k).fit_transform(matrix)

matrix_embedded = TSNE(n_components=2, perplexity=30,verbose=2, n_iter =500).fit_transform(matrix_reduced)

centroids = kmeans.cluster_centers_
centroids_embedded = TSNE(n_components=2).fit_transform(order_centroids)


fig = plt.figure(figsize=(10,10))
ax1 = fig.add_subplot(111)


ax1.scatter(matrix_embedded[:,0], matrix_embedded[:,1],marker='x',c = kmeans.labels_)
ax1.scatter(centroids_embedded[:,0], centroids_embedded[:,1],marker='o',c = 'red')

plt.show()

不幸的是,质心并不以不同的簇为中心:

enter image description here

问题:有谁知道是什么原因导致的?我不知道出了什么问题。

谢谢!

最佳答案

一般来说,在创建任何流形时,您需要提供要在其上表示的所有点(因为最终表示通常取决于数据中的所有点)。

在示例中,您将创建两个不同的流形:

matrix_reduced = TruncatedSVD(n_components = num_k).fit_transform(matrix)

# first manifold
matrix_embedded = TSNE(n_components=2, perplexity=30,verbose=2, n_iter =500).fit_transform(matrix_reduced)

centroids = kmeans.cluster_centers_
# second manifold
centroids_embedded = TSNE(n_components=2).fit_transform(order_centroids)

这意味着创建的表示是独立的(这就是为什么您看不到它们居中 - 事实上,它们位于不同的空间上)。

解决此问题的方法是简单地将 matrix_reducedorder_centroids 连接到单个数据集中,并仅应用一次 TSNE。这应该显示您期望的结果。

另外,请注意,如果您在原始矩阵上使用 k-means(而不是在 matrix_reduced 上),那么结果仍然不正确 - 您需要对两个质心应用相同的变换以及 k-means 最初看到的数据。

总而言之(假设您想在聚类之前使用 TruncatedSVD),它将按如下方式工作:

  1. 读取数据集
  2. 应用 TruncatedSVD 一次性转换整个数据集。
  3. 对转换后的数据集使用 k-means 来获取 k 个质心
  4. 获取质心并将它们连接到数据集的末尾(就像它们是附加示例一样)
  5. TSNE 应用于整个数据集。
  6. (可选)照常绘制前 N-k 个点。
  7. (可选)用不同的颜色绘制最后 k 个点(变换后的质心)。

关于python-3.x - 质心不以簇为中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49213930/

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