一ヶ月ぶりの更新となってしまいました。今後しばらくはペースアップを図って行きます!さて、前回は曲線フィッティングをを実際に見ていきました。表すことができる多項式のnの値を増やすことで、曲線をたくさん曲げることができ、より過去のデータにフィットした線を引くことができるというものでした。今回は曲線フィッティングのメリット・デメリットと数学的背景をご紹介します。曲線フィッティングのメリット・デメリット曲線フィッティングのメリットをさらっと挙げると機械学習で使われる手法の中では比較的簡単に実装できる簡単な割には使われる場面が多いという点です。どちらかというとデメリットの方が重要です。}を求める計算に時間がかかる1つずつ説明していきます。データが少ないと思うように予測できるいい曲線が引けない次のGIFアニメをご覧ください。予測したいデータの個数が少ないと、曲線の引き方がかなり自由になってしまい、思ったような曲線を引くことができなくなってしまいます。これは機械学習全般にいえることですが、データは多いにこしたことはありません。増やし過ぎると過学習が起こる詳細は後ほどの数学的背景で述べますが、前回と今回の冒頭でご説明した通り、多項式のnを増やすことで曲線の曲げる数を増やすことができます。あれば増やせば増やすほどよさそうなものですが、「過ぎたるは及ばざるが如し」で、過学習と呼ばれる現象が起こります。データが少ないと思うように予測できるいい曲線が引けない」ではデータの個数が少なすぎて曲線が自由になってしまいましたが、その逆で曲線を曲げる回数を増やしすぎることで、曲線が束縛されてしまう起こる現象です。GIFアニメで見てみましょう。曲げる回数に束縛されてしまい、予測したいデータが予測できないことがわかるかと思います。データがたくさんある場合、なるべく多くのデータを通るような曲線を描きたくなりますが、多ければいいというものではありません。適切なnを見つけることが大事です。計算量が増えてしまう」に関しては、数学的背景でご紹介することにします。曲線フィッティングの数学的背景についてここからやっと、数学の話です。前にご紹介した微分の話や行列の話を復習しつつ、ご紹介していきます。曲線に関しては、今まで通りの多項式で表していきます。(ii)で決めたa_{i}を曲線の多項式に代入して曲線を変形させるでした。その2(級数と積分について)をご覧ください。決めて(ii)で曲線とフィットさせていきます。次の図のようなイメージです。差が、そのx座標における実データと曲線との「誤差」です。場合は「二乗誤差」といいます。二乗するかというと、実データと曲線がどちらが上にあるかによって誤差がプラス/マイナスが反転してしまうため、誤差をプラスにそろえるために2乗します。最後に、あとで計算を楽にするために、すべての誤差を足しあわせたものを2で割ります。上の図で見たように、ただ「データと曲線にどれだけ差があるか」を見ているにすぎません。そもそもという形でした。「誤差」なので、なるべく小さい方がいいような気がします。いうと、xとtの値は実データのx座標とy座標であり、定まった値です。wはそもそも、曲線を描くために適当に決めたものでした。遡ること4ヶ月前、当テックブログで微分について書きました。そこで「関数がある点で最大値、もしくは最小値を取るとき、その点で微分した値は0になる」という事実についてお話ししました。微分した値は0になる」ということになります。どのように求めればいいかのところまでにし、次回はその証明と数式をコードに落とし込む方法をおまけ編として公開する予定です。誤差関数が最小となる曲線の係数wの求め方いきなり行列が出てきていたりしていますが、以下がwの求め方です。複雑に見えますが、実際に複雑です。計算結果だけを求めたいのであれば、前回利用したPythonのscikit-learnライブラリを使うことで、wの値をすぐに求めることができます。このwの値を取得することで、ようやく曲線を描くことができます。実際にコードで書いてみる前回はscikit-learnライブラリで結果だけを求めましたが、今回は自力で最小二乗法による曲線フィッティングを書いてみました。上述の通り、コードの具体的な説明は次回行います。umentu/least_square※ソースコードの改変、再配布は認めますが、一切の責任は持たないことをご了承して頂いた上でご利用下さい。環境に関しては、前回の通りこちらをごらんください。わからない場合はFacebookでお気軽にご相談ください。plt.show()以下がコードの実行結果です。なんとなくフィッティングしている感じがしますね。次回は、おまけ編として、今回求めたwの証明と、機械学習を始めた時に陥りがちな、どのようにしてコードに落とし込むかの方法をご紹介したいと思います。次回まではかなりゆっくり進めていきますが、次回以降は1テーマ1回分で更新していく予定です。編集部twiterfacebookAWSを中心としたクラウドインフラやオンプレミス、ビッグデータ、機械学習などの技術ネタを中心にご紹介します。