ともにゃん的データ分析ブログ

勉強したことの備忘録とかね

離散選択理論入門(その2)

はじめに

前回の記事からかなり期間が空いてしまいました。

今回は離散選択理論入門の第2段。ロジット確率の導出とそれらの性質について見ていきます。


Logitモデルの導出

今現在、広く用いられている離散選択モデルとしてロジット(Logit)モデルがあります。ロジスティック回帰を皆さんよく使ってますよね?それです。

選択確率の一般形は

 \begin{eqnarray*}
P_{ni} &=& \int_{\epsilon}I(\epsilon_{nj} - \epsilon_{ni} < V_{ni} - V_{nj}\ \forall j \neq i)f(\epsilon_{n})d\epsilon_{n}\\
&=& \int_{\epsilon}I(\epsilon_{nj} < \epsilon_{ni} + V_{ni} - V_{nj}\ \forall j \neq i)f(\epsilon_{n})d\epsilon_{n}
\end{eqnarray*}

で表されるのでした。

続きを読む

離散選択理論入門(その1)

はじめに

最近、大学院時代に読んでいた

Discrete Choice Methods with Simulation

Discrete Choice Methods with Simulation

を読み直しています。やっぱり面白いです。でも忘れてることも多いです。

ということで簡単にまとめるついでに、離散選択理論入門というシリーズで記事を書いていこうと思います。


離散選択理論とは

人々は日々意思決定をしています。意思決定にも、決定するものの種類によって色々考えられますが、身近な例としては物を買うという行為も意思決定のひとつです。
物を買うという行為は、いくつかの選択肢の中(商品群)の中から買うのもを選びます。このとき、選択肢は離散的な、つまりカテゴリカルなものとなっています。このように、離散的な選択肢の中からあるものを選択するという行為を離散選択と呼びます。そして、なぜそれを選択したのか?それを分析する道具として離散選択理論があります。そこで用いられる代表的なモデルとしては、ロジスティック回帰モデルがよく知られています。

続きを読む

なぜベイズ予測分布はあれなのか?

お久しぶりです

久しぶりの投稿となります。いつの間にかXGBoostについての記事

kefism.hatenablog.com

が好評を得ていて、ブログのアクセス数も随分と増えていました!非常に嬉しいことです☆(ゝω・)v

今回は、ベイズ関連の教科書を読むと必ず紹介されているアレ(予測分布)がなぜそういう形をしているのかを説明します☆(ゝω・)v

参考文献は

です☆(ゝω・)v

続きを読む

Pythonのpandasで大きなデータを扱うときにメモリ効率を上げる方法メモ

最近Pythonを使って大きなデータフレームを結合したり、そのデータフレームに対してメソッドを使って処理をしていますが、頻繁に

"Memory Error"

に遭遇しています。そんな中で色々探し回って見つけたTips的なものをメモとして残しておきます。

  • pandas.DataFrame.merge をする時に copy=False のオプションをつける

そもそもこのcopyってなんだかよくわからないのですが、使用メモリの挙動を見ている限りは copy=True とするとデータフレームを結合するときにそのcopyを用意して、それを参照している感じがします。copy=Falseで劇的にメモリ効率が良くなった気がします。

ちなみにpandas.DataFrame.mergeよりもpandas.DataFrame.joinの方が結合の効率が良いという報告もあります
参照:
python - Improve Pandas Merge performance - Stack Overflow

  • del 変数名 で変数を消して gc.collect() でメモリを開放

参照:
Pythonで少なくメモリを使用する方法 - のんびりしているエンジニアの日記

  • メソッドを呼び出すときは inplace=True オプションをつける

参照:
pandas でメモリに乗らない 大容量ファイルを上手に扱う - StatsFragments


特に中間テーブルなどを結合した最終的な結果データフレームだけを使いたい時などは、途中過程で生成されるデータフレームは結局使用されないと思うので、上記のオプションをつけても問題無いと思います。そうでなくても問題ないのかもしれません。

pandasのDataFrameのplotメソッドを使って描画するときにプロットを並べて表示する方法

pandasのDataFrameのplotメソッドを使って描画するときに、プロットを並べて表示する方法のメモ

import matplotlib.pyplot as plt
import pandas as pd

fig, axes = plt.subplots(nrows=1, ncols=2, squeeze=False)

df1.plot(kind="bar", x="x", y="y", ax=axes[0,0], figsize=(15, 5))
df2.plot(kind="bar", x="x", y="y", ax=axes[0,1], figsize=(15, 5))