行の正規化の目的は何ですか


12

列の正規化の背後にある理由を理解します。これは、同じスケールで測定されていなくてもフィーチャに均等に重み付けされるためです。ただし、最近接文献では、列と行の両方が正規化されていることがよくあります。行の正規化とは何ですか?なぜ正規化するのですか?具体的には、行の正規化の結果は行ベクトル間の類似性/距離にどのように影響しますか?


行を正規化する文献を引用していただけますか?私はこれが比較的古い議論であることを理解していますが、最近同様の問題に遭遇し、違いを見つけようとしています。それに対する私の見解を回答として投稿します。
DataD'oh

回答:


4

これは比較的古いスレッドですが、最近この問題に遭遇し、この議論に遭遇しました。質問には回答しましたが、分析の単位でないときに行を正規化する危険性(上記の@DJohnsonの回答を参照)は対処されていないと感じています。

重要な点は、行の正規化は、最近傍やk平均などの後続の分析に悪影響を与える可能性があるということです。簡単にするために、私は行の中央揃えに固有の答えを保持します。

それを説明するために、ハイパーキューブのコーナーでシミュレートされたガウスデータを使用します。幸いなことにR、そのための便利な関数があります(コードは回答の最後にあります)。2Dの場合、行平均中心のデータが135度で原点を通る線上にあることは簡単です。次に、シミュレートされたデータは、正しい数のクラスターを持つk-meansを使用してクラスター化されます。データとクラスタリング結果(元のデータでPCAを使用して2Dで視覚化)は、次のようになります(左端のプロットの軸は異なります)。クラスタリングプロットのポイントのさまざまな形状は、グラウンドトゥルースのクラスター割り当てを参照しており、色はk平均クラスタリングの結果です。

ここに画像の説明を入力してください

左上と右下のクラスターは、データが行平均の中央にある場合、半分にカットされます。したがって、行平均の中心化後の距離は歪んでしまい、あまり意味がありません(少なくともデータの知識に基づくと)。

2Dではそれほど驚くべきことではありませんが、より多くの次元を使用するとどうなるでしょうか。これが3Dデータで何が起こるかです。行平均中心化後のクラスタリングソリューションは「悪い」ものです。

ここに画像の説明を入力してください

また、4Dデータと同様です(簡潔にするために、ここでは示しています)。

なぜこうなった?行平均の中央揃えは、一部の機能が他の機能よりも近くなる場所にデータをプッシュします。これは、機能間の相関関係に反映されます。それを見てみましょう(最初に元のデータ、次に2Dおよび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 したがって、行平均の中心化により、機能間に相関関係が生じているように見えます。これは機能の数によってどのように影響を受けますか?それを理解するために簡単なシミュレーションを行うことができます。シミュレーションの結果を以下に示します(これも最後のコードです)。

ここに画像の説明を入力してください

したがって、特徴の数が増えるにつれて、行平均のセンタリングの効果は、導入された相関の観点から、少なくとも減少するようです。ただし、このシミュレーションには一様に分布したランダムデータを使用しただけです(次元の呪いを研究するときによくあることです)。

では、実際のデータを使用するとどうなりますか?データの本質的な次元が低いほど、呪いは適用されない場合があります。このような場合、上に示したように、行平均の中央揃えは「悪い」選択になると思います。もちろん、決定的な主張を行うには、より厳密な分析が必要です。

クラスタリングシミュレーションのコード

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

機能シミュレーションを増やすためのコード

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)

編集

いくつかのグーグル処理がこのページで終了した後、シミュレーションは同様の動作を示し、行平均中心化によって導入された相関がと提案しました。1/(p1)


5

行の正規化にはさまざまな形式があり、OPはどのユーザーが自分のことを考えているかを述べていません。

行の正規化(ユークリッドノルム正規化)の特定の形式は、各行が正規化される(そのユークレディアノルムで除算される)静かな人気があります。

この形式の行の正規化を使用する理由は、このペーパーのセクションまとめられています[0]:3.2

示す列中心行 -ベクトルと pxxp

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

行の正規化されたベクトル。この変換がデータに対して幾何学的に何をしているのかを考えてください。幾何学的に、元のデータに変数があり、中央に配置されている場合、ユークリッド行の正規化を適用して、データを次元の単位円の表面に投影します。pp>1p

たとえば、元のデータが中央に配置され(この画像の黒い点のように)、それに行の正規化を適用すると、赤い星が得られます。

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

緑の点は、元のデータの少数の外れ値を表しています。それらに行正規化変換を適用すると、青い星が得られます。

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

ここに画像の説明を入力してください

今、この変革の利点は明らかです。単位円への投影は、外れ値の影響を弱めます。元のデータ が中央のモデルから描画された場合、いくつかの遠い外れ値(緑のドットなど)を除いて、基づくデータの形状の推定は外れ値によって台無しになります。F xxFx

正規化されたデータ(星、赤と青)に基づいて推定を行う場合、外れ値(青い星にマップされている)は、推定を損なうレバレッジが少なくなります。z

形状行列(または等高線の楕円)をデータ、それらの汚染されたバージョン、およびその行の正規化された変換に順に比較することで、これを最も明確に見ることができます。

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)

ご覧のとおり、変換された汚染データ(赤い楕円)に当てはめられた形状の楕円は、汚染されたデータ(緑の楕円)から得られたものよりも、汚染されていないデータ(黒い楕円)の形状行列の推定が優れています。これは、緑の星の赤い楕円(変換されたデータから作成)の方が、緑の楕円(元のデータから作成)よりも小さいためです。xzx

  • S. Visuri、V。Koivunen、H。Oja(2000)。共分散行列の署名とランク付け、Journal of Statistical Planning and Inference Volume 91、Issue 2、557–575。

4

行の正規化を実行するフィールド固有の理由がいくつかあります。テキスト分析では、テキストに含まれる単語のヒストグラムでテキストを表すのが一般的です。各行の単語数から始めて、生の標準化はそれをヒストグラムに変えます。

そして、計算上の理由。スパースマトリックスを使用している場合、データを列ごとに簡単にセンタリングおよびスケーリングすることはできません。密な行列に埋め込むと、データが大きくなりすぎてメモリに収まらない場合があります。ただし、行ごとのスケーリングは、必要なメモリの総量には影響しません。


計算上の理由から、スパース行列の表現方法が原因で、転置して行を正規化するだけだと言っていますか?実際に行の正規化が最近傍の結果にどのように影響するかについても質問します。
curiosity_delivers

3

行の正規化には名前-ipsative scaling-があります。これには通常、セットの最大値で除算するか、フィーチャの平均を引くことにより、フィーチャセットを再スケーリングすることが含まれます。この方法でデータを変換する方法を選択する動機は多数ありますが、主なのは、個人の一意の特性(行または分析単位)に関連して機能を調整することです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.