はじめに
数年前、自分は社内の需要予測モデルをひとりで抱えていた。検証データでのスコアは悪くない。それなのに本番に出すと予測が外れる。コードを何度見直してもバグはない。原因は交差検証の切り方で、時系列の未来の情報が学習側に漏れていた。
この手の失敗は、ネットの断片的なチュートリアルでは見つけにくい。手順は書いてあっても、なぜその手順なのかは書かれていない。自分がつまずいていたのは実装の腕ではなく、その前提にある考え方だった。
そこから機械学習の本をまとめて読み直した。読む順番を間違えるとかなり苦しい、というのが正直な感想である。最初に分厚い理論書を開けば挫折する。軽い入門書だけで止めれば、現場で起きる微妙な不具合の説明がつかない。
この記事では、手を動かしながら読んで実際に効いた4冊を、読む順番つきで紹介する。全体像の地図、アルゴリズムの中身、PyTorchでの実装、最後に統計的な裏付けという流れだ。日本語で読めるものを優先した。
① 機械学習 100+ページ エッセンス — Andriy Burkov
著者のBurkovは機械学習の博士号を持ち、企業でデータサイエンスチームを率いてきた実務家である。短く書くことに全力を注いだ本を世に出した人物として知られる。
中身は、教師あり学習から勾配降下法、SVM、決定木、ニューラルネットワーク、特徴量エンジニアリング、評価指標までを100ページ強に圧縮したものだ。削られているのは冗長な説明で、数式は必要なぶんだけ残っている。
特に効くのは後半だ。データリーケージ、不均衡データ、正則化といった現場で必ず踏む落とし穴が、短い節で淡々と並んでいる。自分の交差検証の失敗も、ここに一行で書いてあった。
薄いので一周が早い。週末に通して読み、気になった箇所に付箋を貼る使い方が合っている。
注意点として、プログラミング自体が初めての人には向かない。各話題の説明が短いので、手を動かす材料は別に用意する必要がある。
こんな人に: 機械学習の全体像をまず一枚の地図にしたい人
② [第3版]Python機械学習プログラミング 達人データサイエンティストによる理論と実践 — Sebastian Raschka, Vahid Mirjalili
Raschkaは大学で統計学を教えていた研究者で、論文も書けばライブラリも書く。理論の説明とコードの質が両立している本は意外と少なく、これはその数少ない一冊である。
パーセプトロンをNumPyで素朴に実装するところから始まり、前処理、次元削減、モデル評価、アンサンブル学習、クラスタリングと進む。scikit-learnのAPIの叩き方だけでなく、その裏で何が計算されているかを自分の手で確認させる構成だ。
自分に一番刺さったのはモデル評価の章だった。学習曲線の読み方、層化k分割、ネストした交差検証の話が順番に出てくる。冒頭に書いた失敗の答えはここにあった。
アンサンブルの章も良い。バギングとブースティングの違いを実装レベルで追えるので、勾配ブースティングのハイパーパラメータをいじるときの判断が変わる。
1000ページ近いので通読は現実的ではない。詰まった分野の章だけ開く辞書として机に置くのが使いやすい。
こんな人に: scikit-learnは書けるが中身がブラックボックスのままな人
③ Python機械学習プログラミング PyTorch&scikit-learn編 — Sebastian Raschka, Yuxi Liu, Vahid Mirjalili
②と同じ著者陣に、実務寄りの書き手であるYuxi Liuが加わった姉妹本だ。前半は従来どおりscikit-learnベースの基礎、後半がまるごとPyTorchになっている。
テンソルと自動微分から入り、学習ループを自分で書き、そのあとで高水準APIに移る。CNN、RNN、Transformer、GAN、グラフニューラルネットワーク、強化学習の入口まで一冊で通る。
自分が助かったのは、学習ループを手書きしてから抽象化されたAPIに移る順番だった。ここを飛ばすと、学習が進まないときにどこを見ればいいか分からなくなる。転移学習の章も、実案件でそのまま下敷きにできた。
②との重複はそれなりにある。基礎部分が被るので、両方買うならPyTorch編を先に通して、理論を厚く読みたくなったら②に戻る順でいい。
こんな人に: scikit-learnから深層学習フレームワークに移りたい人
④ 統計的学習の基礎 ―データマイニング・推論・予測― — Trevor Hastie, Robert Tibshirani, Jerome Friedman
著者の3人はスタンフォードの統計学者で、Lassoや一般化加法モデルといった手法そのものを作った側の人間である。この分野の標準文献として長く参照されてきた。
正則化付きの線形手法、スプライン、カーネル法、モデル選択、ブースティング、ランダムフォレスト、主成分分析と、手法の背後にある数学が丁寧に展開される。コード本が「こう書く」を教えるのに対し、この本は「なぜ効く」を示す。
自分にとっての山場はバイアスとバリアンスの分解と、モデル選択の章だった。検証スコアと本番性能がずれる理由を、感覚ではなく式で説明できるようになる。レビューで判断根拠を聞かれたときに強い。
1000ページ超えの重量級なので通読は勧めない。使っているアルゴリズムの章だけを拾い読みし、数式で詰まったら手を動かして確かめるのが現実的だ。
こんな人に: ハイパーパラメータの選択を勘ではなく根拠で説明したい人
まとめ
| ステップ | 読む本 | 得られるもの |
|---|---|---|
| 1. 全体像 | 機械学習 100+ページ エッセンス | 用語と手法の地図、落とし穴の一覧 |
| 2. 深掘り | [第3版]Python機械学習プログラミング | アルゴリズムの中身と評価の作法 |
| 3. 実践 | PyTorch&scikit-learn編 | 深層学習を自分で組む実装力 |
| 4. 裏付け | 統計的学習の基礎 | なぜ効くのかを説明する言葉 |
今の課題から1冊選ぶなら、こう考えるといい。
- 用語が分からず会話についていけない → 100+ページ エッセンス
- モデルは動くが精度の改善が手探り → [第3版]Python機械学習プログラミング
- PyTorchのコードをコピペ以上に扱いたい → PyTorch&scikit-learn編
- 手法選択の理由を他人に説明できない → 統計的学習の基礎
4冊すべてを揃える必要はない。自分の場合、最初の失敗を説明できるようになった時点で、残りの本を読む動機が自然に出てきた。詰まっている一点に対応する1冊から始めるのが早い。