機械学習を勉強したいけど何を勉強をしたらいいか悩んでる人って結構多いと思います。

今は参考書がたくさんあり昔よりは学習しやすい環境になったみたいですが、私としては今度は情報が溢れ返って有益な情報を判断できない状況ではないかという気がします。
そこで機械学習の脱初心者レベルを目指して私が何を勉強してきたかを書いていきます。私が東大人工知能開発団体HAIT(現HAIT Lab)に在籍していた際に学んだことを基に紹介しています。随時参考記事を作るので参考にしてください。
1. 機械学習が何かを知る
まずはAIや機械学習とは一体どういうもので、どんな場面に使われているのかという概要を学びましょう。ここではプログラミングの知識は必要ありません。IT・非ITに関わらず知っておくべき内容だと思います。
機械学習とは一言で表すとデータからパターンや特徴を抽出することです。
例えば機械学習を使って過去の株価から現在の株価を予測することができたとします。すると予測の根拠となるデータの特徴を抽出することで、株価を左右する要因がわかり株の売買の意思決定につながるといった使い方ができます。
2. Pythonで実装しながら機械学習を学ぶ
機械学習の目的など流れを理解することができたら次は自分の手を動かして勉強していきましょう。プログラミング言語Pythonのscikit-learnというライブラリを使う事によって比較的簡単に機械学習を実装することができます。

本ブログで紹介しているコードも概ねscikit-learnを使って実装しているので使い方の参考にしてください。
機械学習のワークフローを理解する
機械学習を学ぶにあたって私たちが知っておくべきことは手元にデータが手に入った時、データから機械学習によって価値を見出すためにどのような手順を辿るのかということです。
一般的に機械学習のワークフローは下のようになっています。私たちが機械学習を実装する上ではこのワークフローの各ステップの技術や実装方法について学べば良いという事になります。

データの準備

本来はまずデータの収集から考えるべきですが、勉強という観点から上のような表形式のデータが手に入った状況からスタートします。各列は項目(特徴量)を表し、各行は1つのサンプルを表しています。
データを見ると単純に数値の項目もあれば文字列で表されている項目もあります。このようなデータをpandasというpythonのライブラリなどを使って機械学習の学習モデルに入力できる形(数値)に整形する方法を学びましょう。

モデルを構築する
データの整形が終わったら予測や分類を行うための学習モデルを構築します。一口に予測や分類といっても予測の仕方、分類の仕方(アルゴリズム)はたくさんの種類があるので各アルゴリズムの特徴を実装しながら学びましょう。
アルゴリズムは本当に多種多様ですが私たちがまず学ぶべきは以下のアルゴリズムです。参考記事は随時載せていきます。(*は教師なし学習)
- 単回帰、重回帰、多項式回帰
- パーセプトロン
- ロジスティック回帰
- SVM
- 決定木
- ランダムフォレスト(バギング)
- 勾配ブースティング木(ブースティング)
- *主成分分析
- *k-means法(クラスタリング)
モデルの性能を評価する
学習モデルを構築することができたら用意した整形済みのデータを入力することで予測結果や分類結果を得ることができます。つまり学習モデルさえ構築してしまえばすぐに予測結果自体は手に入るのです。それもscikit-learnならfit()の一行で完了してしまいます。
次に私たちがすべきことは予測結果がどの程度信頼できるものかを評価しなくてはなりません。
例えば株価の予測モデルを構築して8/1,2の株価をデータを使って8/3の株価を予測したとします。モデルから得られる予測結果と8/3の実際の株価を比較することで、構築したモデルがどの程度の精度を持っているかを評価することができます。

株価の例では単純に正解と予測値の差を評価指標としましたが、実際は取り組む課題の性質によって評価指標は様々存在します。この評価指標について学びましょう。
より良いモデルを構築する
学習モデルに改善の余地がある場合はモデルを改善していきます。改善方法としては大きく二つに分けられます。
- 入力データを加工する(特徴量エンジニアリング)
- モデルのパラメータを最適化する
一つ目としては入力するデータを加工する特徴量エンジニアリングという方法です。
例えば入力データの対数をとってみるとか、新しい特徴量(項目)を自分で作ってみるなど本当に様々な方法があります。
特徴量エンジニアリングについては様々な手法があったり閃きであったり体系的にこれを学びなさい!というものが存在しないのでここについては実際に勉強を進めながら学ぶのがベストだと思います。
Kaggleなどデータ分析の場において様々な人たちが自分たちの特徴量エンジニアリングを紹介してくれているので参考にしてみるのがいいと思います。

二つ目としてはモデルのパラメータを最適化する手法です。学習モデルによっては私たちが自分の手で設定するパラメータが存在するのでこれを最適化していきます。
代表的な方法としてグリッドサーチという手法があるのでまずはここを理解しましょう。
以上が機械学習を学ぶにあたって最低限押さえておきたい項目です。他にも知っておいた方が良いことはいろいろありますが、適宜補足していきます。
3. 深層学習を学ぶ
一通り機械学習を自分で実装できるようになったら深層学習(ディープラーニング)を学びましょう。深層学習は機械学習の中の一手法なのですがあえて項目を分けて紹介します。
まずは先ほどと同様に深層学習とはどのようなものなのか概要を勉強しましょう。
ニューラルネットワークを理解する
深層学習を学ぶにあたって中心となるのがニューラルネットワークというアルゴリズムです。深層学習はニューラルネットワークが何かを理解しないと始まらないので気合を入れて学びましょう。
ここで一つ覚えておいて欲しいことがあります。
これから深層学習を実装してみると感じる人が出てくると思うのですが、深層学習はライブラリを使って実装すると手軽にモデルが構築できる反面、何が起きているのか全くわからないという状態になりがちです。

ライブラリの通りモデルを組んだら何だか結果が出てきたな…
という感覚です。
なので必要に感じたらで構わないので以下の2点はぜひ実践してみて欲しいです。
- ニューラルネットワークの計算にどのような数学が使われているのか勉強する
- ライブラリを使わずにニューラルネットワークを実装する
なかなか骨の折れる作業ですが得るものはとても大きいので挑戦してみてください。上の2点については下の記事で紹介しているので参考にしてみてください。
Kerasを使って深層学習モデルを実装する
深層学習ではKerasというライブラリを使うと簡単に学習モデルを構築することができます。機械学習でいうscikit-learnのような存在です。
まずはKerasを使ってニューラルネットワークを実装してみましょう。MNISTという手書き数字のデータセットが有名なので手書き数字をニューラルネットワークに学習させて正しく数字を判別できるかを実装してみましょう。

その先へ
ここまで到達できれば後は自分で勉強を進めていくことができると思います。
人によってはまだまだ初心者レベルだと思うかもしれませんが、自分で勉強を進められるようになれば立派に初心者は脱していると思います。ここから先はCNNやRNN、強化学習…などまだまだ学ぶべきことが様々ありますが頑張って勉強していきましょう。