機械学習
DeepLearning
ディープラーニング
統計学

【随時更新】マシンラーニングエンジニアが機械学習、統計学のおすすめ本を紹介する

概略

データサイエンス、マシンラーニング関連の勉強を始めてそこそこ時間も経ったのでこれまでに読んできた本、参考書の類について紹介していく。既に何人もの人が紹介していたりするわけだが、少しでも参考になれば。
書評というよりは紹介兼感想。
時間を見て少しずつ更新していくつもりなので、『ここに載ってるものだけやれば十分』とはなっていないので注意。

また、実際のところ、実務への応用まで考えるのならば、その分野での機械学習応用に関する論文等は避けられないので、『書籍+論文+自分での実験、試行錯誤』でワンセット。この記事では書籍の紹介だけを行う。

おまえ誰だよ

書評となると主観が入ってくるものなので、簡単に自己紹介。

  • データサイエンティスト、マシンラーニングエンジニアとして色々なところに顔を突っ込んで活動してる
  • 昔は法律勉強してた
  • 何年か前に統計学ブームが起きた時に、気まぐれに法律から乗り換えた
  • 数学と並行して、統計 → 機械学習と学習していって今はどちらかというとマシンラーニング寄り
  • 当初は永遠に大学生をしてるつもりだった
  • 数学はファッション
  • 今は日本にいるけど秋くらいにはブラジルに行く
  • ポルトガル語は全くわからない
  • ブラジル企業に履歴書だしまくってるけど、圧倒的祈り率(2018/4/3現在、ブラジルに来てからはそんなこともない)
  • 『ぽーとふぉりお』が足りないのかと思ってData Science Struggleっていうブログを急ごしらえで作ったけれどブラジルからは全くアクセスがない
  • 友達からは『クソ英語』ってディスられてる

ということで、データサイエンティスト兼マシンラーニングエンジニアです。ブラジルの企業さん、仕事ください。

2018/02/17追記
現在ブラジルにいる。ほぼほぼ、ブラジルに長くいることが決定したのでQiitaへの投稿はせずに、下記ブログの方にだけ投稿してる。

2018/10/16追記
現在はブラジル、サンパウロ市内でデータサイエンティストをしている。

読んできた本

読んできた本の一部を分野別に紹介する。

統計

東京大学出版会の統計学入門。統計学勉強の割と初期の方で読んだ本だ。
統計学の基本的なところは一通り抑えてあるので一冊読んでおけば安心と言える。とはいえ、入門とはかいてあるものの全く統計をやったことがない段階で一冊目で読むのは厳しい気がする。また、正直なところを言えば、基本的なレベルの統計の本はだいたい全部書いてある内容は同じである。この本は確かに鉄板の一つではあるが、最近は良い本がたくさん出てきたので、実際に手にとって気にいったものを読めば十分だ。
個人的にはこの本は頭に残りにくく、あまり好きではなかった。

統計学入門と同じシリーズの本。シリーズの2冊目にあたる。少し前までは基礎の鉄板:赤本、中級鉄板:青本、不遇な緑本と僕は勝手に言っていた。同シリーズの他の2冊に比べるとどうしても印象の薄い本だと思った。というのも、そもそも、『人文、社会科学』の統計学って計量経済学と被るわけで、計量経済学が学問として存在してる以上、良い本というのもあるわけで。特にこれを読む必要があるようには感じなかった。ぶっちゃけてしまえば、今となっては内容をほとんど覚えていない。時間があるときに読み返そうとは思っている。
とはいえ、実際に色々なデータに触るようになるとこの本に書かれている内容も必要になってくる。それでも優先度は次に紹介する自然科学の統計学より下だと思う。

統計学入門と同じシリーズの本。中級統計学の鉄板書。上でも書いたように統計学の本は特に基本レベルのものは充実してきてるのだが、中級レベルとなるとなかなかそうもいかない。ある程度勉強を進めたら読んでおくべき本だと感じた。タイトルには『自然科学』とあるが、自然科学に限定した本ではない。
目次だけを挙げる。

  • 確率の基礎
  • 線形モデルと最小二乗法
  • 実験データの分析
  • 最尤法
  • 適合度検定
  • 検定と標本の大きさ
  • 分布の仮定
  • 質的データの統計的分析
  • ベイズ決定
  • 確率過程の基礎
  • 乱数の性質

