Notebook今回も線形回帰について、線形回帰モデルを求めるために前回は最小二乗法という方法について学びましたが、今回は勾配降下法について学びます。モデルを求めるために今回は勾配降下法(最急降下法)について学んでいきます。今回は実装例から入りたいと思います。やっていることや理論については後から追っていきたいと思います。w1=[-130.705293]dMSE=[-0.099914,0.018306]MSE=5078.154092最小二乗法と同様に以下の一時関数のw0とw1を求めています。前回ライブラリによる求めた結果は以下なので、ほぼ同様の結果が得られていると言ってよさそうです。-130.731簡単に言うと初期パラメータを(1.1)として、そこから勾配に沿って位置を徐々にずらしていき最適な解を求めているという具合です。ここで苦労したのがパラメータである学習率の設定です。ここが苦労すべきところなのかどうかがいまいち分からないのですが、今回の私が用意したデータだと参考書通りでは値が発散し、うまく値が求められませんでした。※知識不足で何が悪いのか分からず調整に一晩かかりました。0.002今回は結局上記の通りとしました。学習率が適切に設定されていれば初期値がなんであってもだいぶ正確に求められるようです。興味がある方は一緒にやっていることを読み解いていきましょう。勾配のイメージをつかむここでいう勾配とはなんのことなのかまずはそのイメージを掴みましょう。以前実装した3Dグラフの表示範囲と角度を変えて表示してしました。70)plt.grid(True)plt.show()・出力結果グラフ上に一点を取ったときの見た目上の傾斜度がそのままの勾配になります。勾配法とはこの勾配に沿って進めていき、勾配が最小になる点を探していたのです。この勾配は求められるものなのでしょうか。勾配を求める勾配という言葉は実は過去の記事でも扱っています。数学を扱ったときの勾配ベクトルです。勾配ベクトルは以下の通りで偏微分を用いるのでした。今回は誤差Jのグラフを表示していますので、誤差Jに対する偏微分を行います。勾配ベクトルは次のようになります。Pythonで言うと以下が勾配を表現している部分にあたります。d_w1xとtにそれぞれサンプルのデータが入ります。1/NとΣによる総和をmeanで平均として表現しているわけです。これで勾配が求められていることが分かりました。次はこれにより勾配から次の点を求めていきます。勾配を利用し底を求める勾配をたどって最小点を求めることはグラフ上では「底」を求めていることに等しいです。次にある点(初期値)から勾配を利用して底に近づけていきます。勾配ベクトルはそのままの状態で勾配の方向と大きさを示しています。底方向に進めていくためにはマイナスの値する必要があります。ある点から勾配ベクトルに沿って次の点に進むのは以下の式により表現されます。ここの「α」が先ほど苦労したといった学習率をというものです。ここまでの経緯で、学習率が適切でないと元の点からの移動距離が大きすぎて様々な点をいったりきたりして発散してしまっていたのだと予測できます。Pythonの実装では以下の部分にあたります。alphay*dmse[1]これをfor文で繰り返すことにより、座標を勾配に沿ってずらしていたということです。「dmse」は勾配を表しているので、底に近づけば近づくほど勾配が小さくなると予測されますので、勾配が十分に小さくなったときに演算を打ち切るのが以下の部分です。break「absolute」は絶対値を求める関数です。これでPythonによる勾配降下法の意味が概ね読みとれたのではないかと思います。最後に求めた回帰モデルをデータプロット上に示しておきます。今回用いた勾配降下法では必ずしも最適な点が求められているとは限りません。今回の方法では初期値から最も近い底を求めているため、複数の底が存在する場合は初期値によって結果が変わってくると理解できると思います。以下は用意がしやすい二次元グラフで考えていますが、三次元グラフであっても同じことです。実用レベルの機械学習ではいくつもの初期値から分析を行うようです。上記の流れから平均二乗誤差について考えてみます。最初に示した出力結果での以下が平均二乗誤差にあたります。MSE=5078.154092これは文字通り誤差の二乗を表していますので、感覚的にも分かりやすくするために平方根(ルート)をとります。npy.sqrt(5078.154092)print(round(result,2))・出力結果71.26この値がいわゆる標準偏差(SD)と言われているものです。SD=71.26は求めた関数とデータプロットとの誤差距離を表しています。比較的数値が大きめのデータをつかっていますのでまぁ妥当なのかもしれません。その6(指数対数)またまたしばらくサボっていました。その5(行列2)長くなってきたので一旦切りました。回帰編(多次元モデル)【Docker】sudoなしでDockerコマンドを実行する月別アーカイブはてなブログをはじめよう!wantanBlogさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。