Explore cs in depth!

情報系の専門学校生.compiler/assembler/linker/loader/os/any lowlevel implementations

「Python機械学習プログラミング」はまさに"理論と実践"を学ぶのに最適な本

目次

概要

書籍「Python機械学習~達人データサイエンティストによる理論と実践(第二版)~」
を読み終わりました。

[第2版]Python 機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)

[第2版]Python 機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)

  • 機械学習の基礎を「厳密に」理解したい
  • 表面上をさらうのではなく数学的定義内部構造まで知りたい
  • プログラミング技術も解説してほしい

という方には特におすすめの本です。

今回は内容の濃い書評が出来ればいいなと思っています。


前提知識

本書を読むにあたっての知識は

  • 機械学習基礎的な用語は知っている、また一度でも実際に手を動かしてモデル構築したことがある
    • つまり、簡単なレベルでいいので「入門書を一冊」簡単に取り組んだ事がある、ぐらい。
  • プログラミング…Pythonの最低限的知識
    • 本書は「コードリーディング」によって知識が格段に深まるようになっている。
    • if文、ループなどの制御構文や、クラス・メソッド定義ぐらいは知っておいたほうがいい。
  • 数学…章によって難易度はかなりまちまち。
    • 線形代数入門的な用語・知識(簡単な行列・ベクトル演算)が出来れば大体対処できる?
    • 5章だけ数理のレベルがかなり上がるので注意。

という感じです。

特に気になるのが数学的解説のレベルだと思いますが、
大学に行ってもない、線形代数を体系的に学んだわけでもない私でも、
5章以外の数理は(苦労はしても)理解できないことはなかったです。

重要なのは数式に拒否反応を示さず、根気よく読もうとする姿勢ですね。

drumato.hatenablog.com

こちらの記事を見て頂ければ幸いです。


本題

各章の感想に入る前に、
何故おすすめなのかという点について話します

まさに「脱入門者」をターゲットに置いている

機械学習の本ではその対象読者が本によってかなり違います。

本書は全くの初心者が読む本ではないです。
自分の理解を一つ上の次元に上げたい人が読む為の本です。

よって、内容はそれほど難しいものになりますし、
たとえ話ではぐらかすような説明はしていません。
(比喩で説明する本が悪いとは思いません。
ただ本書は厳密に理論を理解する一貫したアプローチを持っているのです。)

  • 本読んだのにネットの記事の言ってる事があんまよくわからない…
  • 数式が出てくると拒否反応起こす…

という人は、難しいですが確実に有益であるこの本にチャレンジして、
一つレベルアップしてみましょう。

式展開がかなり丁寧

数学的定義に基づいて解説する技術書の話題に上がるのが、
式展開です。

難易度が高すぎる本だと、
当たり前のように式展開を省略するので数学力の無い(私のような)人はかなり苦労します。

この本はまさにそういった本への架け橋となるようなレベルで、
式展開がかなりわかりやすく、また随所に解説が盛り込まれています

「ロジスティック回帰の勾配降下法に基づく学習アルゴリズム」というパートは一つの山場だと思いますが、
ここの理解も苦労せず出来たのは本書の解説が丁寧だったおかげですね。

ここからは特筆すべき章について感想を述べていきます。
良かった点、悪かった点ともに紹介します。

1章

私はさらっと読んで読み飛ばしました。
Scikit-learnとTensorflowによる実践機械学習という本で既に基礎的な機械学習の概念は把握していたので。

一応簡単に解説はしてくれていますが、
知っている人に向けた復習というスタンスで考えておくべきですね。

教師なし?モデル?学習するってどうやって?
みたいな人は正直他の本で最低限の知識を身に着けてから取り組む事をおすすめします。

参考:Scikit-learnとTensorFlowによる実践機械学習

scikit-learnとTensorFlowによる実践機械学習

scikit-learnとTensorFlowによる実践機械学習

2章

分類問題について、ADALINE等の単層パーセプトロンを、
scikit-learn等のAPIを用いずに実装することで
今後の章について理解を深める為のガイダンス的役割を担っていました。

式展開もかなり丁寧で、
また図による解説もかなりわかりやすかったですね。

パーセプトロンの学習規則についての解説時には
それなり数式が出てきますが、
本当に丁寧に解説しているので上記の前提知識を満たしていれば問題なく理解できそうです。

前提知識を満たしていない場合には何度か読み返して必ず知識としておくといいと思います。
今後の章でもここでの知識が役に立つことは多いし、
コードを読むという事に早くから慣れる事が大事です。

3章

Logistic回帰、SVMカーネルSVM、決定木、ランダムフォレスト、k近傍法についての解説が行われます。

完全に流れを負うべきなのはLogistic回帰決定木ですかね。
決定木はその応用例ともなるGBDT等に用いられますし、
Logistic回帰は他アルゴリズムより単純ではありますがよく利用されます。

かなり重要な章だと思っていて、
Logistic回帰のコスト関数を最小化にするという部分も勿論数理的な理解に役立ちましたし、
決定木は先述した通り現在でも頻繁に利用されます(アンサンブル木へと姿を変えて)

4章

正直前処理大全がすごすぎたので、ココはほぼ読み飛ばしました。
ただ、L2正則化幾何学的解釈するみたいな部分は凄いなぁと思いました。

バイアスとバリアンスのトレードオフ凄いスッキリとわかりましたね。

6章

個人的に必ず読んでおくべき部分だと思いました。

CV( Cross Validation )は多くの場合に適するアプローチとして本当によく使われますし、
そのCVが何故汎化性能を高めるのかまで簡単に説明できるようになっておクといいと思います。

また、学習曲線や検証曲線はモデルの性能評価において
有効な手法ですよね。

やはり数値よりも直感的に理解しやすいですし、
何より可視化することで見える傾向があります。

また、Scikit-learnのパイプラインAPIについても説明されていましたが、
パイプラインも是非使えるようになるべきだと思います。

一貫したデータ加工フローを作ることは堅牢なコードを助ける事でしょう。

12章

MLPScikit-learnを使わず実装するというものです。
ここでの理論の説明は本当にわかりやすかったですね。

特徴ベクトルが各層をどのように伝播するのか、
損失関数の値を最小化するためにモデルは何をしているのか、
数学的背景etc...

ニューラルネットの理論を正しく学ぶ事が出来る
本書の中でも最も優れた章と言っていいでしょう。

この章の数式は全て追えるようになっておきたいですね。
式展開の理解にも時間を掛けつつ、ゆっくりでいいので話を飲み込んでいってほしいです。

15章

一度CNNを学習させたことがあれば凄い有益な情報が多かった印象です。
CNNアーキテクチャの形状変遷や、実践的なパディング手法
畳み込み演算の特性についても詳細に解説していて、
今まで曖昧だった知識がここで洗練されました


総評

厳密な理解を目指し、この本の勉強をしていただければ幸いです。
私はこの本と実践機械学習でかなりわかる話が広がったかなと思います。

scikit-learnとTensorFlowによる実践機械学習

scikit-learnとTensorFlowによる実践機械学習