トップページ -> データベース関連技術 -> オープンデータの活用 -> データの次元削減(t-SNE, Isomap法など)
[サイトマップへ], [サイト内検索へ]

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

サイト構成 データベース関連技術 データの扱い インストール,設定,利用 プログラミング 情報工学の講義実習資料 サポートページ 連絡先,業績など

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


前準備

Python のインストール

Python 用 numpy pandas seaborn matplotlib のインストール

Windows の場合

※ 「py」は,Windows のPythonランチャーAnaconda 3 内の Python などを間違って使ってしまわないように,Pythonランチャーを使って Python を起動している.Ubuntu では「py」でなく「python3」コマンドを使う.

※ 「pip install ...」は,Python パッケージをインストールするための操作.

py -m pip install --upgrade pip
py -m pip install -U numpy pandas seaborn matplotlib

Ubuntu の場合

sudo apt update
sudo apt -yV install python3-numpy python3-pandas python3-seaborn python3-matplotlib

次元削減を行ってみる

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')
    
    

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

    [image]
  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()
    

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

    [image]
  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)
    

    [image]
  6. 散布図にプロット
    import numpy as np
    from sklearn.manifold import TSNE
    
    d = TSNE(n_components = 2).fit_transform(iris.iloc[:,0:4]) 
    
    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)
    

    [image]

isomap による次元削減

import numpy as np
from sklearn.manifold import Isomap

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

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)

[image]

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]) 

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)

[image]

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]) 

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)

[image]

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]) 

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,

本サイトは金子邦彦研究室のWebページです.サイトマップは,サイトマップのページをご覧下さい. 本サイト内の検索は,サイト内検索のページをご利用下さい.

問い合わせ先: 金子邦彦(かねこ くにひこ) [image]