トップページデータ処理主成分分析,次元削減Iris データセットの次元削減(t-SNE, Isomap, Script Embedding, LLE, kernel approximation 法)(Python, scikit-learn を使用)

Iris データセットの次元削減(t-SNE, Isomap, Script Embedding, LLE, kernel approximation 法)(Python, scikit-learn を使用)

前準備

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]

t-SNE 法による次元削減

  1. 散布図にプロットの準備
    import numpy as np
    import sklearn.decomposition
    %matplotlib inline
    import matplotlib.pyplot as plt
    import warnings
    warnings.filterwarnings('ignore')   # Suppress Matplotlib warnings
    
    # 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()
    
  2. Iris データセットの0, 1, 2, 3列目について、t-SNE を実行
    from sklearn.manifold import TSNE
    d = TSNE(n_components = 2).fit_transform(iris.iloc[:,0:4]) 
    print(d)
    
    scatter_label_plot(d, iris.iloc[:,4], 1)   
    

isomap 法による次元削減

from sklearn.manifold import Isomap

d = Isomap(n_components=2, n_neighbors=10).fit_transform(iris.iloc[:,0:4]) 
print(d)

scatter_label_plot(d, iris.iloc[:,4], 1)   

Spectral Embeddeing 法による次元削減

from sklearn.manifold import SpectralEmbedding
d = SpectralEmbedding(n_components=2, n_neighbors=10).fit_transform(iris.iloc[:,0:4]) 
print(d)

scatter_label_plot(d, iris.iloc[:,4], 1)   

Locally Linear Embedding (LLE) 法による次元削減

scikit-learn の cheet sheet によれば、isomap, Spectral Embedding が働かないときは Locally Linear Embedding (LLE) が候補になっている

from sklearn.manifold import LocallyLinearEmbedding
d = LocallyLinearEmbedding(n_components=2, n_neighbors=10).fit_transform(iris.iloc[:,0:4]) 
print(d)

scatter_label_plot(d, iris.iloc[:,4], 1)   

kernel approximation 法による次元削減

scikit-learn の cheet sheet によれば、 データ数が10000以上のときは kernel approximation が候補になっている.

from sklearn.kernel_approximation import RBFSampler
d = RBFSampler(gamma=1).fit_transform(iris.iloc[:,0:4]) 
print(d)

scatter_label_plot(d, iris.iloc[:,4], 1)