jnobuyukiのブログ

研究していて困ったことやその解決に関するメモ。同じように困ったあなたのために。twitter ID: @j_nobuyuki

R言語scale()での正規化バリエーション

以前、データの正規化にはいろいろな方法があることを述べました。
数量の正規化:方法の違いは何を意味するか? - jnobuyukiのブログ

いろいろな正規化をやってくれるコマンドにR言語のscale()があります。
この関数は、何も考えずに使ってもそれなりに動きます。
しかし、引数として含まれるパラメータを利用すると、もっと便利です。

scale()の引数

scaleには3つの引数があります。

1. 行列(matrix)オブジェクト: ここに当てはめた変数を正規化します。
2.center: パラメータの値として3種類あります。

  • TRUE: デフォルトの値です。行の平均値を全てのケースから引きます。
  • FALSE: 引き算をしません。
  • 数値ベクトル: 数値ベクトルの値をケースのそれぞれから引きます。

3. scale: centerと同様3種類の設定が可能です。

  • TRUE: デフォルトの値です。変数のSDでケースを割ります。
  • FALSE: 割り算なしになります。
  • 数値ベクトル: 数値ベクトルの値でケースのそれぞれを割ります。
標準偏差を考慮した正規化

標準偏差を考慮した正規化は次のように書くことができます。

#変数の定義
a<- seq(1:10)

#正規化
scale(a)

#引数を明示する場合
scale(a, center = TRUE, scale = TRUE)
最小値を0、最大値を1とする正規化
#変数の定義
b <- seq(from = 5, to = 25, by = 5)

#最小値
b_min <- min(b)

#最大値
b_max <- max(b)

#正規化
scale(b, center = b_min, scale = (b_max - b_min))
カテゴリー変数を数値変換後、中心化する場合
#変数の定義
c <- c(0,0,0,0,0,1,1,1,1,1)

#数値の中心化
scale(c, center = TRUE, scale = FALSE)