IoT, AI,機械学習 トピックス

勉強し過ぎはダメ?

投稿日:

Pythonを用いて直線曲線フィットさせてみたいと思います。

資料はこちら → 線形回帰

p.1  Scikit-learn及びmatplotlibを用いて、右下のグラフの回帰直線を描くスクリプトです。y=5x+誤差(乱数)にデータを作成し散布図を描いています。

p.2  Xとyのデータを指定した割合で分割。今回は学習用データ:テストデータ=7:3で分配します。 線形回帰として「LinearRegression()」を用います。「fit」でフィットさせます。すると回帰直線の切片、勾配だけでなく、予測値、誤差などを算出してくれます

p.3 直線は容易に回帰式を得られますが、左上のようなプロットの場合は、どうフィットさせますか? 1次、2次、3次と10次の式で残差が最小になるように回帰曲線をpythonを用いて描いてみました。 左上の表をご覧ください。回帰式の次数が増えると決定係数Rも増加して10次では=1と各点を全て通る曲線が描かれています。 新しいxの値に対するyの値を4つのグラフを用いて予測しようとする場合、どれを選択するでしょうか? 右上か左下のグラフが予測し易いと思いませんか。右下はフィットはしていますが、予測には使い難いですね。 このような状態を機械学習では「過学習」と呼びます。

学習し過ぎなのです。

p.4 過学習の状態をイメージするとこんな図になります。機械学習で青線のような回帰曲線を導いたとします。本来の予測曲線は黒の実線です。 xeという値に対する予測値yは予測して欲しいy値より下方にあり乖離が大きくなります。この状況を過学習と呼びます。

p.5 過学習を防止するために、損失関数(残差の平方和)に回帰係数の平方和あるいは残差の絶対値係数λを乗じてペナルティーとします。(損失関数)+(ペナルティー)が最小になるようにして回帰式を求めます。 平方和を用いるのが、「リッジ回帰」絶対値を用いるのが「LASSO回帰」です。

p.6にリッジ回帰、p,7にLASSO回帰のスクリプトを載せます。

p.10 直線回帰の場合は、線形回帰、リッジ回帰、LASSO回帰いずれとも大きなさはなさそうです。

過学習にペナルティーとは、勉強も、し過ぎはダメなのでしょうか?

本日用いたスクリプトはこちら → 回帰(スクリプト)

資料p.3の多項式フィッティングのスクリプトp.3にあります。 使用したx値とy値は別のテキストファイルから読み込んでいますので、ご注意ください。

-IoT, AI,機械学習, トピックス

Copyright© 進化するガラクタ , 2022 All Rights Reserved Powered by STINGER.