機械学習

回帰直線を求める際にデータを正規化してみた

このブログの以下の記事で、最小2乗法と最急降下法を用いて回帰直線を求めている。

最小2乗法と最急降下法を用いて回帰直線を求めてみた 以下のように、入力データ\(x\),\(y\)の値が与えられた場合を考える。 このときの、各点との距離が最小になるような\...

上記記事のように回帰直線を求める際、入力データが大きいと計算が難しくなるが、「正規化」や「標準化」の手法を利用すれば、入力データの値をあらかじめ小さく揃えておくことができる。今回は、回帰直線を求める際に入力データを正規化してみたので、そのサンプルプログラムを共有する。

正規化とは、入力データの値の範囲を0~1に揃えておく手法で、入力データのx座標を正規化するには、以下の公式を利用する。

正規化の公式
出所:正規化・標準化を徹底解説

なお、入力データのy座標も、以下の公式で正規化できる。
\[
\begin{eqnarray}
y_{norm}^i = \frac{y^i – y_{min}}{y_{max} – y_{min}}
\end{eqnarray}
\]

また、入力データのx座標を正規化した値を元に戻すには、先ほどの公式を変形した、以下の式を利用する。
\[
\begin{eqnarray}
\frac{x^i – x_{min}}{x_{max} – x_{min}} &=& x_{norm}^i \\
x^i – x_{min} &=& x_{norm}^i(x_{max} – x_{min}) \\
x^i &=& x_{norm}^i(x_{max} – x_{min}) + x_{min}
\end{eqnarray}
\]

同様に、入力データのy座標を正規化した値を元に戻すには、以下の式を利用する。
\[
\begin{eqnarray}
y^i = y_{norm}^i(y_{max} – y_{min}) + y_{min}
\end{eqnarray}
\]

入力データの最大値・最小値は、NumPyのmax関数・min関数を利用して算出できる。そのプログラムと実行結果は、以下の通り。

入力データの最大値・最小値

また、先ほどの正規化/正規化戻しの式を利用して、入力データを正規化/正規化戻しを行った結果は、以下の通りで、正規化した入力データは0~1の範囲内に収まり、正規化戻しを行うと元に戻ることが確認できる。

入力データの正規化・正規化戻し
削除または保存していないWordドキュメントの復元方法【4DDiG Windowsデータ復元】ワード(Word)データ等のファイルを誤って削除してしまった場合は、通常はデータの復元ができませんが、4DDiGというソフトウェアを利用...

さらに、入力データを正規化/正規化戻しをグラフ化した結果は、以下の通り。

正規化・正規化戻し(グラフ化)



サラリーマン型フリーランスSEという働き方でお金の不安を解消しよう先日、「サラリーマン型フリーランスSE」という働き方を紹介するYouTube動画を視聴しましたので、その内容をご紹介します。 「サ...

次に、入力データを正規化した後で、最小2乗法と最急降下法を用いて回帰直線を求めた結果は、以下の通り。

回帰直線の計算(正規化後)

なお、最小2乗法と最急降下法を用いて回帰直線を求める方法については、以下の記事を参照のこと。

最小2乗法と最急降下法を用いて回帰直線を求めてみた 以下のように、入力データ\(x\),\(y\)の値が与えられた場合を考える。 このときの、各点との距離が最小になるような\...

さらに、正規化後の回帰直線(\(y=ax+b\))の\(a\),\(b\)の値も算出することができる。その算出方法は、以下の通り。
\[
\begin{eqnarray}
\frac{y – y_{min}}{y_{max} – y_{min}} &=& \frac{a_{norm}(x – x_{min})}{x_{max} – x_{min}} + b_{norm} \\
\frac{y – y_{min}}{y_{max} – y_{min}} &=& \frac{a_{norm}x – a_{norm}x_{min}}{x_{max} – x_{min}} + b_{norm} \\
\frac{y – y_{min}}{y_{max} – y_{min}} &=& \frac{a_{norm}x}{x_{max} – x_{min}} – \frac{a_{norm}x_{min}}{x_{max} – x_{min}} + b_{norm} \\
y – y_{min} &=& \frac{a_{norm}(y_{max} – y_{min})}{x_{max} – x_{min}}x – \frac{a_{norm}x_{min}(y_{max} – y_{min})}{x_{max} – x_{min}} + b_{norm}(y_{max} – y_{min}) \\
y &=& \frac{a_{norm}(y_{max} – y_{min})}{x_{max} – x_{min}}x – \frac{a_{norm}x_{min}(y_{max} – y_{min})}{x_{max} – x_{min}} + b_{norm}(y_{max} – y_{min}) + y_{min}
\end{eqnarray}
\]

以上より、\(a\),\(b\)の値は以下のようになる。
\[
\begin{eqnarray}
a &=& \frac{a_{norm}(y_{max} – y_{min})}{x_{max} – x_{min}} \\
b &=& -\frac{a_{norm}x_{min}(y_{max} – y_{min})}{x_{max} – x_{min}} + b_{norm}(y_{max} – y_{min}) + y_{min}
\end{eqnarray}
\]

実際に、正規化後の回帰直線(y=ax+b)のa,bの値を計算し、グラフ化した結果は、以下の通り。

回帰直線のa,bの計算

要点まとめ

  • 回帰直線を求める際、入力データが大きいと計算が難しくなるが、「正規化」や「標準化」の手法を利用すれば、入力データの値をあらかじめ小さく揃えておくことができる。
  • 正規化とは、入力データの値の範囲を0~1に揃えておく手法のことをいう。