Apa tujuan dari normalisasi baris


12

Saya mengerti alasan di balik normalisasi kolom, karena hal itu menyebabkan fitur-fitur menjadi tertimbang sama rata, bahkan jika mereka tidak diukur pada skala yang sama - namun, sering dalam literatur tetangga terdekat, baik kolom dan baris dinormalisasi. Apa normalisasi baris untuk / mengapa menormalkan baris? Secara khusus, bagaimana hasil normalisasi baris mempengaruhi kesamaan / jarak antara vektor baris?


bisakah Anda mengutip literatur yang menormalkan baris? Saya menyadari bahwa ini adalah diskusi yang relatif lama tetapi saya baru-baru ini menemukan masalah yang sama dan saya sedang berusaha mencari tahu perbedaannya. Saya akan mengirimkan pendapat saya sebagai jawaban.
DataD'oh

Jawaban:


4

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 Rada 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.

masukkan deskripsi gambar di sini

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".

masukkan deskripsi gambar di sini

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).

masukkan deskripsi gambar di sini

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/(p1)


5

Ada berbagai bentuk normalisasi baris dan OP tidak menyatakan mana yang ada dalam pikirannya.

Suatu bentuk khusus dari normalisasi baris (normalisasi norma Eucledian) di mana setiap baris dinormalisasi (dibagi dengan norma Euclediannya) cukup populer.

Alasan untuk menggunakan bentuk baris normalisasi baik diringkas dalam bagian dari ini kertas [0]:3.2

Mendenotasikan kolom berpusat baris -vector dan halxxp

(0)r(xx)=||xx||21xx

baris dinormalisasi vektor. Pertimbangkan apa yang dilakukan transformasi ini terhadap data Anda secara geometris . Secara geometris, jika data asli Anda memiliki variabel dan terpusat, dengan menerapkan normalisasi baris euclidean, Anda memproyeksikan data Anda pada permukaan lingkaran satuan dimensi .pp>1p

Misalnya, jika data asli Anda terpusat (seperti titik-titik hitam di gambar ini) dan Anda menerapkan normalisasi baris untuk itu, Anda mendapatkan bintang merah.

library(car)
p = 2
n = 1000
m = 10
C = matrix(.9, p, p)
diag(C) = 1
set.seed(123)
x = matrix(runif(n * p, -1, 1), n, p) %*% chol(C)
z = sweep(x, 1, sqrt(rowSums(x * x)), FUN = '/')
plot(rbind(x, z), pch = 16, type = 'n', ann = FALSE, xaxt = 'n', yaxt = 'n')
points(x, pch = 16)
points(z, pch = 8, col = 'red')

Titik-titik hijau mewakili sejumlah kecil pencilan dalam data asli. Jika Anda menerapkan transformasi normalisasi baris padanya, Anda memperoleh bintang biru.

x_1 = sweep(matrix(runif(m * p, -1, 1), m, p), 2, c(2, -2))
z_1 = sweep(x_1, 1, sqrt(rowSums(x_1 * x_1)), FUN = '/')
plot(rbind(x, x_1, z, z_1), pch = 16, type = 'n', ann = FALSE, xaxt = 'n', yaxt = 'n')
points(x, pch = 16)
points(x_1, pch = 16, col = 'green')
points(z, pch = 8, col = 'red')
points(z_1, pch = 8, col = 'blue')

masukkan deskripsi gambar di sini

Sekarang keuntungan dari transformasi ini sudah jelas. Proyeksi pada lingkaran unit mengurangi efek outlier jauh. Jika Anda data asli diambil dari model terpusat kecuali untuk beberapa outlier jauh (seperti titik-titik hijau) maka setiap perkiraan bentuk data Anda berdasarkan akan dimanjakan oleh outlier.F xxFx

Jika Anda mendasarkan estimasi Anda pada data yang dinormalisasi (bintang-bintang, merah dan biru), outlier (sekarang dipetakan ke bintang-bintang biru) memiliki sedikit pengaruh untuk merusak perkiraan Anda.z

Anda dapat melihat ini dengan sangat jelas dengan membandingkan matriks bentuk (atau elips kontur) yang dipasang pada data, versi yang terkontaminasi dan transformasi baris yang dinormalisasi:

ellipse(crossprod(rbind(x, x_1)) / (n + m - 1) / det(crossprod(rbind(x, x_1)) / (n + m - 1))^(1 / p), center = rep(0, p), col = 'green', radius = 1)
ellipse(crossprod(rbind(z, z_1)) / (n + m - 1) / det(crossprod(rbind(z, z_1)) / (n + m - 1))^(1 / p), center = rep(0, p), col = 'red', radius = 1)
ellipse(crossprod(rbind(x)) / (n - 1) / det(crossprod(rbind(x)) / (n - 1))^(1 / p), center = rep(0, p), col = 'black', radius = 1)

Seperti yang Anda lihat, elips bentuk yang dipasang pada data terkontaminasi yang ditransformasikan (elips merah) adalah estimasi yang lebih baik dari matriks bentuk data yang tidak terkontaminasi (elips hitam) daripada yang diperoleh dari data yang terkontaminasi (elips hijau). Ini karena bintang hijau memiliki tarikan yang lebih kecil pada elips merah (dibangun dari data yang ditransformasikan ) daripada yang hijau (dibangun dari data asli ).xzx

  • [0] S. Visuri, V. Koivunen, H. Oja (2000). Matriks kovariansi tanda tangan dan rangking, Jurnal Perencanaan Statistik dan Kesimpulan Volume 91, Edisi 2, 557–575.

4

Ada beberapa alasan khusus bidang untuk melakukan normalisasi baris. Dalam analisis teks, sangat umum untuk merepresentasikan teks dengan histogram dari kata-kata yang dikandungnya. Mulai dari hitungan kata untuk setiap baris, standardisasi baku mengubahnya menjadi histogram.

Dan alasan komputasinya . Jika Anda bekerja dengan matriks jarang, Anda tidak dapat memusatkan dan menskalakan kolom data dengan kolom dengan mudah. Jika Anda menanamkannya dalam matriks padat, data bisa menjadi terlalu besar untuk muat dalam memori. Namun, penskalaan baris demi baris tidak memengaruhi jumlah total memori yang dibutuhkan.


Untuk alasan komputasi, apakah Anda mengatakan bahwa kami hanya mengambil transpos dan baris menormalkan bahwa karena cara matriks jarang diwakili? Saya bertanya lebih lanjut bagaimana normalisasi baris mempengaruhi hasil tetangga terdekat dalam praktek.
curiosity_delivers

3

Normalisasi baris memiliki nama - penskalaan ipsatif - yang biasanya melibatkan penyetelan ulang set fitur dengan membagi dengan nilai maksimum untuk set atau mengurangi rata-rata fitur. Ada banyak motivasi untuk memilih pendekatan ini untuk mentransformasikan data tetapi yang utama di antara mereka adalah bahwa itu mengkondisikan fitur-fitur relatif terhadap karakteristik unik individu (baris atau unit analisis).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.