トップページ -> 最新情報技術の実習と研究ツール -> オープンデータの活用 -> VBGMM (Variational Bayesian Gaussian Mixture) を用いてクラスタリング
[サイトマップへ]  

VBGMM (Variational Bayesian Gaussian Mixture) を用いてクラスタリング

金子邦彦研究室: データベース、人工知能(AI)、データサイエンスの融合により不可能を可能にする

VBGMM では,クラスタ数を指定せずにクラスタリングを行う


前準備

Anaconda のインストール

前準備として,Python 開発環境のAnaconda のインストールが終わっていること.

Windows での Anaconda のインストール手順は、 別の Web ページに記載しています

Ubuntu での Anaconda のインストール手順は、 別の Web ページに記載しています

以下,Windows に Anaconda をインストール済みであるものとして説明を続けます.

spyder, numpy scipy h5py scikit-learn scikit-image matplotlib seaborn pandas pillow のインストール

conda install -y -c spyder-ide spyder 
conda install -y numpy scipy h5py scikit-learn scikit-image matplotlib seaborn pandas pillow

次元削減を行ってみる

Python プログラムを動かしたい.

Anacondaに入っている開発環境 spyder を実行し,右下の ipython コンソールを使うのが簡単.

  1. iris, titanic データの読み込み
    import pandas as pd
    import seaborn as sns
    
    iris = sns.load_dataset('iris')
    titanic = sns.load_dataset('titanic')
    
    

  2. 読み込んだ iris データセットの表示
    print(iris) 
    

  3. iris データセットについて、1列目と 2列目の散布図

    plt.style.use('ggplot')」はグラフの書式の設定.「ro」は「赤い丸」という意味.

    import matplotlib.pyplot as plt
    plt.style.use('ggplot')
    plt.plot(iris.iloc[:,1], iris.iloc[:,2], 'ro')
    plt.show()
    

  4. iris データセットの0, 1, 2, 3列目を表示してみる
    print( iris.iloc[:,0:4] )
    

  5. iris データセットの0, 1, 2, 3列目について、VBGMM (Variational Bayesian Gaussian Mixture) を用いてクラスタリング
    import numpy as np
    from sklearn.mixture import BayesianGaussianMixture
    
    bgmm = BayesianGaussianMixture(n_components=10, verbose=1).fit(iris.iloc[:,0:4]) 
    c = bgmm.predict(iris.iloc[:,0:4])
    
    print(c)
    

  6. 散布図にプロット
    import numpy as np
    from sklearn.mixture import BayesianGaussianMixture
    
    bgmm = BayesianGaussianMixture(n_components=10, verbose=1).fit(iris.iloc[:,0:4]) 
    c = bgmm.predict(iris.iloc[:,0:4])
    
    from sklearn.manifold import TSNE
    d = TSNE(n_components = 2).fit_transform(iris.iloc[:,0:4]) 
    
    %matplotlib inline
    from matplotlib import pyplot as plt
    plt.style.use('ggplot')
    plt.scatter(d[:,0], d[:,1], c=c)
    
    ※ 乱数を使っているので、実行するたびに違った値になる