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

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


前準備

Anaconda のインストール

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

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

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

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

隔離された Python 環境の作成.spyder, numpy, scikit-learn のインストール

Windows での 手順は、 「Windows で,隔離された Python 環境 + Keras + TensorFlow + OpenCV + spyder + Dlib 環境を作る(Anaconda を利用)」のページで説明しています.

以下,Windows での Anaconda をインストール済み, 隔離された Python 環境(名前は ai)に、spyder, numpy, scikit-learn をインストール済みであるものとして説明を続けます.


実行例

Python プログラムを動かしたい. そのために, IPython シェルのコンソールで、Python 環境(名前は ai)を使う

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

※ Windows のスタートメニューで、 「spyder」の方ではなく、 「spyder(ai)」を開く。 これで、spyder の中で、Python環境aiが有効になる

※「spyder(ai)」がない!というときは、Windowsのコマンドプロントで次を実行

activate ai
conda install -y spyder

※ Windows のスタートメニューで起動できないときは、Windowsのコマンドプロントで次を実行

activate ai
spyder
  1. iris データセットの確認
    import numpy as np
    from sklearn.datasets import load_iris
    
    iris = load_iris()
    
    print(iris.data.shape)
    print(iris.data.ndim)
    print(iris)
    

  2. t-SNE を実行してみる
    import numpy as np
    from sklearn import datasets
    from sklearn.manifold import TSNE
    
    iris = datasets.load_iris()
    d = TSNE(n_components = 2).fit_transform(iris.data) 
    
    print(d)
    

  3. 散布図にプロット
    import numpy as np
    from sklearn import datasets
    from sklearn.manifold import TSNE
    
    iris = datasets.load_iris()
    d = TSNE(n_components = 2).fit_transform(iris.data) 
    
    %matplotlib inline
    from matplotlib import pyplot as plt
    plt.scatter(d[:,0], d[:,1], c=iris.target)
    

    isomap による次元削減

    import numpy as np
    from sklearn import datasets
    from sklearn.manifold import Isomap
    
    iris = datasets.load_iris()
    d = Isomap(n_components=2, n_neighbors=10).fit_transform(iris.data)
    
    %matplotlib inline
    from matplotlib import pyplot as plt
    plt.scatter(d[:,0], d[:,1], c=iris.target)
    

    Spectral Embeddeing による次元削減

    import numpy as np
    from sklearn import datasets
    from sklearn.manifold import SpectralEmbedding
    
    iris = datasets.load_iris()
    d = SpectralEmbedding(n_components=2, n_neighbors=10).fit_transform(iris.data)
    
    %matplotlib inline
    from matplotlib import pyplot as plt
    plt.scatter(d[:,0], d[:,1], c=iris.target)
    

    Locally Linear Embedding (LLE)

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

    import numpy as np
    from sklearn import datasets
    from sklearn.manifold import LocallyLinearEmbedding
    
    iris = datasets.load_iris()
    d = LocallyLinearEmbedding(n_components=2, n_neighbors=10).fit_transform(iris.data)
    
    %matplotlib inline
    from matplotlib import pyplot as plt
    plt.scatter(d[:,0], d[:,1], c=iris.target)
    

    kernel approximation

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

    import numpy as np
    from sklearn import datasets
    from sklearn.kernel_approximation import RBFSampler
    
    iris = datasets.load_iris()
    d = RBFSampler(gamma=1).fit_transform(iris.data)
    
    %matplotlib inline
    from matplotlib import pyplot as plt
    plt.scatter(d[:,0], d[:,1], c=iris.target)
    
    LLE,