Clustering

聚類作為降維

  • July 4, 2017

我正在閱讀 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")

我認為這是Park、Jeon 和 Rosen描述的“質心方法”(或密切相關的“質心QR”方法) 。來自 Moon-Gu Jeon 的論文摘要

我們的質心方法將全維數據投影到其類的質心空間上,這極大地降低了維度,將維數減少到類數,同時改進了原始類結構。其有趣的特性之一是,即使使用兩種不同的相似性度量,當應用基於質心的分類時,由質心形成的全維空間和降維空間的分類結果是相同的。第二種方法稱為 CentroidQR,是我們的 Centroid 方法的變體,它使用來自質心矩陣的 QR 分解的正交矩陣 Q 的 k 列作為投影空間。

它似乎也等同於 Factor Analysis 中的“多組”方法

引用自:https://stats.stackexchange.com/questions/288668

comments powered by Disqus