この通り、重要テーマががっつり一冊にまとまっている。もちろん、一冊に詰め込んでるわけだから一つ一つの深さは足りないが、全体を効率よく攫って行くのにはちょうど良い本だ。

統計学の基本書。上でも書いたが、統計学の基本的な本はだいたいどれも書いてあることは同じなので、読みやすくしっかりしたものから自由に選べば良い。この本はその『読みやすくしっかりしたもの』のうちの一冊。例が多く、章末には現実的なレベルの練習問題もついているので、非常に取り組みやすい。厚さはそこそこあるが、読み進めやすく、入門者でも進めることができる。丁寧な説明をかえって冗長に感じる人もいるかもしれない。

統計学の基本書。これも統計学の基本部分を扱っている本になる。コンパクトな中に内容が詰め込まれているため、丁寧な説明が苦手な人には向く。説明があっさりで、『基礎からの』とあるわりには割と高度な用語も出てくる。全体を見直すための復習教材としては便利だが、それまで統計を勉強してこなかった人が入門として読むには少し厳しい。個人的には短時間で基本分野を見直せるという点が気に入っていて暇な時に読み返している。

大御所、緑本。難しそうな見た目とは逆に圧倒的にわかりやすい本でRでのコードが掲載されている。タイトルの通り『統計モデリング』を扱っており、データ分析メインであれ、機械学習での目的達成のためのモデル作成メインであれ、データに触れる機会があるのなら是非とも読んでおきたい本だ。
この本も自然科学の統計学同様に代替の効かない本だと思う。

割と最近出てきた統計モデリング本。上記の緑本から接続して実践的なモデリング力を磨きたい。類書が完璧に存在しないということはないだろうが、実践的なベイズ統計モデリングを扱った本は数が少なく、この本はそういった状況における決定版と言える。Rと書かれているが、PythonからもpystanでStanを使用することができるのでほぼそのままのコードで使用することができる。
緑本を読んで面白さを感じたらこの本に接続すると実りがあると思う。

今となってはそんなこともないが、計量経済と被る部分を勉強して行くモチベーションが低かった時に、最低限、困らない程度の知識をサクッと入れようと思って読んだのがこの本だ。必要最小限の知識とRのコード付きで、自己相関や不均一分散、多重共線性などを扱っていて、計量経済分野の入り口部分だけをサクッと拝むのに役立った。正直な話、今でも計量経済分野の勉強は全く進んでいない(ラグとったりパネルデータ分析の基礎くらい)。あんまりこの分野に興味はないがやっておかないと不安という時にはこの本がおすすめ。勉強し始めの一冊目としても良いだろう。


他にも色々読んではいるけれど、大御所的な本を出し抜くレベルで素晴らしいという本はなかなかないように感じた。特に、基礎統計分野はどの本も適度にわかりやすいし、書いてある内容も大差ないので、一定以上の評価を得ている本ならなんでも良い気がする。逆に、上で挙げた本の中で、絶対にこれは読んでおくべきという本はデータ解析のための統計モデリング入門だ。個人的には自然科学の統計学も好きではあるのだが、あの難易度のわりにカッツリした感じは少し苦手だ。
Rによる計量経済学は特に有名というわけではないが、そんなに時間をとって勉強をしたくはないが、齧ってはおきたいという僕のニーズにはマッチした本だった。怠け者にはオススメしたい。

機械学習

もしも、一週間でできる機械学習という二つ名を与えるとしたらこの本だろう。(無論、一週間で身につけた知識だと様々な弊害があるが)
Pythonのコードで機械学習ライブラリを用いてモデルを作成して行く手順が記されている。単純なライブラリの手法列挙ではなく、実践的な手順が一冊にがっつりと盛り込まれている。前処理を行えるだけのプログラミングの知識のある人ならこの本を読めばすぐにKaggleのようなコンペに挑むこともできるだろう。
理論の細かいところをすっ飛ばして、『とりあえず機械学習やってみたい』という要望に最速で答えてくれるのがこの本だ。 それでいて、ある程度機械学習に慣れてきた人間にも役立つ手順、ハックが散りばめられている。
とはいえ、この本で機械学習の数理を理解するのは極めて厳しい。申し訳程度に数式は載ってはいるのだが、理論を理解するのに十分ではない。(正直な感想を言えば、これくらいの数式書いておくなら、省いてしまってもよかったような気が。。。)数理の理解は他の本に任せよう。
この本は電子書籍バージョンなら定期的に半額セールやってるからそこを狙い撃とう

