sklearn 0.18.1 でのKL-Divergence of two GMMs
KLダイバージェンスを2つのGMMで求めたいとき
過去に,
python - KL-Divergence of two GMMs - Stack Overflow
があった. そこから引用すると,
def gmm_kl(gmm_p, gmm_q, n_samples=10**5): X = gmm_p.sample(n_samples) log_p_X, _ = gmm_p.score_samples(X) log_q_X, _ = gmm_q.score_samples(X) return log_p_X.mean() - log_q_X.mean()
となる. しかしこれは古いsklearnの書き方.今は違う.
0.18.1でのKLダイバージェンス of two GMMs
def gmm_kl(gmm_p, gmm_q, n_samples=10**5): X, _ = gmm_p.sample(n_samples) log_p_X = gmm_p.score_samples(X) log_q_X = gmm_q.score_samples(X) return log_p_X.mean() - log_q_X.mean()
というのも,
GMM.sample(n_samples)
はX(値)とy(混合ラベル)を返すように変わった.
そして, GMM.score_samples(X)
は2つ目の引数(今はlog probだけ)を返さなくなった.
ドキュメントはこちら
sklearn.mixture.GaussianMixture — scikit-learn 0.18.1 documentation