【scikit-learn】標準化と元に戻す方法

今回は簡単に標準化とそれを元の値に戻す方法を紹介します。

ちなみにscikit-learnを使います。

標準化

まず標準化の数式を紹介しておきます。
標準化はデータ群\(X\)とその平均\(\mu\)と標準偏差\(\sigma\)を使って以下のように行います。

$$\begin{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}$$

では、実装していきます。
StandardScalerで正規化した場合、平均、標準偏差は以下のように取得できます。

>>> mean, scale = sc.mean_, sc.scale_

あとはこれを使って、

>>> result*scale + mean
array([[0.],
       [1.],
       [2.],
       [3.],
       [4.],
       [5.]])

無事元に戻すことができました。

参考文献

https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html#sklearn.preprocessing.StandardScaler

タイトルとURLをコピーしました