統計からデータサイエンスに舵きりをした時に最初に読んだ本だ。各種機械学習アルゴリズムのRにおけるライブラリとその使用例が載っている。アルゴリズムについてもあっさりとではあるが説明がなされている。この本もPython機械学習プログラミングと同様、なるべく早く実際に機械学習アルゴリズムを使っていきたいという要望に応えてくれる。Rユーザーであれば手元の置いておいて辞書的に使用するのもありだろう。
アルゴリズムの要約と簡単な使用例がメインの本なので数理の理解のためには使用しづらい。

頻繁に勉強会も開かれる『はじぱた』だ。コードなどは書かれておらず、数理面から機械学習アルゴリズムを解説している。この本の特徴は、薄い本でありながら、多くの機械学習アルゴリズムの数理を簡潔に説明しているという点だ。実際に機械学習アルゴリズムを使用して行くとき、その数理を知っていることは好ましい。そのときに、とりあえず、『はじぱた』レベルの数理は理解しているというのは一つの基準になる。
この本は、機械学習や数学に慣れ親しんでいる人にとっては決して難しくはない。というより、割と易しい部類に入る。とはいえ、そうでない人にとっては初見ではまるでちんぷんかんぷんだろう。簡潔な説明は短い記述で迅速に全体を確認できる一方で、慣れていない人には理解しにくいだけだ。実際にこの本を初見で読んで行く時には、タイトルのアルゴリズムをググりながら少しづつ調べて行って読み進めることになるだろう。
思うのは、この本を読んで勉強するよりは、ある程度勉強をした人が、短時間で復習をできるように使用したほうが使い勝手の良い本だということ。

大御所。データサイエンティスト、マシンラーニングエンジニア共に、この本が一つの基準になる。難易度は『はじぱた』に比べればかなり高い。とはいえ、線形代数、微積分の知識があれば読めないこともない。多くのアルゴリズムを収録し、その数理が説明されているというだけでも大きな価値がある。僕の場合は、この本を手に取った段階で既に大体の機会学習の数理に慣れていたこともあって、読んでいて辛さはなかったが、数理を知らない段階でこの本で勉強して行くのは辛いような気がする。
この本の良いところは『大御所』としての立場を確立していることだろう。この本を読み進めるための数学の解説本も出版されているし、この本について解説を行なっているブログもある。それらを参考にしながら進めて行けば案外どうにかなる。
『何を勉強すりゃ良いんだよ』状態になった時にとりあえず取り組んでおけば安心という意味でも『大御所』。

流行りの『でぃーぷらーにんぐ』。最近は本もたくさん出てきてて読めてないものもかなりあるけど、今まで読んだ中だとこれが一番わかりやすかった。というよりも、『王道』だった。
最も基本的な形のネットワークの数理説明から入り、畳み込み式ニューラルネットワークなども扱っている。コードなどはなく、図と数理のみ。読んで行く際には線形代数と微分の知識は必要。
ニューラルネットワークの調整可能箇所、パーツは数理と絡んでいるので、使用して行く際には固めの本を一冊は読んで数理を理解しておきたい。数理自体は決して難しくはないので『でぃーぷらーにんぐ』の数理に関する本自体は一冊読んでおけば十分だ。

分野別

画像処理

機械学習プロフェッショナルシリーズの画像認識本。機械学習の範囲のみならず、基本的な画像処理の手法も扱っている。
画像処理、認識の分野は多くの手法があるため、自分で調べながら学習を進めて行くと一つ一つの手法の目的や、精度などに混乱しやすい。この本は手法ごとにまとめられているため、画像処理、画像認識についてある程度学習が進んだ段階で読むと知識を体系立てられる。画像処理関係のことを何も知らない状態でこれを読み進めることもできるが、少しめんどくさそう。
画像分野を最新の技術まで含めた範囲を体系立てて説明してくれている本は少ないので、非常に重宝している。


