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

下校時刻

メモ、読んだ本のまとめメモ、考えたことのメモ、その他のメモなどが書いてあるブログです(twitter: @hoture6)

統計の知識が一ミリもない状態からPythonでベイズ推定ができるようになるまでに読んだ本

統計の知識が一ミリもない状態から、3ヶ月くらい勉強してなんとなくPythonベイズ推定ができるようになったので、その過程で勉強した本を挙げていきます。

勉強した内容は大きく分けて以下です。

  1. 統計学の基礎
  2. Pythonによるデータ操作
  3. ベイズ推定とMCMC

統計学の基礎

以下2冊挙げましたが、両方とも読む必要はないです。どちらも平均や分散の考え方から始まって、いろいろな検定(t検定、F検定、分散分析など)や回帰の考え方と方法をメインに説明しています。しいて言えば、前者は全体的に狭く深い感じで数学的に詳しく、後者は広く浅い説明で応用例がわかりやすいので気に入った方を読めばいいと思います。

Pythonによるデータ操作

データ分析をやる場合、だいたい言語としてRかPythonを使うと思います。私はPythonの方がなじみがあったのでPythonでR的なことをするのに必要なライブラリであるnumpypandasの勉強を以下の本でしました。


包括的にpandasの使い方が書いてあっていい本だと思うのですが、個人的に中だるみ感がすごかったので、適当に読んでだいたいどういうことが出来るのかということをさらうようにしました。その後実際にデータ分析をしながら、あの本でやってたあれはどうやってやるんだっけ…と思ったことを公式ドキュメントで見ていくことで、pandasの基本的な操作ができるようになりました。

ベイズ推定とMCMC

ベイズ統計の本として最初に読みました。ベイズ統計の考え方が例に基づいて丁寧に書かれているので、なにもわからない人がとりあえず読む本としてかなり良いと思います。統計の基礎がわかっていれば読み始めることができて、最終的には時空間構造を考慮した階層ベイズモデルをMCMCで解くところまでわかるようになります。


この本を読むと、PyMCというPythonが書ける人にとって理解しやすい(と思う)MCMCのライブラリの使い方がわかるようになります。ベイズ統計の基本的な説明もかなりわかりやすいと思うので、最初に読んでも大丈夫です。出てくる例が「データ解析のための統計モデリング入門」と毛色が全然違う(こちらの方がエンジニアにとって実用的っぽいパラメータの変化点の検出とかA/Bテストの例などが載っている)ので、とくにプログラミングが出来る人が統計モデリングをやってみる的な意味で良いと思います。翻訳版もあるっぽいです(→Pythonで体験するベイズ推論 PyMCによるMCMC入門)。


PyMCで複雑なモデルを作るのが難しい感じがしたので、MCMCの別のライブラリであるStanの使い方を覚えるために読みました。これも全体的に説明がわかりやすい良い本です。タイトルはStanとRとなっていますが、PythonにもStanが使えるPyStanというライブラリがあるので、まったく問題なくPythonで実装しながら読み進められます。Stanに特有のテクニックなどの記述もあるので、ベイズ推定一般というよりはStanに興味があって読む方が良いかもしれません。また、本筋ではない部分だと思いますが、確率分布を列挙する章が実例や使い方の説明を含んでいて、他の統計の本の似たような章と比べると比較にならないほど面白いです(比較にならないなら比べない方がいいんでは…)。


薄いムックです(ガチャピンです(?))。なんとなくベイズ推定の初心者向けっぽい風潮があるような気がしますが(?)、理論的な説明は薄い一方で、具体的なライブラリの使い方や特徴がよくまとまっているため、むしろある程度基本がわかって自分でベイズ推定を試してから読んだ方が得るものが多いと思います。


野球における打者の打率の推定を例とした経験ベイズの本です。野球が好きなのでなんとなく読みました。経験ベイズに対してはベイズの事前分布をデータからちゃんとしたやつみたいな適当なイメージしかなかったのですが、事前分布を思ってたよりめちゃくちゃ狭くしてたり、階層ベイズになると事前分布が増えていったり、けっこう普通のベイズと違うな…という印象を得ました。ベータ分布+二項分布で話が進んでいくのでMCMCは出てきません。

まとめ

統計の勉強のために今まで読んできた本を、統計学の基礎・Pythonによるデータ操作・ベイズ推定とMCMCに分野分けして紹介しました。紹介した本はどれも自分が読んでわかりやすかったし、評判も良いものばかりなので読むと良いと思います。

今後は、もっと数学的な基礎みたいな本を読みたいのと、実際の応用例を知りたい感じがします。

「Python Machine Learning」Ch. 10(回帰について)まとめ

いままではすべて分類の話だったのですが、Ch10は回帰について書いてあります。


続きを読む

KaggleのTitanic問題で正解率0.8を超える

昨日の記事の続きです。

hoture6.hatenablog.com

概要

KaggleのTItanic問題についてネット上をいろいろ見てみると正解率80%がちょうど良い目標っぽいので、いろいろ頑張ってみてRandom Forestで80.8%を達成しました。実装は自分で考えつつやったのですが、やった内容のほとんどは以下に示す参考記事をいろいろ見てなんとなく良さそうだな…と思った部分を真似しただけです。

参考記事

Titanic問題のFeature engineering

RandomForestのチューニング

やったこと

  • 名前からTitleを抽出(Mr.やMaster、Missなど)して、年齢の欠損値をSex、Pclass、Titleが同じ人の年齢の中央値で埋める
  • 苗字から家族関係を推定し、自分の家族の生存率を考慮する。全員生存、半分以上生存、全員死亡、その他でカテゴリ分け
  • 家族の人数が0人、1人から3人、4人以上でカテゴリ分け
  • RandomForestのパラメータチューニングを行い、予測

コード

KaggleのTitanic問題をとりあえず提出する

Kaggleのgetting started的な位置付けのTitanic: Machine Learning from Disaster | Kaggleを解いてみました。今回はscikit-learnを思い出すことと提出することが目的なので、精度は一切求めません(言い訳)。また、他の人の回答を調べているうちに以下のやり方はいろいろとだめっぽいことがわかってきたのですが、今回の目的はとりあえず提出なので気にしないことにします(目的を言い訳にするプロ)。そして最終的にxgboostの結果を提出して正解率75%くらいだったんだけど、random forestの方がいいっぽい(?)。次の記事で精度を上げることを頑張ってみます。

参考にしたもの

xgboostのインストール: macOS SierraでJupyter Notebookを使った機械学習環境を手っ取り早く作る手順 with anaconda - Qiita

xgboostの使い方、パラメータ、チューニング: PythonでXgboost · Wolftail Boundsxgboost のパラメータ - puyokwの日記XGBoostのパラメータチューニング実践 with Python | かものはしの分析ブログ


「Python Machine Learning」Ch. 6(scikit-learnのtips)まとめ

Ch. 6はscikit-learnを使った機械学習におけるいろいろなベストプラクティスの話です。cross validationやパラメータチューニングについての話題が多い。


続きを読む

「Python Machine Learning」Ch. 5(次元削減について)まとめ

Ch. 5は次元削減の話です。この章はけっこう難しかったので簡単にまとめて、また興味や必要に応じて戻ってくることにしました。


続きを読む

「データ解析のための統計モデリング入門」 with Python(3):11章の空間構造のある階層ベイズモデルをPyStanで

11章の空間構造を持つモデルをやってみます。PyMCでCARモデルの作り方がわからなかったので、PyStanでやりました。