Python で始めるベイズ機械学習入門(3章)
ch3
3章の内容は回帰問題についてベイズ的にモデルを作成する話。
を取っている。
3.1~3.5(線形回帰、一般化線形回帰のベイズ推定)
ベイズ的にモデルを決める手順
- 予測モデルを決める。
- 確率変数とするモデルパラメータを決めて、事前分布を与える。
- はハイパーパラメータであるが、ハイパーパラメータも確率変数として扱っているものを階層モデルと呼んでいる。
- 予測モデルから尤度関数を計算する。()
- MCMCなどのサンプリングアルゴリズムを使って事後分布からのサンプリングを行う
- サンプリングアルゴリズムから得られたパラメータを用いてモデルとする。
- 例1: サンプリングしたモデルパラメータの平均値をモデルのパラメータとして設定する。
- 例2: 各サンプリング結果を用いて予測値 を計算したあとで予測の平均値を予測モデルとする。
MCMCを使っている目的は、ベイズモデルではモデルパラメータ事後分布からのサンプリングが回帰モデルを決定するために必要だからである。
コードの手順
これはすべて同じである。
- 真のモデルを決める。
- 真のパラメータを決める。
- 観測したデータを生成する。
- pymc3 でモデルの設定を行う。
- 観測した説明変数のデータを指定。
- モデルパラメータの事前分布を指定。
- 確率モデルを設定して目的変数のデータを指定。
- MCMCを用いて事後分布を作成する。(= 事後分布からのサンプリングを行う)
- サンプリングしたモデルのパラメータと新しい説明変数 を用いて予測確率モデルからのサンプリングを行う。
-
- パラメータのサンプル値を複数回サンプリングして、そのたびにもサンプリングしている
- はモデルのパラメータのサンプル値を変えてサンプルしている
- 複数回サンプリングして得られた の平均値が推定値として利用されている。このプロセスが
-
Kaggle スタートブック~2章(4)
範囲:2.7章(p89~p94)
やったこと
- 交差検証におけるデータ分割
- データ分割間で正例の割合が異なっているのでそこを整える必要がある。StratifiedKFoldを行う。
均等でない場合 y=1 を重視したり逆に軽視したりする。更に注意するべき点として
- データが時系列(参考資料:https://www.slideshare.net/ShotaOkubo/neko-kin-96769953)
- データセット内にグループが存在していないか(参考資料:https://speakerdeck.com/iwiwi/kaggle-state-farm-distracted-driver-detection)
総括 データの分割は重要だがデータに依存して毎回分割方法を熟慮する必要がある。
参考ページ 本のサポートページgithub https://github.com/upura/python-kaggle-start-book/blob/master/ch02/ch02_07.ipynb
決算書の読み方(1)
不定期ですが決算書の読み方の勉強を始めようと思います。
- 最近話題のColabo の不正会計疑惑について興味を持ったから
- 会社の株式投資などにも興味があるから
勉強は基本的に
https://www.kessansho.com/
を読み進めて気が向いたらどこかの会社(多分自社)の書類を呼んでいこうと思います。
ブログに書く内容は感想とメモ、その日のポイントを2〜3行という感じの予定。
決算書って何のためにあるの?
決算書は基本的に
- 会社がいくら稼いで
- 稼いだ金をどのように使い
- 最終的にいくら儲けたか
がわかる書類。いくら儲けたかは売上を単純に計算するだけでは全然わからない。
なぜならば儲けたお金から給料や仕入れ代、光熱費などのコストが差し引きされるからである。
決算書にはどんなものがあるの?
決算書は主に3種類存在して年度ごとに作成されていき、最初の月は4月で終わりは次の年の3月となる。
決算書の3種類は
であり、これらは互いに関係しあっている。
Kaggle スタートブック~2章(3)
範囲:2.6章(p89~p94)
やったこと
- Optuna によるハイパーパラメータチューニング
疑問点
- verbose_eval = 10 に設定しているのに[Warning] No further splits with positive gain, best gain: -infの警告がでるがどうやって消すのかが不明。
総括
- ハイパーパラメータのチューニングは最後で特徴量を作成するほうが重要
参考ページ
本のサポートページgithub
github.com
Kaggle スタートブック~2章(2)
範囲:2.3章(p53)~2.5章(p88)
やったこと
- Pandas Profiling によるデータ外観
- 各種の特徴量 VS 正解ラベルのヒストグラム作成
- 再現性を保つために、乱数を使う場面では seed を固定する.
- seed を固定するための関数を定義
- 可視化→仮説→特徴量作成→submit →可視化 の繰り返し
- LightGBM を使う
- LightGBM では Early stopping を利用するために Validation data を作成する。
総括
- 可視化は大事
- 仮説が思いつくかどうかが結局の所勝負
- 仮説はデータの意味内容の理解から重要
Kaggle スタートブック~2章(1)
開始:2章(p41 ~ p58)
やったこと
- とりあえず submit
注意
p41の「Kaggle上にアップロードしている2.1接のサンプルコードを開き, copy and Edit してください」の指示内容の意味が取りづらい。これは筆者がKaggle 上にアップロードしている Notebook のことである。
www.kaggle.com
このリンク先のページは筆者が 2.1 章のためにアップロードしている Notebook である。Kaggleでは 他人が公開している Notebook をコピペして再利用することができる。
qiita.com
またOutputタグからsubmission.csv というファイルが現れるには少し時間がかかる。
Submit to competitionのタグを開くと LATEST SCORE と BEST SCORE の下にV1や V2というリンクがあるが、これをクリックすると submission.csv を開くことができ 図2.3 と同じ画面を見ることができる。Data のページから Submit ができる。
欠損値について
欠損値は欠損値そのもであることに意味が存在していることもあるので無闇矢鱈に埋めることが得策であるとは限らない
- 欠損値としてそのまま扱う
- 代表値による補完
- 他の特徴量から欠損値を予測して保管する(←無駄な予測を挟むので僕はあまり好きじゃない)
- 欠損値であったかどうかをフラグとして新たに特徴量を作る
train test の結合は特徴量の加工を行うことで一括で処理することができて便利である
Kaggle スタートブック~1章
開始:1章(p1 ~ p37)
やったこと
アカウント作成
Titanic への登録
Notebook の作成
Kaggle のポイント
Kaggleでは企業がデータセットと賞金を提供しており、コンペで勝利するとお金がもらえる。
成績上位チームには金銀銅のメダルが贈呈される。メダルについて一定の条件を満たすと称号が与えられる。
基本的にコンペには2~3ヶ月程度の期限が設けられている。
チームとして参加することも可能
ブラウザ上であるていど環境が整ったNotebookが使えるのですぐに使える。GPUも使えるらしい。
教師あり学習は学習用のデータに対して入力とそれに対応する正解が与えられている。
教師なし学習は入力に対応する正解データが与えられていない状況での学習である。一般にどのようなことが正解であるのかは定まっている。
強化学習は入力データしか与えられていないという点で教師なし学習と同じであるが、そもそも何が正解なのかすらよくわかっていない状況での学習である。
Notebook の使い方について
画面右側にある Input に格納されている全てのファイルを最初のセルで読み込んでいる。ディレクトリは
```dosbatch
./kaggle/input
```となる。
また作業ディレクトリは
!pwd
を実行することで、
```dosbatch
/kaggle/working
```
であることがわかる。
図表:
- P14 図1.2, 1.3 メダル獲得条件と称号の条件
- P23 コンペルール
- P24 表1.1 コンペのページコンテンツ
- P30 図1.18 ディレクトリ構成