読者です 読者をやめる 読者になる 読者になる

StatModeling Memorandum

StanとRでベイズ統計モデリングします. たまに書評.

「Python機械学習プログラミング」 Sebastian Raschka(著), 株式会社クイープ(訳), 福島真太朗(監訳)

書評 Python

僕はベイズ統計モデリングをはじめる前(5年ほど前)までは主に機械学習をしていました。その頃は平易な成書はあまりなくて、サポートベクターマシンの理論の難しい本を読んだり、Weka本(当時はこれ)を読みながら実装していたことを思い出します。PythonでもSVM-RFEを書いたりしてました。しかし、時は流れ、Pythonからscikit-learnという機械学習用ライブラリや深層学習を手軽に使うことができるようになり、気づいたらPython機械学習に必要不可欠な言語になっていました。この本はそんな機械学習に特化したPythonの使い方を理論と実装の両面から平易に丁寧に説明しています。理論は理系学部生なら理解できるぐらいで、実装はPythonやnumpyを少し触ったことがある人なら分かるぐらいのレベルです。いつの間にかこのような読みやすい機械学習の和書が出ているのは感慨深いです。

この本のおおまかな内容は、教師あり学習/教師なし学習の概論(1章)、分類(ロジスティック回帰/サポートベクトルマシン/決定木)(3章)、前処理(4章)、次元削減(PCAなど)(5章)、モデル評価とハイパーパラメータのチューニング(6章)、アンサンブル学習(7章)、応用例(8章・9章)、回帰分析(10章)、クラスタ分析(11章)、ニューラルネットワーク(12章・13章)です。原著に対応したコードがGitHubにあります。書籍中のコードはコメント部分も日本語になっているので読みやすいです。

以降ではよかった点について簡単に触れたいと思います。

理論と実装のバランス

実装の方に重きがありますが、多くのトピックで実装に移る前に簡潔な理論の説明があります。バランスが絶妙です。原著の著者はミシガン州立大学の博士課程の方のようで、時に一見ギャップのある式変形やサイエンスでは常識となっている単語(要素還元主義とか)がいきなり出てきますが、監注(監訳の注)でそういうギャップはこれでもかってほど埋められています。

scikit-learnに詳しくなれる

これまでにscikit-learnについて詳しくなろうと思ったら、公式のドキュメントを英語で読むか、日本語なら無限猿さんのブログ記事しかまとまった情報がありませんでした。しかし、この本はざっと200ページぐらいにわたってscikit-learnを使っています。

派手な分類やクラスタリングと異なり、4章・6章・7章のような一見地味だけど重要な情報は類書や日本語で書かれたWebページには詳しい説明がない場合が多く、価値が高いと思います。

ゼロベースの実装が教育的

3章以降では効率的で汎用的な機械学習ライブラリであるscikit-learnを基本的に使います。しかし、現実の問題に取り組んでいるユーザはscikit-learnだけで閉じれるわけではありません。論文が出たばかりのアルゴリズムを試す必要や、scikit-learnでは手の届かないようなフローの追加をする必要に日々迫られます。しかし、この本ではPythonを使ってゼロベースでアルゴリズムを実装することもしばしば取り上げられており、非常に教育的です。

例えば、2章ではゼロから確率的勾配降下法を実装しています。5章ではゼロからカーネル主成分分析を実装しています。12章ではゼロからニューラルネットワークを実装しています。ちょっと凝ったアルゴリズムがこんなにシンプルに書くことができるのかと驚きます。

matplotlibに詳しくなれる

データサイエンスは可視化と切っても切れない関係です。機械学習も例外ではないと思います。この書籍ではとにかく結果をmatplotlibで可視化しており、グラフが多くて見てて楽しいです。若干可視化のコードの分量が多すぎる気もしますが、matplotlibのプロの使い方を学べるのでよしとしましょう。

補足

監訳の福島さんがブック・インサイド―『Python機械学習プログラミング』学び方ガイドを書いています。「本書の前提知識」「読み方のプラン」「参考文献」などが載っています。「読み方のプラン」とか親切だなぁ。本は分からんところは飛ばしつつも全部読むもんだと思ってましたわ。