VBGMM(クラスタ分析)【Pythonとscikit-learnで機械学習:第13回】

VBGMMによって、データをクラスタリング解析する手法を、実装・解説します。

本シリーズでは、Pythonを使用して機械学習を実装する方法を解説します。

各アルゴリズムの数式だけでなく、その心、意図を解説していきたいと考えています。

本記事ではVBGMM・Clusteringを実装します。

VBGMMは Variational Bayesian Gaussian Mixtureの略称です。

日本語では変分混合ガウス分布とも呼ばれるようです。

VBGMMはクラスター数が分からない場合に、データをクラスターに分類する手法です。

複数のガウス分布を仮定して、各データがどのガウス分布に所属するのかを決定し、クラスター分析します。

ですがMeanShiftとは異なり、ベイズ推定に基づき確率分布を計算しながらクラスター数や分布の形状を求めます。

以下のscikit-learnマップの黒矢印に対応します。

[scikit-learnのマップ]

教師なしデータ→クラスター数不明→サンプル数1万以下→[VBGMM・Clustering]

です。

VBGMM・Clusteringの実装

本記事では、ワインの分類データでVBGMMを実装します。

まずは、実際のデータ、kMeansによる分類(クラスター数を3と規定)、VBGMM・Clusteringによる分類の結果を見てみます。

上図、VBGMMではクラスター数を規定しなくても、きちんと3つのクラスターに分割されています。

分割された雰囲気も、だいたい合っているように思えます。

一番下のグラフはクラスター数の確率で、2と3の確率が高く、3クラスターの確率が一番確率が高いです。

前回のMeanShiftでは2クラスターに分割されていました。

なお、この結果は実施するごとに確率的に変化します。

実装コードは以下の通りです。

解説7の部分が新しいので解説します。

vbgm = mixture.BayesianGaussianMixture(n_components=10, random_state=6)

ここでは最大のクラスター数を10と上限を決めて、実施しています。

初期の分布の平均値の条件で結果が変わるので、randomのseedを6に固定しています。

※実際はここは固定しません

解説9の部分では各クラスター数の確率を求めて、プロットしています。

それでは「結局、VBGMM・Clusteringって何をやっていたの?」を説明します。

VBGMM・Clusteringの心

正確な情報は以下をご覧ください。

scikit-learnのクラスタ解析の解説ページ

scikit-learnのVBGMMの解説ページ

VBGMM・Clusteringは教師なし学習の一種です。

データを自動的にクラスターに分けます。

その際にいくつのクラスターが存在するのかを、指定せずにクラスタリングします。

VBGMM(Variational Bayesian Gaussian Mixture)は、
変分ベイズとGMMを組み合わせた手法です。

事前にクラスター数を仮定せずに、クラスタ分析を行うことができます。

GMMの場合はEMアルゴリズムに従い、分布の平均値と分散の値を推定していました。

平均値、分散は一番もっともらしい値のみを求めており、最尤推定となっています。

一方でVBGMMはEMアルゴリズムをベイズ推定バージョンに拡張したものです。

各クラスターのガウス分布の平均値と分散の最尤値でなく、その確率分布を求めます。

なお各確率分布の一番確率が高い値は、EMアルゴリズムで求まる値と一致します。

またVBGMMはクラスター数もベイズ推定を行います。

クラスター数の事前分布にはDirichlet Process(ディリクレ過程 )を使用します。

このアルゴリズムをきちんと理解するのはかなり難しいです。

例えば以下のサイトなどが参考になります。

動く変分混合ガウス分布(導出編)- 動く PRML シリーズ(2)

ディリクレ過程混合モデルへの変分推論適用について

以上、Pythonとscikit-learnで学ぶ機械学習入門|第13回:VBGMMでのクラスター分析でした。

次回からは回帰問題を解説します。

【目次】Python scikit-learnの機械学習アルゴリズムチートシートを全実装・解説
scikit-learnのアルゴリズムチートマップで紹介されている手法を、全て実装・解説してみました。 ...