唯物是真 @Scaled_Wurm

プログラミング(主にPython2.7)とか機械学習とか

liftとPMI(Pointwise Mutual Information)

相関ルール分析(頻出パターンマイニング?)で使われるリフト値(lift)と、共起の強さを測るのに使われるPMIがほぼ同じものだなぁと思ったのでメモ(それ以上の内容はない)

相関ルール分析

Association rule learning - Wikipedia
相関ルール - 機械学習の「朱鷺の杜Wiki」

相関ルール分析は商品を購入したときのバスケットデータ分析やレコメンド的なのに使われる手法です
それぞれの1回分のデータ(購入など)をトランザクションと呼んで、あるアイテム\(X\)が含まれるトランザクションには\(Y\)も一緒に含まれていることを示すためのものです

基本的なやり方として以下のような数値を計算してこれらが適当に大きいものが関連のあるものと推定できるので推薦などに使います
1回のトランザクションにアイテム\(X\)が含まれる確率を\(P(X)\)としたとき
support(支持度)は2つのアイテム\(X, Y\)が1つのトランザクションに同時に含まれる確率を表しています
$$\mathrm{support}(X\Rightarrow Y) = P(X, Y)$$

confidence(確信度)は\(X\)を含むトランザクションに\(Y\)も含まれる確率です
$$\mathrm{confidence}(X\Rightarrow Y) = P(Y|X)$$

lift(リフト)はアイテム\(X, Y\)が1つのトランザクションに同時に含まれる確率が\(X\)と\(Y\)がそれぞれ含まれる確率が独立であると考えたときよりもどれぐらい大きいかを表します
$$\mathrm{lift}(X\Rightarrow Y) = \frac{P(X, Y)}{P(X) P(Y)}$$

PMI(Pointwise Mutual Information)

Pointwise mutual information - Wikipedia
自然言語処理における自己相互情報量 (Pointwise Mutual Information, PMI) | キャンベルとヨセミテ
PMIは2つの出来事が一緒に起こる度合いのことで(共起尺度)、これが偶然よりも大きいか小さいかを表しています
例えば自然言語処理では関係のある単語のペアか調べるのに使ったりします
式は以下のような感じで\(x, y\)の2つの出来事が起こる確率を、\(x,y\)それぞれの出来事が起こる確率で割ったものに\(\log\)関数を付けたものです

$$\mathrm{pmi}(x, y) = \log\frac{p(x,y)}{p(x)p(y)} = \log\frac{p(x|y)}{p(x)} = \log\frac{p(y|x)}{p(y)}$$

昔書いた記事ではこの辺の記事で使いました
sucrose.hatenablog.com
sucrose.hatenablog.com

liftとPMI

ここまで読んだ皆さんはわかったかと思いますが、2つの式を見比べるとlogがついているかということ以外はまったく同じ式です
$$\mathrm{lift} = \frac{P(X, Y)}{P(X) P(Y)}$$$$\mathrm{pmi}(x, y) = \log\frac{p(x,y)}{p(x)p(y)} = \log\frac{p(x|y)}{p(x)} = \log\frac{p(y|x)}{p(y)}$$
logは単調増加関数なのであるアイテムに対する推薦に使う分にはlogの有無で大小関係が変わりないのでliftを使ってもPMIを使っても同様の結果が得られるっぽいです

Ubuntuでディープラーニングを始めたけど数日経つとGPUが動かなくなった話

AWS EC2でUbuntuにGPUのドライバやらCUDAやらを入れてディープラーニングに触ってみていたのですが、久しぶりに起動したら動かなくなっていました。最初に断っておきますがかなりLinux初心者っぽい理由です

症状

環境を構築した直後は普通に動きましたが数日経って使ってみるとGPUが使えない状態になっていました。試しにnvidia-smiコマンドを打ってみるとNVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driverみたいな感じのメッセージがでてドライバが認識されていないようでした
ドライバを消して入れ直してみると普通に動きますが、また数日経つと動かなくなりました

対策

Ubuntuの自動アップデート(アップグレード?)が原因でドライバが読み込めなくなっていたっぽいので/etc/apt/apt.conf.d/20auto-upgradesの設定を"1"から"0"に変更して無効にしました

APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";

参考

GPUのドライバのアンインストールした時のコマンドは一応この辺を参考にした。入れ方によって違うかもしれないし、そもそも打つ必要もないかも

Ubuntuのアップデートの設定周りの説明がいろいろ書いてあった