行列 R の値を正規化する
胡金庫
2023年1月30日
この記事では、R 行列の値を正規化する方法を紹介します。
sweep
関数を使用して、R の配列をスイープアウトする
sweep
関数は、配列から要約統計量をスイープするために使用されます。入力配列を最初の引数として取り、要約統計量を 3 番目の引数として取ります。関数の 2 番目の引数は、3 番目の引数ベクトルの要素に対応する必要があるインデックスのベクトルを表します。4 番目の引数は、配列をスイープするために使用される関数を示します。この場合、引用符で囲まれた表記-"/"
を指定できる除算演算子を渡します。この関数は、入力配列と同じ形状の配列を返します。colSums
関数を使用して、指定された入力配列の列の合計を計算し、その結果を要約統計量として渡します。
require(stats)
v1 <- c(1.1, 1.2, 4.3, 1.3, 3.9, 2.1, 5.3, 3.8, 7.7, 8.8, 6.7, 2.6)
m1 <- matrix(v1, ncol = 4)
sweep(m1, 2, colSums(m1), FUN = "/")
出力:
[,1] [,2] [,3] [,4]
[1,] 0.1666667 0.1780822 0.3154762 0.4861878
[2,] 0.1818182 0.5342466 0.2261905 0.3701657
[3,] 0.6515152 0.2876712 0.4583333 0.1436464
sweep
関数は、関数パラメーターのデフォルト値を使用することもできることに注意してください。ユーザーが明示的に指定しない場合、関数は減算演算子であると見なされます。カスタム関数オブジェクトが渡されるときは、2つの引数が必要であることに注意してください。次のコードスニペットは、行列の対応する列の要素から各列の中央値を減算します。
require(stats)
v1 <- c(1.1, 1.2, 4.3, 1.3, 3.9, 2.1, 5.3, 3.8, 7.7, 8.8, 6.7, 2.6)
m1 <- matrix(v1, ncol = 4)
med.att <- apply(m1, 2, median)
sweep(m1, 2, med.att)
出力:
[,1] [,2] [,3] [,4]
[1,] -0.1 -0.8 0.0 2.1
[2,] 0.0 1.8 -1.5 0.0
[3,] 3.1 0.0 2.4 -4.1
scale
関数を使用して、R マトリックスの値を正規化する
行列データの正規化に役立つもう 1つの関数は、scale
です。これは、入力行列の各列を、-scale
という名前の 3 番目の引数の対応する値で除算します。scale
は、列の中央揃えに使用される center
引数を取ることに注意してください(詳細については、このページを参照してください)。この場合、後者の引数に FALSE
を割り当てます。これは、列の中央揃えを行う必要がないことを示しています。colSums
関数は、入力行列の各列の合計を計算し、それを scale
引数として渡すために使用されます。
require(stats)
v1 <- c(1.1, 1.2, 4.3, 1.3, 3.9, 2.1, 5.3, 3.8, 7.7, 8.8, 6.7, 2.6)
m1 <- matrix(v1, ncol = 4)
c1 <- colSums(m1)
scale(m1, center = FALSE, scale = c1)
出力:
[,1] [,2] [,3] [,4]
[1,] 0.1666667 0.1780822 0.3154762 0.4861878
[2,] 0.1818182 0.5342466 0.2261905 0.3701657
[3,] 0.6515152 0.2876712 0.4583333 0.1436464
attr(,"scaled:scale")
[1] 6.6 7.3 16.8 18.1
著者: 胡金庫