Saya membaca buku "Machine learning with Spark" oleh Nick Pentreath, dan di halaman 224-225 penulis membahas tentang penggunaan K-means sebagai bentuk pengurangan dimensionalitas.
Saya belum pernah melihat pengurangan dimensi seperti ini, apakah ada nama atau / dan berguna untuk bentuk data tertentu ?
Saya mengutip buku yang menggambarkan algoritma:
Asumsikan bahwa kita mengelompokkan vektor fitur dimensi tinggi kami menggunakan model pengelompokan K-means, dengan k cluster. Hasilnya adalah satu set pusat k cluster.
Kami dapat mewakili setiap titik data asli kami dalam hal seberapa jauh dari masing-masing pusat klaster ini. Artinya, kita bisa menghitung jarak dari titik data ke setiap pusat cluster. Hasilnya adalah seperangkat jarak k untuk setiap titik data.
Jarak k ini dapat membentuk vektor dimensi baru k. Kami sekarang dapat merepresentasikan data asli kami sebagai vektor baru dengan dimensi lebih rendah, relatif terhadap dimensi fitur asli.
Penulis menyarankan jarak Gaussian.
Dengan 2 cluster untuk data 2 dimensi, saya memiliki yang berikut ini:
K-means:
Menerapkan algoritma dengan norma 2:
Menerapkan algoritma dengan jarak Gaussian (menerapkan dnorm (abs (z)):
Kode R untuk gambar sebelumnya:
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")