私はNick Pentreathの本「Machine learning with Spark」を読んでいます。224〜225ページで、著者は次元削減の形式としてK平均法を使用することについて説明しています。
この種の次元削減は見たことがありません。名前が付いているか、データの特定の形状に役立ちますか?
アルゴリズムを説明した本を引用します。
kクラスターのK平均クラスタリングモデルを使用して高次元の特徴ベクトルをクラスター化するとします。結果は、k個のクラスター中心のセットです。
元のデータポイントのそれぞれを、これらの各クラスター中心からの距離で表すことができます。つまり、各クラスターの中心までのデータポイントの距離を計算できます。結果は、各データポイントのk距離のセットです。
これらのkの距離は、次元kの新しいベクトルを形成できます。これで、元のデータを、元のフィーチャの次元と比較して、より低い次元の新しいベクトルとして表すことができます。
著者はガウス距離を示唆している。
2次元データの2つのクラスターで、私は次のようにしています:
K平均:
ノルム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")