在python中以低维表示绘制距离轮廓
Posted
技术标签:
【中文标题】在python中以低维表示绘制距离轮廓【英文标题】:Draw distance contours in low dimension representation in python 【发布时间】:2018-06-28 05:08:44 【问题描述】:我有一组n_samples
数据点。每个数据点都有n_features
(数百或数千个特征)。我使用 K-Means 聚类和欧几里得距离将点聚类到n_clusters
。然后我使用 TSNE 将我的高维输入数据X
(即n_samples x n_features
)转换为X_low_dim
(即n_samples x 2
),以二维可视化数据。你知道在 Python 中从集群中心绘制距离等高线的简单方法吗?
【问题讨论】:
您没有得到答案的原因可能是问题太宽泛而且不清楚。对其开放赏金,不会改变这一点。阅读How to Ask,写出清晰的问题描述。 【参考方案1】:我不知道我是误解了这个问题还是其他人误解了这个问题,但如果我理解正确,您想绘制以集群代表的投影为中心的等高线图。 您可以查看 here 以了解等高线图的一般方法,但是从该代码中几乎逐字逐句地执行以下操作:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
import scipy.stats as st
def contour_cloud(x, y, cmap):
xmin, xmax = -10, 10
ymin, ymax = -10, 10
xx, yy = np.mgrid[xmin:xmax:100j, ymin:ymax:100j]
positions = np.vstack([xx.ravel(), yy.ravel()])
values = np.vstack([x, y])
kernel = st.gaussian_kde(values)
f = np.reshape(kernel(positions).T, xx.shape)
plt.contourf(xx, yy, f, cmap=cmap, alpha=0.5)
# Assuming to have 2 clusters, split the points into two subsets
representative_1 = ... # Shape (2, )
cluster_1 = ... # Shape (n_points_cl_1, 2)
representative_2 = ... # Shape (2, )
cluster_2 = ... # Shape (n_points_cl_2, 2)
plt.scatter(x=representative_1[0], y=representative_1[1], c='b')
plt.scatter(x=representative_2[0], y=representative_2[1], c='r')
contour_cloud(x=cluster_1[:, 0], y=cluster_1[:, 1], cmap=cm.Blues)
contour_cloud(x=cluster_2[:, 0], y=cluster_2[:, 1], cmap=cm.Reds)
plt.show()
根据您的数据设置xmin
、xmax
、ymin
和ymax
。
这将输出以下内容:
尝试使用适合您需要的参数,我在 5 分钟内将其拼凑在一起,所以它不是很漂亮。
在上图中,我从两个不同的正态分布中抽取了 1000 个点,并使用它们的均值((0, 0)
和 (10, 10)
)作为代表。
【讨论】:
【参考方案2】:您的问题存在歧义:如果您将n
维数据投影到2
维流形上,则每个二维点将对应于 多个 原始点和 到聚类中心的距离不同。
因此,要在每个 2D 点中获得唯一的距离值,您只需在其中使用 2D 网格和简单的欧几里得距离。它将尽可能与原始距离相似,因为 T-SNE 试图做到这一点。
【讨论】:
以上是关于在python中以低维表示绘制距离轮廓的主要内容,如果未能解决你的问题,请参考以下文章