聚类作为降维

机器算法验证 聚类 k-均值 降维
2022-03-23 04:41:23

我正在阅读 Nick Pentreath 的《Machine learning with Spark》一书,作者在第 224-225 页讨论了使用 K-means 作为一种降维形式。

我从未见过这种降维方法,它是否有名称或/并且对特定形状的数据有用

我引用描述算法的书:

假设我们使用 K 均值聚类模型对高维特征向量进行聚类,其中包含 k 个聚类。结果是一组 k 个聚类中心。

我们可以根据与每个聚类中心的距离来表示每个原始数据点。也就是说,我们可以计算一个数据点到每个聚类中心的距离。结果是每个数据点的一组 k 距离。

这k个距离可以形成一个新的k维向量。我们现在可以将原始数据表示为相对于原始特征维度的更低维度的新向量。

作者建议采用高斯距离。

对于二维数据有 2 个集群,我有以下内容:

K-均值:

具有 2 个聚类的 K 均值

应用具有范数 2 的算法:

规范 2

应用具有高斯距离的算法(应用 dnorm(abs(z)):

高斯

之前图片的R代码:

set.seed(1)
N1 = 1000
N2 = 500
z1 = rnorm(N1) + 1i * rnorm(N1)
z2 = rnorm(N2, 2, 0.5) + 1i * rnorm(N2, 2, 2)
z = c(z1, z2)

cl = kmeans(cbind(Re(z), Im(z)), centers = 2)

plot(z, col = cl$cluster)

z_center = function(k, cl) {
  return(cl$centers[k,1] + 1i * cl$centers[k,2])
}

xlab = "distance to cluster center 1"
ylab = "distance to cluster center 2"

out_dist = cbind(abs(z - z_center(1, cl)), abs(z - z_center(2, cl)))
plot(out_dist, col = cl$cluster, xlab = xlab, ylab = ylab)
abline(a=0, b=1, col = "blue")

out_dist = cbind(dnorm(abs(z - z_center(1, cl))), dnorm(abs(z - z_center(2, cl))))
plot(out_dist, col = cl$cluster, xlab = xlab, ylab = ylab)
abline(a=0, b=1, col = "blue")
3个回答

我认为这是Park、Jeon 和 Rosen描述的“质心方法”(或密切相关的“质心QR”方法) 。来自 Moon-Gu Jeon 的论文摘要

我们的Centroid方法将全维数据投影到其类的质心空间上,这极大地减少了维度,将维数减少到类数,同时改进了原始类结构。其有趣的特性之一是,即使使用两种不同的相似性度量,当应用基于质心的分类时,由质心形成的全维空间和降维空间的分类结果是相同的。第二种方法称为 CentroidQR,是我们的 Centroid 方法的变体,它使用来自质心矩阵的 QR 分解的正交矩阵 Q 的 k 列作为投影空间。

它似乎也等同于 Factor Analysis 中的“多组”方法

查看所有有关基于枢轴的索引的文献。

但是使用 k-means 几乎没有什么好处。通常,您可以只使用随机点作为枢轴。如果您选择得足够多,它们将不会都相似。

有几种方法可以使用聚类作为降维。对于 K 均值,您还可以将点(正交)投影到由中心生成的向量(或仿射)空间上。