機械学習部門については一冊を選ぶならPython機械学習プログラミングだろう。入門者、初級者にとっては全ページが役に立つし、機械学習に慣れてきた人にとっても、普段見落としてることがないかの確認や、より洗練された方法の模索に使える。即効性のあるPythonコードも大量に掲載されている。二周三周、写経するだけでもかなり勉強になる。
逆にパターン認識と機械学習などはかなり人を選ぶ。機械学習、データサイエンスを自分のスキルのメインと考えるのであれば取り組んでおきたいレベルではあるが、昨今のブームで少し関わる程度であればこの本の内容をしっかりと理解するのはオーバーワークになるだろう。

ベイズ

7月6日追記
ベイズの知識も、基本的なところは割と必須な面があるので追記。

薄手の文庫。それまでベイズなんて聞いたことも内容であればこの本を一読しておくとベイズがどのようなものなのかがなんとなくわかる。完全に入門本で、コードもなく、数式もほとんどなく、読むのに苦労はしない。その代わり、到達点は高くはなく、『ベイズってどんな感じ』なのかを理解するための本。
値段も安いので、ベイズに馴染みがなければ2日とって読んでおくと良い。

図解・ベイズ統計「超」入門より踏み込んでベイズを説明した本。コードは一切なく、数式も少ない。とはいえ、ベイズの基本的なところは抑えているため、非常にとっつきやすい。そもそも、ベイズ関係は、どこまで勉強をするべきかという判断も少し難しいところなので、機械学習の本を読み進めるための最低ライン、つまり、条件付き確率の表記に慣れたり、ベイズの定理に親しんでおくというレベルならこの本でも十分な気はする。(実際にはそれだと不安になって色々読みあさることになるが)

これもかなり緩めのベイズ統計本。これならわかる!ベイズ統計学よりもやや高度だが、それでも全体的に平易。それでいながらMCMCやギブスサンプリングなどにも触れている。この本で個々の部分の入り口を掴んでより詳しい本に進めて行くのが現実的。この本の知識だけでガツガツにベイズで実務というのは現実的ではないため、上記の2冊も含めて、目を通したら、やりたい部分はより深く情報を探していくことになる。

2018/02/17追記
* ベイズ推論による機械学習入門

機械学習スタートアップシリーズのベイズ本。機械学習入門とあるが、どちらかといえば、本格派のベイズ本。ベイズの基本的なところから変分ベイズなどまで扱った本で、『スタートアップシリーズ』として出版されてるわりにはかなりガッツリとしたベイズ本。PRMLなどを読む前にこちらを読んでおけばかなり楽に道を進める気はする。個人的にはかなりおすすめ。

ブラジルに渡航後に日本語が恋しくなって購入したベイズ本。サブタイトルに『ベイズ』とあるが、中身は時系列データに対するベイズ手法本となっている。コードなどはなく、数式ベースで時系列分析を追って行っており、特徴としては粒子フィルターに対する解説の丁寧さが挙げられる。難易度は基本的な解析学の知識があれば大丈夫なレベル。説明が丁寧に進められているので読んでいて、逆に冗長さを感じることもある。

2018/04/3追記

なんとなく雑誌っぽい感じが好きになれずに買い渋っていたが、読んでみたら面白かった。ベイズがよくわからないという人には、大雑把にベイズを用いた分析の雰囲気を掴め、ベイズ系のツールを使い始めたばかりの人にとっては様々なツールの紹介になり、ベイズに慣れてる人にとってはそこまで気を張らずに読めて、タメにもなる良本。様々な層にとって非常に有益。値段が手頃なのも嬉しい。


ベイズはどこまでしっかり勉強するべきかが悩ましい。機械学習の数理についていける程度であれば、それこそ条件付き確率の書き方とベイズの定理を理解しておく程度でもどうにかなる。ベイズを使って分析をするとなると上記のベイズの本に加えて、統計の部分で紹介したモデリング本の知識も必要だ。
僕自身はベイズについて言えば、邦書よりも洋書の方がベイズは充実してる印象があったため、適当にググって評判の良かった洋書に目を通しておいた。

2018/02/17追記
この記事を書いた当時に比べて、現在は毎日がベイズベイズしている。身と心をベイズに侵食されるまでそう時間はかからないだろう。

数学

