はじめに
数年前、自分は業務でいきなり「売上予測のモデルを作ってほしい」と言われた。ネットの記事をつなぎ合わせて scikit-learn のランダムフォレストを動かし、それっぽい数字が出たところで満足していた。
ところが上司に「この精度は信用できるのか」と聞かれて、何も答えられなかった。交差検証をなぜ切るのか、特徴量のスケーリングがどのモデルに効くのか、過学習しているかをどう判断するのか。全部が曖昧なまま手が動いていただけだった。
そこから腹を括って、書籍で順番に埋めていくことにした。コピペで動くコードは検索すれば無限に出てくる。足りなかったのは、手元の結果を自分で評価できる判断軸のほうだった。
ここでは、そのときに実際に通った5冊を「手を動かす3冊」と「理論を固める2冊」に分けて紹介する。順番どおりに読む必要はないが、上から下に行くほど数式が増えてコードが減る構成にしてある。
手を動かして全体像をつかむ3冊
① Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎 — Andreas C. Müller, Sarah Guido
著者の Müller は scikit-learn のコア開発者の一人だ。ライブラリを作っている側の人間が、その使い方と設計思想をまとめた本という点でまず信頼できる。
内容は教師あり学習と教師なし学習の主要アルゴリズムを一通り回したあと、特徴量エンジニアリングとモデル評価に紙面を割く構成になっている。線形モデル、決定木、SVM、k-meansあたりが図とコードで並ぶ。
自分にとって価値が大きかったのは後半だ。グリッドサーチとパイプラインの章を読んで、前処理をモデルと一緒に組むべき理由がようやく腑に落ちた。データリークを自分で作っていたことにも気づいた。
数学的な導出はほぼ出てこない。そのぶん「どのモデルがどんなデータ形状で強いか」の感覚が速く身につく。
こんな人に: Pythonは書けるが機械学習の全体像が頭に入っていない人。
② [第3版]Python機械学習プログラミング 達人データサイエンティストによる理論と実践 — Sebastian Raschka, Vahid Mirjalili
Raschka は機械学習の研究者で、scikit-learn 互換の拡張ライブラリ mlxtend の作者としても知られている。
この本の特徴は、アルゴリズムを使う前に自分で実装させるところだ。パーセプトロンや勾配降下法を NumPy で書いてから、同じことを scikit-learn で済ませる流れになっている。遠回りに見えて、理解の定着がまったく違う。
カバー範囲も広い。次元削減やアンサンブル学習から、センチメント分析、Keras での深層学習、GANや強化学習まで進む。第3版では scikit-learn の新しい API と Keras 周りが入っている。
ただし分量は多い。自分は最初から通読しようとして一度挫折した。興味のある章だけ拾って読むほうが続く。
こんな人に: 中身を理解せずにライブラリを呼ぶ状態から抜けたい人。
③ PythonとKerasによるディープラーニング — François Chollet
著者は Keras の作者そのものだ。深層学習のフレームワークを設計した人間の説明は、やはり抽象度の置き方がうまい。
畳み込みニューラルネットから始まり、データ拡張、学習済みモデルの転移、テキストと時系列の扱い、生成モデルまで進む。どの章も短いコードがついていて、写経しながら読める。
印象に残っているのは、深層学習が効く問題と効かない問題を明確に線引きしているところだ。表形式データなら勾配ブースティングで十分というような話を、著者自身の立場で書いている。
テンソルやレイヤーの考え方を言葉で説明してくれるので、フレームワークが変わっても通用する部分が多い。
こんな人に: ニューラルネットを業務で使う前に、適用範囲の判断を身につけたい人。
理論を固める2冊
④ パターン認識と機械学習 上 - ベイズ理論による統計的予測 — C. M. Bishop
Bishop はマイクロソフトリサーチで長く研究を率いてきた研究者だ。この本は通称PRMLとして、国内でも読書会が何度も開かれてきた定番にあたる。
上巻は確率論の復習から入り、線形回帰と線形分類をベイズの枠組みで整理していく。カーネル法やグラフィカルモデルへ繋がる土台がここで作られる。
コードは載っていない。代わりに、同じ手法を最尤推定とベイズ推定の両方から見る視点が手に入る。正則化がなぜ事前分布として解釈できるのかを理解したとき、実務で選んでいたハイパーパラメータの意味が変わって見えた。
数式を飛ばすと読めない本なので、実装系の本と並行して少しずつ進めるのがいい。自分は章ごとに手で式を追う形で半年かけた。
こんな人に: 手法の裏側にある確率モデルを自分の言葉で説明できるようになりたい人。
⑤ 深層学習 — Ian Goodfellow, Yoshua Bengio, Aaron Courville
筆頭著者の Goodfellow は GAN の提案者、Bengio は深層学習の基礎研究で知られる研究者だ。この分野の教科書として最も参照されている一冊になる。
線形代数と確率の基礎から始まり、最適化アルゴリズム、正則化、畳み込みネット、再帰型ネットへ進む。後半は自己符号化器、表現学習、モンテカルロ法、近似推論、深層生成モデルといった研究寄りの話題が並ぶ。
実装の指針としても使える。学習がうまく進まないときの対処を扱った章は、バッチ正規化や初期化の選択を考える際に何度も戻った。
通読を目的にしない使い方が現実的だと思う。論文を読んで前提知識が足りないと感じたときに引く辞書として置いておくと効く。
こんな人に: 論文を読み始めた段階で、理論の抜けを埋めたい人。
まとめ
| ステップ | 読む本 | 得られるもの |
|---|---|---|
| 1 | Pythonではじめる機械学習 | 主要アルゴリズムと評価手法の全体像 |
| 2 | Python機械学習プログラミング | 自分で実装できる手触りと広いカバー範囲 |
| 3 | PythonとKerasによるディープラーニング | 深層学習の適用判断と実装パターン |
| 4 | パターン認識と機械学習 上 | ベイズ的な見方と確率モデルの基礎 |
| 5 | 深層学習 | 研究論文を読むための理論の土台 |
今の課題別に1冊だけ選ぶなら、こう考えるといい。
- 用語が分からずチュートリアルで詰まる: Pythonではじめる機械学習
- ライブラリの中身がブラックボックスで不安: Python機械学習プログラミング
- 深層学習を使うべきか判断できない: PythonとKerasによるディープラーニング
- 手法の選択理由を説明できない: パターン認識と機械学習 上
- 論文の数式で止まる: 深層学習
5冊そろえる必要はない。自分も最初の1冊を読み切ったところで、業務の相談に答えられる範囲がはっきり広がった。詰まっている場所に一番近い本から始めるのが早い。