Tôi đang đọc một cuốn sách "Học máy với tia lửa" của Nick Pentreath, và tại trang 224-225, tác giả đã thảo luận về việc sử dụng phương tiện K như một hình thức giảm kích thước.
Tôi chưa bao giờ thấy loại giảm kích thước này, nó có tên hoặc / và có hữu ích cho các hình dạng cụ thể của dữ liệu không?
Tôi trích dẫn cuốn sách mô tả thuật toán:
Giả sử rằng chúng ta phân cụm các vectơ đặc trưng chiều cao của mình bằng mô hình phân cụm K-nghĩa, với các cụm k. Kết quả là một tập hợp các trung tâm cụm k.
Chúng tôi có thể đại diện cho từng điểm dữ liệu ban đầu của mình theo khoảng cách từ mỗi trung tâm cụm này. Đó là, chúng ta có thể tính khoảng cách của một điểm dữ liệu đến từng trung tâm cụm. Kết quả là một tập hợp khoảng cách k cho mỗi điểm dữ liệu.
Những khoảng cách k này có thể tạo thành một vectơ mới của chiều k. Bây giờ chúng ta có thể biểu thị dữ liệu gốc của mình dưới dạng một vectơ mới có kích thước thấp hơn, liên quan đến kích thước tính năng ban đầu.
Tác giả cho thấy một khoảng cách Gaussian.
Với 2 cụm cho dữ liệu 2 chiều, tôi có các mục sau:
K-nghĩa là:
Áp dụng thuật toán với định mức 2:
Áp dụng thuật toán với khoảng cách Gaussian (áp dụng dnorm (abs (z)):
Mã R cho các hình ảnh trước:
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")