行列 R の値を正規化する

胡金庫 2023年1月30日
  1. sweep 関数を使用して、R の配列をスイープアウトする
  2. scale 関数を使用して、R マトリックスの値を正規化する
行列 R の値を正規化する

この記事では、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
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - R Matrix