トップページ -> 最新情報技術の実習と研究ツール -> オープンデータの活用 -> データの次元削減(t-SNE, Isomap法など)
[サイトマップへ]

データの次元削減(t-SNE, Isomap法など)

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

前準備

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列目について、t-SNE を実行してみる
    import numpy as np
    from sklearn.manifold import TSNE
    
    d = TSNE(n_components = 2).fit_transform(iris.iloc[:,0:4]) 
    
    print(d)
    

  6. 散布図にプロット
    import numpy as np
    from sklearn.manifold import TSNE
    
    d = TSNE(n_components = 2).fit_transform(iris.iloc[:,0:4]) 
    
    %matplotlib inline
    from matplotlib import pyplot as plt
    target = iris.iloc[:,4].map( {'setosa': 0, 'versicolor':1, 'virginica':2} )
    plt.style.use('ggplot')
    plt.scatter(d[:,0], d[:,1], c=target)
    

isomap による次元削減

import numpy as np
from sklearn.manifold import Isomap

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

%matplotlib inline
from matplotlib import pyplot as plt
target = iris.iloc[:,4].map( {'setosa': 0, 'versicolor':1, 'virginica':2} )
plt.style.use('ggplot')
plt.scatter(d[:,0], d[:,1], c=target)

Spectral Embeddeing による次元削減

import numpy as np
from sklearn.manifold import SpectralEmbedding

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

%matplotlib inline
from matplotlib import pyplot as plt
target = iris.iloc[:,4].map( {'setosa': 0, 'versicolor':1, 'virginica':2} )
plt.style.use('ggplot')
plt.scatter(d[:,0], d[:,1], c=target)

Locally Linear Embedding (LLE)

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

import numpy as np
from sklearn.manifold import LocallyLinearEmbedding

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

%matplotlib inline
from matplotlib import pyplot as plt
target = iris.iloc[:,4].map( {'setosa': 0, 'versicolor':1, 'virginica':2} )
plt.style.use('ggplot')
plt.scatter(d[:,0], d[:,1], c=target)

kernel approximation

scikit-learn の cheet sheet によれば、 データ数が10000以上のときは kernel approximation

import numpy as np
from sklearn.kernel_approximation import RBFSampler

d = RBFSampler(gamma=1).fit_transform(iris.iloc[:,0:4]) 

%matplotlib inline
from matplotlib import pyplot as plt
target = iris.iloc[:,4].map( {'setosa': 0, 'versicolor':1, 'virginica':2} )
plt.style.use('ggplot')
plt.scatter(d[:,0], d[:,1], c=target)
LLE,