まず、数学について知っておかなければならないのは、データサイエンス、機械学習で求められる数学の知識は、そこまで高度ではないということだ。日頃、数学に触れない人にとっては難しく映るが、実際に必要な分野は限られている。(もちろん、『あれができたら便利、これができたら便利』と考え始めたら勉強対象はどんどん増えてしまうが。)
基本的に必要なのは線形代数微分積分の知識になる。レベルの高い本についてはそうでもないが、割と多くの本が、上記二つの分野の基本知識だけでどうにか読むことができる。

高校レベルの行列や、大学での線形代数が未習もしくはほとんど覚えてない時に取り組みやすい本。名前の通り、基本の基本から説明がされており、数学が苦手でも、本に沿って進めるだけで基本的なところはマスターすることができる。全てに言えることではないが、機械学習で線形代数の知識が使われる文脈は、『データとパラーメータをまとめて表記する』という目的の中であることが多いので、基本的なところを抑えるだけでもだいぶ本を読み進めやすくなる。

非常に有名な線形代数のテキスト。線形代数を礼儀正しく理解して勉強していくのであればこの本はかなり良い教材になる。とはいえ、機械学習の側面から見ればオーバーワーク。また、数学が苦手であったり、しばらく触れてなかったりする人にとっては、そもそも、固い文体と細かい設定、用語ゆえに進めていくのも困難なので、機械学習を効率よく勉強していきたいというスタンスであれば読む必要はないように感じる。個人的には東京大学出版会の本は全体的に網羅性に優れたものが多く、一読する価値はあるとは思うが、その辺は数学を機械学習のためのものと考えるか、数学自体を目的の一つと考えるかで意見が分かれるところ。

高校レベルの微分積分をおぼろげながらでも覚えているようであればこの本で問題を解きながら大学1,2年レベルの微分積分を身に付けるのが楽。機械学習は微分積分からは逃げられないが、必要な知識の大半は大学の1,2年レベルのものになる。式を追っていくくらいであればこの本を横に置いてわからないところを調べていくのでもどうにかならないことはない。
とはいえ、このレベルをこなすのに時間は対してかからないので、未修状態なら、どこかで時間を取って勉強をした方が、コスパが良い。

2018/04/3追記

ある程度、線形代数と微分積分の知識がある前提として、それらを機械学習の数学に橋渡ししてくれる本。機械学習系の資料を読んでると頻出するパターンがわかりやすく書かれている。僕がこれを読んだのは一通り機械学習の有名アルゴリズムの数理に目を通した後だったのだが、学部1,2年くらいの時に読んでおけば、少し楽ができたかなと後悔。

その他

上記の分野には当てはならないが個人的に『面白い』、もしくは『役に立つ』と感じたもの。

僕のように文系分野から参入すると最初に問題になるのが、前処理以前のデータ操作になる。データをダウンロードしてきたり、まとめてファイルを移動したりといった基本的な操作でもそれまでGUIしか触ってこなければ苦労する。実用的なコマンド操作を覚えるために手に取った本だったが、非常に面白く、かなり広範囲の処理をコマンドで行う癖がついた。今ではterminalから出るのが怖い。。
この本の作者はTwitterや勉強会での活動が活発で、非常に『うんこ』を愛している。『うこん』からコマンドワンライナーで『うんこ』を作ったりとともかく『うんこ』への愛を感じる。『シェル芸』でTwitterを調べると作者を中心として、vimによるワンライナーやプリキュアをコマンドで扱う芸など、面白い界隈を見ることができる。

感想

ベイズや数学についても書くつもりだったけど、思ったより深夜テンションで進めるのが辛かったので今日はここまで。時間のある時に少しずつ追記していく。
少しでも参考になれば。
それと、ブラジルの社長さん。仕事ください。

最後に

機械学習でも統計でも、本は色々出てきているが、新しい仕組みがどんどん出てきてる現在では、あまり似たような内容の書かれた本を何冊も読んで勉強するよりは、その時間を数学に割いて、新しい仕組みをスムーズに理解できる下地を作っておく方がコスパが良いように感じる。
『必要』とされ、抑えておくべき知識を抑えたら、状況に応じて必要となってくる特定分野の知識を抑えつつ、新しいものに対応できるように数学の知識を身につけていきたい。

  • ベイズに関して追記
  • 数学に関して一部追記