学習する天然ニューラルネット

主に機械学習に関する覚書や情報の整理。競プロ水色→Kaggle Master→?

読んだ本のレビュー データサイエンス編

この記事は?

自分が読んだ本を時系列に並べて、独断と偏見で簡単にレビューしていきます。 データサイエンス(機械学習)のスキルが身につくと謳っている本が量産されている中、どの本を読むべきか読まないべきか、という判断の一助になるよう願っています。

この記事は新しい本を読むたびに随時更新していくつもりです。 なお各レビューには以下の点について述べています。

  • 読んだときの事前知識 ... 評価は事前知識によって大きくバイアスがかかると思うので
  • 良い点
  • 悪い点
  • おすすめしない人 ... これに該当しない方は購入して損はないと思います。

またサンプルコードがある場合はリポジトリを載せています。

気にする方がいらっしゃるようなので、言っておくと、本記事にアフィリエイトリンクはないです

レビュー

パターン認識機械学習

パターン認識と機械学習 上
C.M. ビショップ
丸善出版
売り上げランキング: 8,971
  • 当時の事前知識
    • データサイエンスが流行っていることを知らずに入った研究室で、機械学習のきの字も知らない状態で読まされた一冊
  • 良い点悪い点
    • 語れるほど理解していない
    • 今見直すと、網羅的にいろいろなことが書いてあり、数式がちゃんとしているのが良い。(が理解できない点もまだ多い。)
  • おすすめしない人
    • 初学者が読むべき本ではない。
    • 大学1,2年レベルの線形代数微分積分、確率統計の単位を最高評価で取得できるぐらいの数学力がない方。

部分的にしか読んでないですがHMMとか使うなら下巻がおすすめです。

Pythonではじめる機械学習

  • 当時の事前知識
  • 良い点
    • 豊富な図やわかりやすい説明のおかげで、小学生や中学生でも機械学習アルゴリズムのアイデアを理解することができる。
    • 本当に機械学習を何もしらない人が最初に読むべき一冊。アルゴリズムのざっくりした説明のみならず、訓練性能と汎化性能の関係、交差検証、グリッドサーチ等の説明もしている。また、sklearnでパイプラインを構築して処理を自動化する方法も解説している。
  • 悪い点
    • 数式的な理解は全く得られない。
    • NMFの説明が分かりづらい。基底や線形結合の概念を用いれば簡単に説明できるのに数式を回避するあまりかえってわけわからん説明になっているように感じた。
    • P47ページ「訓練データのサンプルよりも特徴量の数の方が多い場合には、どのようなyも線形回帰できるので、線形モデルは強力なのだ。(意訳)」の文章がミスリーディングを誘う。訓練データのサンプルより特徴量の数のほうが多い場合、考えなしに線形回帰を行えば間違いなく過学習する。
  • おすすめしない人

サンプルコードのリポジトリ

github.com

ゼロから作るDeepLearning

  • 当時の事前知識
    • ニューラルネットがどのような計算の組み合わせで成り立っているのかは知っていた。
    • 具体的に計算してみたことはなかった。
  • 良い点
    • 高校生でもわかるようにかいてある。
    • 図による説明が丁寧。
    • これのおかげで期末試験にて手動でBackPropagationさせる問題が解けた
  • 悪い点
    • ここまでかと丁寧に説明しているのに、ところどころ不親切(P148とか)
    • 本当に本当の基礎だけしか扱っていない
  • おすすめしない人
    • ニューラルネットにすでに詳しい人
    • DeepLearningを使えるようになりたい人(読むと仕組みはわかるが使えるようにはならない)
    • ある程度の事前知識があれば、この本の内容(CNN以外)は後述するゼロから作るDeepLearning2でまかなえますのでそちらをおすすめします。

サンプルコードのリポジトリ

github.com

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

  • 当時の事前知識
    • ゼロから作るDeepLearningを読んでいた
    • 深層学習ライブラリを扱ったことはない
    • scikit-learnはいろいろな手法を回したり、処理のパイプラインを作ったりできる程度
  • 良い点
    • Pythonではじめる機械学習よりも数式を使って説明している。
    • 深層学習は、TensorFlowの使い方から始まって、全結合、CNN、RNN、AE、VAE、強化学習、学習のテクニックと有名どころを網羅している。少し古い内容もあるが勉強になる。
  • 悪い点
    • 機械学習パートは著者がSVM好きすぎてSVMに説明を割きすぎ。Boostingの説明なんて一瞬で終わってしまってよくわからなかった。タイトルにある"実践機械学習"の能力がこれを読んで身につくとは思えない。
    • 深層学習パートの説明はわかりやすいのだが、TensorFlowが難しいのでライブラリ初心者だった自分は完全に心が折れた。しかも、TensorFlowのAPIはころころ変わるので動かないところも。
  • おすすめしない人
    • 実践力が欲しい人(Kaggleをやったほうが良いと思われる。)

サンプルコードのリポジトリ

github.com

直感DeepLearning

