今回は簡単に標準化とそれを元の値に戻す方法を紹介します。
ちなみにscikit-learnを使います。
標準化
まず標準化の数式を紹介しておきます。
標準化はデータ群\(X\)とその平均\(\mu\)と標準偏差\(\sigma\)を使って以下のように行います。
$$\begin{aligned}
Z = \frac{(X-\mu)}{\sigma}
\end{aligned}$$
Z = \frac{(X-\mu)}{\sigma}
\end{aligned}$$
データをその平均で引いてそこから標準偏差で割っています。
scikit-learnではpreprocessingモジュールのStandardscalerを使って以下のように標準化を行います。
>>> from sklearn.preprocessing import StandardScaler >>> data = [[0],[1],[2],[3],[4],[5]] >>> sc = StandardScaler() >>> sc.fit(data) StandardScaler(copy=True, with_mean=True, with_std=True) >>> sc.transform(data) # 標準化 array([[-1.46385011], [-0.87831007], [-0.29277002], [ 0.29277002], [ 0.87831007], [ 1.46385011]])
元に戻す
標準化したデータを元に戻す時には
Standardscalerのinverse_transformを使います。
>>> result = sc.transform(data) # 標準化 >>> sc.inverse_transform(result) array([[0.], [1.], [2.], [3.], [4.], [5.]])
StandardScalerを使わずに元に戻す
StandardScalerを使わずに標準化したデータを元に戻してみます。
標準化した数式から元のXを求めると
$$\begin{aligned}
X = \sigma Z + \mu
\end{aligned}$$
X = \sigma Z + \mu
\end{aligned}$$
では、実装していきます。
StandardScalerで正規化した場合、平均、標準偏差は以下のように取得できます。
>>> mean, scale = sc.mean_, sc.scale_
あとはこれを使って、
>>> result*scale + mean array([[0.], [1.], [2.], [3.], [4.], [5.]])
無事元に戻すことができました。