プログラミング経験ゼロから、1年間で読んできたPython、数学、統計学、資格、機械学習、深層学習などの主な書籍をまとめています。Qiitaには別の諸先輩方が記載している書籍まとめ記事がいっぱいありますが、そもそもプログラミング自体も知らない本当の素人が試行錯誤して読んできた本をここに備忘録的にもまとめておきます。
バックグラウンド
- 大学院では脳神経科学の研究室にいた生物系
- 物理、微分積分、線形代数、統計学などは大学生のときに基礎科目として学んだ程度
- プログラミングはそれすらない本当のゼロ
- 新卒で臨床試験の開発部署に(プログラミング、データ解析等とは無縁)
- 医療画像診断や臨床統計学に興味を持ち始めたのがデータサイエンス学習へのきっかけ
------Python------
独学プログラマー
プログラミング学習への第一歩。Pythonというより、Pythonを通じて、まずはプログラミングとは何か、何ができるか、そのためには何が必要かを学ぶことができ、プログラマーとしての仕事の仕方・方法に至るまでが網羅的に記述されていました。もちろんこれ1冊だけでプログラマーになれるはずもありませんが、全くの素人でも今後何をやるべきかの方針が漠然とでも掴めたのはとても有意義でした。筆者の経験談も交えて記述されているためとても読みやすく、本当の最初の1冊としておすすめ。
退屈なことはPythonにやらせよう
上記「独学プログラマー」で紹介されている書籍のうちトップに記載されている本。プログラミングの便利さ、計算の速さなどを具体的な事例を通じて体感でき、その後のモチベーションアップに繋がりました。本書のタイトルの通り、特に仕事をする上で必要だが単純で退屈な作業を自動化してしまう方法がたくさん載っています。ファイル管理、Excelシート操作、PDF操作、メール送信など、今でもたまに読み返して利用しているものもあります。
詳細! Python3 入門ノート
「Pythonプログラミングを全力で学ぶならこの1冊!」の触れ込み通り、変数、ライブラリ、条件分岐、リスト、タプル、辞書、関数定義、イテレータ・ジェネレータ、クラス定義などの一連の「使い方」が手を動かしながら身につく本です。最後の応用編では、numpy配列や機械学習入門のチャプターまで用意されています。Pythonに触れたこともない段階から、機械学習でとりあえずどんなことができるのかが理解できるまでを、非常に丁寧に解説しています。わかりやすいの一言。
Pythonによるデータ分析入門
Pythonではじめる機械学習を先に読んでいた際にコードが分からず、どうやらデータ分析に必要なライブラリがいくつかあるらしい、ということで購入。9章までしか読んでいませんが、Numpy, Pandas, matplotlib, seabornなどのデータ分析ツールの基本的な使い方はマスター。特にseabornによるデータ可視化の便利さと綺麗さに感動。カラー図がふんだんに掲載されており、読みやすい。と同時に、データ分析ツールのメソッドのあまりの多さに目が点になり、この頃からプログラミングスクールへの入校を考え始める。
------線形代数------
大学では丸暗記しただけの科目だったのでどうしよ、今後一番必要でかつ自分が一番弱い分野。ということで以下3冊で線形代数の凄さを体感。
マンガでわかる線形代数
この手のマンガ本は、キャラクターやマンガとしてのストーリーなどが混在して解説が進んで行くので苦手だったが、背に腹は変えられないのでまずは雰囲気を味わうためにも購入。基底、写像、線型独立、固有値・固有ベクトルなど、懐かしい文字をマンガを通して「鑑賞」。特にCGの分野で活躍しているらしい。学問というより道具として役立つ分野であることを理解し、肩肘張らずにほんわりと読了。
まずはこの一冊から 意味がわかる線形代数
線形代数の本を書店で見て回ってもなんか分かるような分からんようなでしたが、この本は分かりやすかったです。行列表記で式の簡素化、固有ベクトルと主成分分析など、線形代数はやっぱり道具として便利なんだなということを理解できる。対象読者は文理問わない内容だったのでありがたかったです。あらゆる箇所で手計算しながら地道に読み進めて行く構成になっているので、辛いけど理解も深まります。
プログラミングのための線形代数
数学という学問で初めて感動した本。固有値、固有ベクトル、対角化、ランクなどが、Rubyによるアニメーション動画で幾何的に対応づけられ、行列の意味を本書冒頭で視覚的に理解することができる。なので本の中身の読解もスムーズ。変わり種、プログラミング自体とは関係ない、数学的厳密性に欠ける、などのコメントもネットで見かけますが、直感的にも行列を理解できるのはありがたかったです。Jordan標準形あたりから難解。内容も濃いので、1ヶ月ほどかけてじっくり読む必要あり。
------統計学------
- 臨床統計(特に治験のアウトカム評価、欠損データの取り扱い、症例数設計等)の道も考えていたので、プログラミングより統計に本腰を入れていた時期も。
- 統計検定準1級を目指していたが、2級の時点でデータサイエンスが面白くなってきたので、準1級はペンディング状態。本当はいけないんですけどね...。
- 統計検定対策には別途、公式解説書と公式問題集によるテスト慣れが必要でした。
完全独習 統計学入門
統計学の入門書を読むための入門書。「統計学の本質は数学記号とは別」との筆者の言葉通り、図と文章だけで文字通り統計学を「説明」している。式展開はほぼなし。確率も使わない。統計学の最初のイメージ作りにもってこい。標本数が少ない際にt分布を使い、正規母集団で母分散未知の場合の母平均の区間推定をとりあえずやってみるのが本書のゴール。仕事帰りに本気で読んで3日、のんびりでも1週間あれば読めます。
はじめての統計学
上記「統計学入門」で1番目に紹介されていた入門書。ハードカバーの重厚な見た目とは裏腹に、文理関係なく理解できるように書かれていてわかりやすい。「統計学入門」の流れを体系的におさらいして読み進めることができる。
これならわかる! ベイズ統計学
巷で流行りのベイズとはなんじゃい、ということで購入。事後確率のベイズ推定に関する色々なお話が解説されていますが、根本的にはベイズの定理の大元の式1つをベースに考えていくので、スーッと読み進めました。病気の検査、迷惑メール、産地推定、経済予測など、幅広い分野で応用されている事例の解説は面白かったです。
基礎統計学Ⅰ 統計学入門
王道中の王道。通称「赤本」。上記までで統計学のイメージを散々作っていたので、話の流れはスムーズについていけました。が、紙面の都合上、式展開が省略されているため数式の理解が初見では難しく、高校の数Ⅲの公式に至るまで、あらゆる箇所に書き込みをして何度も読み返しました。難しい確率分布(ベータ、ガンマ、コーシー、ワイブルなど)となると、未だにその式の意味や応用はよく分かりません...。
統計学演習
理論が分かっても問題が解けない、参考書の章末問題は難解だし解説も不足、統計検定公式本はあくまで検定本という感じ。ということで演習本を購入。統計用語の解説も申し分程度に、あとは例題と問題をストイックに解いていく本。これには助かりました。問題を解くことで理解も深まります。
データ解析のための統計モデリング入門
評価が分かれるであろう分かりやすい本。通称「緑本」。統計モデリングという難解な分野を、私のように分かった気にさせてくれる入門書としては最高な良書なのかもしれません。植物データに対する単純なポアソン分布の当てはめから、現実の世界の多様なパラメータを考慮した一般化線形モデルに向かっていき、MCMCのメトロポリス法による定常分布のサンプリングにより、確率分布を統計モデルのパラメータと考えるベイズモデルと組み合わせることで、最後は一般化線形混合モデルのベイズモデル化に帰着させる、というのが私が理解している本書の流れです。難解ですね。統計学は深い。
今後は一般化線形モデル入門と自然科学の統計学をじっくり読んでいきたいですね。
------機械学習------
Pythonではじめる機械学習
機械学習の分野へ突入してみたものの、途中からデータ分析用のライブラリを使ったコードが分からず、Pythonによるデータ分析入門を挟んで読んだ本。代表的な機械学習モデルを網羅し、数学的な理論背景はひとまず置いておいてとりあえずデータを使ってscikit-learnを動かしてみようという趣旨の内容が前半部分。後半は特徴量エンジニアリング、交差検証、グリッドサーチ、評価指標などのKaggleでも利用されるような基本的な内容を扱い、自然言語処理のさわりで終わる。scikit-learnの使い方を自然とマスターでき、読了後もしばらくは使い方を忘れた際のバイブルとして有用。数学的背景やコードを追うようないわゆる「理論」に関する内容はほぼなく、初心者は全てのアルゴリズムを理解する必要はないと断言する趣旨で書かれているので、どうやって動いているかの理解は別途対応が必要。
機械学習のエッセンス
どのような機械学習アルゴリズムで動いているのか気になったので購入。本書後半で数値計算(桁落ち、勾配降下法、ラグランジュ未定乗数法等)、機械学習モデル(リッジ・ラッソ回帰、SVM、k-Means、PCA等)がほぼNumpyのみを用いてスクラッチ実装されたコードがまとまっている。Numpyの次元変換・ブロードキャスト計算を利用したコードや数式を実現する条件分岐の実際の実装方法など、コーディング力を上げるためのヒントが詰まっており、素晴らしい本でした。アルゴリズムの背景理論の式展開まで丁寧に記載されており、じっくり読むと理解が容易。内容が濃いので私の本は書き込みだらけです。
はじめてのパターン認識
データサイエンス畑を目指すなら最低限理解していなければならない基準となる(らしい)本。通称「はじパタ」。パターン認識の理論が200ページにコンパクトにまとまっていて読みやすい...と油断していて火傷した本。「まとまっている」=「理解しやすい」ではないので、PRMLを時間かけて読むのが一番いいのだろうけど、その余裕がなかったので調べて考えてひたすら書き込むスタイルでなんとか乗り切る。
------深層学習------
ゼロから作るDeepLearning
ニューラルネットワークをNumpyのみを用いてスクラッチ実装していく本。通称「ゼロつく」。人工ニューラルネットワークの原理、畳み込み・活性化関数・プーリング層の構成、順伝播、ソフトマックス、損失関数、誤差逆伝播、ミニバッチ処理の各機構をゼロから作り上げていく。各層のインプット・アウトプットの次元の数・順番・大きさと常に格闘しながら実装していくshapeマンになれる本です。特徴量がどのように伝播し、誤差から逆伝播してどのように学習パラメータが調整されていくのかが自然とわかります。CNN1層目でエッジ検出、その後の出力テクスチャで抽象度を上げていって最後はクラス分類の全結合層に帰着する構造が、人間の神経ネットワークを人工的に模倣したものだということがよく理解できます。機械学習以上に、深層学習はライブラリを動かしただけでは何をやっているかさっぱりわからなかったので、非常に有益でした。
Python機械学習プログラミング
機械学習・深層学習が盛り沢山のモンスター本。理論とコードをバランスよく掲載しており、じっくり読めば理解は難しくないがとにかく分量が多い。最初はアヤメから始まり、最後はTensorFlowを使ったCNN、RNNの実装まで突っ走るとんでもない本。読了まで丸1ヶ月かかりましたが、相当な力がつきます。ネット情報、Kaggle、論文等で断片的に理解するより、時間がかかってもまずは基本を体系的に学べる本としてとてもよかったと思います。
つくりながら学ぶ! PyTorchによる発展ディープラーニング
現在鋭意読解中。発展的な内容で四苦八苦してますが、今後仕事をする上でも役立つ画像認識アルゴリズムを解説、という趣旨で書かれているので非常に勉強になる。複雑なコードを懇切丁寧に解説してくれているので分かりやすい。自由度の高いPyTorchで物体検出できるRaspberry pi 戦車に改良できないかなと思案中。
------画像処理------
スバラシク実力がつくと評判のフーリエ解析キャンパス・ゼミ
生物系ながら、研究室時代に漠然と理解していたフーリエ変換の知識を洗い直すために、わかりやすいと評判の本書を購入。式展開が完全にトレースされながら進んで行くので、行き詰まる点がない。複素関数の正則条件、コーシーの積分定理など、複素数や微積で勉強不足な箇所(物理系の人には常識なのでしょうが)があるものの、パルス波、熱伝導などの方程式・グラフが三角関数の無限級数で表現できることが素人でも分かる。画像の各領域の周波数特徴量の数値化やフィルタによるスペクトル操作など、画像処理で大活躍しているのでフーリエ解析の基本的な理解は必須。
画像処理エンジニア検定
ディープラーニングによる画像解析が熱を帯びる前から画像処理の分野で開発されてきた技術が網羅されている。機械学習・深層学習を学んでも、それを応用する際に応用先のドメイン知識も必要になってくることが分かり始めた際に、画像処理の基礎も知らないのではまずいだろうということで購入。エッジ検出、ノイズ除去、幾何変換、画像復元、パターン認識、物体追跡に至るまで、画像処理全般の知識を効率的に学べる。深層学習に加えて画像処理の色々な選択肢が頭の中で増える。「そんなもの」と考えても何も始まらないし、資格は勉強の目標にもなるのでおすすめ。
今後は、今までネットでつまみ食いしてきた画像認識をプロフェッショナルシリーズで体系的に学んでいきたいですね。ただ、時間が...。