Ini adalah utas yang relatif lama tetapi saya baru saja menemukan masalah ini dalam pekerjaan saya dan menemukan diskusi ini. Pertanyaan telah dijawab tetapi saya merasa bahwa bahaya normalisasi baris ketika bukan unit analisis (lihat @ DJohnson jawaban di atas) belum diatasi.
Poin utama adalah bahwa baris normal dapat merusak analisis selanjutnya, seperti tetangga terdekat atau k-means. Untuk kesederhanaan, saya akan menyimpan jawaban khusus untuk memusatkan baris.
Untuk menggambarkannya, saya akan menggunakan data Gaussian yang disimulasikan di sudut-sudut hypercube. Untungnya R
ada fungsi yang mudah untuk itu (kode ada di akhir jawaban). Dalam kasus 2D, sangat mudah bahwa data yang berpusat pada rata-rata baris akan jatuh pada garis yang melewati titik asal pada 135 derajat. Data yang disimulasikan kemudian dikelompokkan menggunakan k-means dengan jumlah cluster yang benar. Data dan hasil pengelompokan (divisualisasikan dalam 2D menggunakan PCA pada data asli) terlihat seperti ini (sumbu untuk plot paling kiri berbeda). Bentuk berbeda dari titik-titik dalam plot pengelompokan merujuk pada penugasan kluster ground-kebenaran dan warna adalah hasil dari pengelompokan k-means.
Cluster kiri-atas dan kanan-bawah terpotong menjadi dua ketika data berpusat pada baris rata-rata. Jadi jarak setelah pemusatan rata-rata baris terdistorsi dan tidak terlalu berarti (setidaknya berdasarkan pada pengetahuan data).
Tidak begitu mengejutkan dalam 2D, bagaimana jika kita menggunakan lebih banyak dimensi? Inilah yang terjadi dengan data 3D. Solusi pengelompokan setelah pemusatan rata-rata baris adalah "buruk".
Dan mirip dengan data 4D (sekarang ditampilkan untuk singkatnya).
Mengapa ini terjadi? Pemusatan rata-rata baris mendorong data ke dalam ruang di mana beberapa fitur menjadi lebih dekat daripada sebelumnya. Ini harus tercermin dalam korelasi antara fitur. Mari kita lihat itu (pertama pada data asli dan kemudian pada data rata-rata baris-tengah untuk kasus 2D dan 3D).
[,1] [,2]
[1,] 1.000 -0.001
[2,] -0.001 1.000
[,1] [,2]
[1,] 1 -1
[2,] -1 1
[,1] [,2] [,3]
[1,] 1.000 -0.001 0.002
[2,] -0.001 1.000 0.003
[3,] 0.002 0.003 1.000
[,1] [,2] [,3]
[1,] 1.000 -0.504 -0.501
[2,] -0.504 1.000 -0.495
[3,] -0.501 -0.495 1.000
Jadi sepertinya row-mean-centering memperkenalkan korelasi antara fitur-fiturnya. Bagaimana ini dipengaruhi oleh sejumlah fitur? Kita dapat melakukan simulasi sederhana untuk mengetahui hal itu. Hasil simulasi ditunjukkan di bawah ini (lagi-lagi kode di akhir).
Jadi karena jumlah fitur meningkatkan efek pemusatan rata-rata baris tampaknya berkurang, setidaknya dalam hal korelasi yang diperkenalkan. Tapi kami hanya menggunakan data acak yang terdistribusi secara seragam untuk simulasi ini (seperti yang biasa terjadi ketika mempelajari kutukan-dimensi ).
Jadi apa yang terjadi ketika kita menggunakan data nyata? Seringkali dimensi intrinsik data lebih rendah kutukan mungkin tidak berlaku . Dalam kasus seperti itu saya akan menebak bahwa pemusatan rata-rata baris mungkin merupakan pilihan "buruk" seperti yang ditunjukkan di atas. Tentu saja, analisis yang lebih ketat diperlukan untuk membuat klaim definitif.
Kode untuk simulasi pengelompokan
palette(rainbow(10))
set.seed(1024)
require(mlbench)
N <- 5000
for(D in 2:4) {
X <- mlbench.hypercube(N, d=D)
sh <- as.numeric(X$classes)
K <- length(unique(sh))
X <- X$x
Xc <- sweep(X,2,apply(X,2,mean),"-")
Xr <- sweep(X,1,apply(X,1,mean),"-")
show(round(cor(X),3))
show(round(cor(Xr),3))
par(mfrow=c(1,1))
k <- kmeans(X,K,iter.max = 1000, nstart = 10)
kc <- kmeans(Xc,K,iter.max = 1000, nstart = 10)
kr <- kmeans(Xr,K,iter.max = 1000, nstart = 10)
pc <- prcomp(X)
par(mfrow=c(1,4))
lim <- c(min(min(X),min(Xr),min(Xc)), max(max(X),max(Xr),max(Xc)))
plot(X[,1], X[,2], xlim=lim, ylim=lim, xlab="Feature 1", ylab="Feature 2",main="Data",col=1,pch=1)
points(Xc[,1], Xc[,2], col=2,pch=2)
points(Xr[,1], Xr[,2], col=3,pch=3)
legend("topleft",legend=c("Original","Center-cols","Center-rows"),col=c(1,2,3),pch=c(1,2,3))
abline(h=0,v=0,lty=3)
plot(pc$x[,1], pc$x[,2], col=rainbow(K)[k$cluster], xlab="PC 1", ylab="PC 2", main="Cluster original", pch=sh)
plot(pc$x[,1], pc$x[,2], col=rainbow(K)[kc$cluster], xlab="PC 1", ylab="PC 2", main="Cluster center-col", pch=sh)
plot(pc$x[,1], pc$x[,2], col=rainbow(K)[kr$cluster], xlab="PC 1", ylab="PC 2", main="Cluster center-row", pch=sh)
}
Kode untuk meningkatkan simulasi fitur
set.seed(2048)
N <- 1000
Cmax <- c()
Crmax <- c()
for(D in 2:100) {
X <- matrix(runif(N*D), nrow=N)
C <- abs(cor(X))
diag(C) <- NA
Cmax <- c(Cmax, max(C, na.rm=TRUE))
Xr <- sweep(X,1,apply(X,1,mean),"-")
Cr <- abs(cor(Xr))
diag(Cr) <- NA
Crmax <- c(Crmax, max(Cr, na.rm=TRUE))
}
par(mfrow=c(1,1))
plot(Cmax, ylim=c(0,1), ylab="Max. cor.", xlab="#Features",col=1,pch=1)
points(Crmax, ylim=c(0,1), col=2, pch=2)
legend("topright", legend=c("Original","Center-row"),pch=1:2,col=1:2)
EDIT
Setelah beberapa googling berakhir di halaman ini di mana simulasi menunjukkan perilaku yang sama dan mengusulkan agar korelasi yang diperkenalkan oleh baris-mean-centering menjadi .- 1 / ( p - 1 )