データ分析において、対象のデータをスケーリングしたい場合、例えば、平均0・分散1になるよう変換する場合が多いと思います(標準化)。MATLABでは、normalize
関数を用いれば1行で済むため、非常に便利です。しかし、同様の式を用いて、別のデータも標準化したいときがあります。または、標準化したものをもう一度もとのスケールに直したい、といったこともあります。その場合は、normalize関数の戻り値に、その標準化に用いた平均値・標準偏差を指定することで、そのような追加の変換や、もとのスケールへの再変換が簡単に行えます。
公式ドキュメントは以下の通りです。
はじめに、normalize関数は、
N = (A - C) ./ S
を満たすC
とS
を配列として返します。
とあります。Cが平均、Sが標準偏差であると思われます。methodtype
で指定できる、標準化の方法が複数ありますが、今回は、既定であるz-scoreとします。
整数を30個生成してみます。
data=randi(100,[30,1]);%100までの整数を30個生成する
これをnormalize関数を用いて標準化します。ここでは、後ろ2つの戻り値を指定することがポイントです。先頭の1つしか指定しない場合が多い気がしますが、このように3つ指定すると便利です。。
[N,average,stdev]=normalize(data); % 戻り値にaverage, standard deviationを指定できる
標準化したあとの値を見てみます
N
N = 30x1 -1.0634 1.7534 -1.3910 1.1311 1.2621 1.4259 -1.1289 -0.1135 -0.5721 1.2294
検算のため、平均を引いて、標準偏差で割れば同じ値になることを確認します。
N_check=(data-average)/stdev
N_check = 30x1 -1.0634 1.7534 -1.3910 1.1311 1.2621 1.4259 -1.1289 -0.1135 -0.5721 1.2294
逆に、標準化したあとに、もとのスケールに戻すことを行います。
data_check=N*stdev+average
data_check = 30x1 11 97 1 78 82 87 9 40 26 81
もとのデータと一致していることを確かめます。
data
data = 30x1 11 97 1 78 82 87 9 40 26 81
以上、normalize関数を用いるときに、別のデータも標準化する方法、そして、標準化したものをもう一度もとのスケールに戻す方法を簡単にまとめました。