トップページデータ処理クラスタリングVBGMM (Variational Bayesian Gaussian Mixture) を用いてクラスタリング(Python, scikit-learn を使用)

VBGMM (Variational Bayesian Gaussian Mixture) を用いてクラスタリング(Python, scikit-learn を使用)

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

前準備として Python の準備

Python プログラムを動かすために, Windows では「python」, Ubuntu では「python3」などのコマンドを使う.

あるいは, 開発環境や Python コンソール(Jupyter Qt ConsoleSpyderPyCharmPyScripter など)の利用も便利である.

あるいは,オンラインで動くGoogle Colaboratory のノートブックの利用も,場合によっては便利である.

Google Colaboratory のノートブックを使うか, 自分のパソコンで Python を動かすなどがありえる.

(1) (Google Colaboratory を使う場合Google Colaboratory のノートブックの準備

Google Colaboratory のノートブックを新規作成を行う.

  1. Google Colaboratory のWebページを開く

    https://colab.research.google.com

    Google Colab はオンラインの Python 開発環境. 使用するには Google アカウントが必要

  2. ファイル」で、「ノートブックを新規作成」を選ぶ

    [image]
  3. Google アカウントでのログインが求められたときはログインする

    [image]

    [image]

(2) (自分のパソコンで Python を動かす場合)Python の準備

Python のインストール: 別ページで説明している.,pip と setuptools の更新,Python 開発環境

Python の URL: http://www.python.org/

【Python, pip の使い方】

Python, pip は,次のコマンドで起動できる.

Python 開発環境のインストール】

Python の numpy, pandas, seaborn, matplotlib, scikit-learn のインストール

3. Iris データセットの準備

  1. Iris データセットの読み込み
    import pandas as pd
    import seaborn as sns
    sns.set()
    iris = sns.load_dataset('iris')
    

    [image]
  2. データの確認
    print(iris.head())
    

    [image]
  3. 形と次元を確認

    配列(アレイ)の形: サイズは 150 ×5.次元数は 2. 最後の列は,iris.target は花の種類のデータである

    print(iris.shape)
    print(iris.ndim)
    

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

    [image]

VBGMM (Variational Bayesian Gaussian Mixture) によるクラスタリング

  1. 散布図に主成分分析プロットの準備
    # 主成分分析
    def prin(A, n):
        pca = sklearn.decomposition.PCA(n_components=n)
        return pca.fit_transform(A)
    
    # 主成分分析で2つの成分を得る
    def prin2(A):
        return prin(A, 2)
    
    # M の最初の2列を,b で色を付けてプロット.b はラベル
    def scatter_label_plot(M, b, alpha):
        a12 = pd.DataFrame( M[:,0:2], columns=['a1', 'a2'] )
        f = pd.factorize(b)
        a12['target'] = f[0]
        g = sns.scatterplot(x='a1', y='a2', hue='target', data=a12, palette=sns.color_palette("hls", np.max(f[0]) + 1), legend="full", alpha=alpha)
        # lenend を書き換え
        labels=f[1]
        for i, label in enumerate(labels):
            g.legend_.get_texts()[i].set_text(label) 
        plt.show()
    
    # 主成分分析プロット
    def pcaplot(A, b, alpha):
        scatter_label_plot(prin2(A), b, alpha)
    

    [image]
  2. 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]) 
    X = iris.iloc[:,0:4].values
    c = bgmm.predict(X)
    print(c)
    

    [image]
  3. 結果をプロット

    乱数を使っているので、実行するたびに違った値になる

    pcaplot(X, c, 1)   
    

    [image]
  4. 比較のため,Iris データセットをプロット
    pcaplot(X, iris.iloc[:,4], 1)   
    

    [image]