直感 Deep Learning ―Python×Kerasでアイデアを形にするレシピ
Antonio Gulli Sujit Pal
オライリージャパン (2018-08-17)
売り上げランキング: 3,908
  • 当時の事前知識
    • ニューラルネットの基礎知識はある。(ゼロから作るDeepLearningの内容程度)
    • TensorFlowの本を読んで、サンプルコードを動かしたことがある。
  • 良い点
    • 俺たちは直感でDeepLearningをしている!!!!タイトルに偽りなし。
    • 簡単にDeepLearningを行うことができる。簡単すぎて頭悪くなる。
  • 悪い点
    • RNNのseq2seqの構造が変。
    • Kerasで細かいことをしようとしたときにどうすればいいのか書いてない点。(自分で損失関数を定義しようとしたり層を定義しようとしたりができない。)
  • おすすめしない人

サンプルコードのリポジトリ

github.com

詳解ディープラーニング TensorFlow・Kerasによる時系列データ処理

  • 当時の事前知識
    • ゼロDeepを読んだ程度の知識。
    • RNNの操作の流れは知っていた。
  • 良い点
    • 数式をちゃんと用いている
    • 当時にしては珍しくAttentionについて述べられていた。
  • 悪い点
    • 数式の解釈等があまり書いていくてスラスラ読めない。図が少ないのも原因か。
    • 読んだときにはコードが古くて動かなかった。
  • おすすめしない人
    • 全員(コードの書き方がもうかなり古いため)

Pythonデータサイエンスハンドブック

  • 当時の事前知識
    • numpy ... ぜんぜんできない
    • pandas ... csvを読み込んで任意の列や行が抜き出せるぐらい
    • Matplotlib ... 見よう見まねで使っていたぐらい
    • scikit-learn ... いろいろな手法を回したことがある程度
  • 良い点
    • numpyがどういう風にデータを保持しているのかを意識できたのは良い。そりゃnp.concatenateが遅いわけだ。
    • pandasの章は、Kagglerじゃなかった自分には有益な情報が多かった。公式ドキュメントの英語を読むのに抵抗があるとか、公式のチュートリアルよりも軽くいろいろな機能を知りたいとかいう方にはおすすめ。特にpandasでサクッとplotするのはもっと早く知りたかったなぁ。
    • matplotlibも見よう見まねで書いていた自分にとっては有益だった。なぜこういうインターフェイスなのかが解説されていて、matplotlibで可視化するコードに抵抗がなくなったのが大きい。
  • 悪い点
    • 機械学習の章は不親切。初心者にはわかりにくく、ある程度わかっている人は読む必要がない、と感じた。

リポジトリというか無料公開の英語版

jakevdp.github.io

Matplotlib&Seaborn実装ハンドブック

  • 当時の事前知識
    • 図を重ねたり、軸を調節したりはできる。
    • 色を細かく調節したり、グラフを何個も表示してレイアウトをいじるのは調べないとできない。
  • 良い点
    • APIが細かく書いてある。
  • 悪い点
    • ただのAPIリファレンスの日本語訳
  • おすすめしない人
    • 英語でAPIリファレンスが読める人

退屈なことはPythonにやらせよう

  • 当時の事前知識
  • 良い点
    • 本当にプログラミング初心者向けにかかれている。Python公式ドキュメントのチュートリアルよりも親切に教えている。専門用語をなるべく使わずに(使うとしても定義してから)説明している。この分厚い本の半分はPythonの基本的な機能について説明していた。
    • デバッグの章は個人的に有用だった。 print文デバッグから卒業できそう。
    • 幅広い分野をカバーしてて手元に置いといておきたい(いつか役立ちそうという思い)
  • 悪い点
    • ファイルを操作する章でなぜpathlibを使わない
  • おすすめしない人
    • データサイエンスをする人は読まなくていい

これも英語版は案の定無料公開

automatetheboringstuff.com

ゼロから作るDeepLearning2

  • 当時の事前知識
    • KerasでRNNを扱ったことがあった。
    • Attentionの概要を知っていた。
    • The Illustrated Transformerをすでに読んでいた。
  • 良い点
    • 1よりも踏み込んだ内容
    • 図の説明が丁寧
    • 実装がわかりやすい
    • ブラックボックス化しがちな逆伝播が意識できる
    • ライブラリ開発者の気持ちがちょっとだけわかる(なんでそういうインターフェイスなのかとか)
    • transformerについても言及していた
  • 悪い点
    • データの与え方が分かりづらい(手を動かせって言うことだと思うけど)
    • CBOWとseq2seq with attentionの説明に特化していて、自然言語処理の方法の全体像が見えなかった
    • 長い時系列のバッチ処理のところや、Truncated BPTTらへんがよくわからなかった(処理の方法はわかったがなぜそうしていいのか、解説の割には以降で全然使われていないなどが原因でそう感じている)
  • おすすめしない人
    • 自然言語処理のテクニックを網羅的にさらいたい人
    • 1と同様、ライブラリによる実践的なことがしたい人。

サンプルコードのリポジトリ

github.com

今読んでる本

読み終わったらレビューに追加します。

現場で使える!PyTorch開発入門

Cython Cとの融合によるPythonの高速化