kuroの覚え書き

96の個人的覚え書き

PCAやMDS plotをpythonで行う

これまでPCAやMDSをやりたいときはRを使っていた。しかしRはどうも肌に合わない。すぐ忘れてしまう。
ということでここはやはりPythonですね、ってことでどうやるのか調べてみた。

【python】pca、mds、nmds、tsneとmatplotlibでデータの可視化をしてみる - 静かなる名辞

[Python]PythonでPCAを行う方法 - Qiita

ほおほお、scikit-learnを使えばいいのね。機械学習の環境構築を最近したばっかりなので、すでに環境は整ってるじゃないの。
ということで早速取り掛かる。

とにかくscikit-learnからライブラリを読み込む

from sklearn.decomposition import PCA

データを読み込む(csvから読み込めば簡単)

import numpy as np
npArray = np.loadtxt("analysis.csv", delimiter = ",")
X = np.array(npArray)

実行する

pca = PCA(n_components=2)
pca.fit(X)

以上!
という簡単さ。なにこれ。
あとはmatplotlibでグラフにすれば一丁上がり。

# coding: UTF-8
 
import numpy as np
from matplotlib import pyplot as plt
from sklearn.decomposition import PCA
from sklearn.manifold import MDS, TSNE

def main():
    npArray = np.loadtxt("analysis.csv", delimiter = ",")
    X = np.array(npArray)

    pca = PCA()
    pca.fit(X)    
    transformed = pca.fit_transform(X)
    plt.scatter(transformed[:, 0], transformed[:, 1])
    plt.title('principal component')
    plt.xlabel('pc1')
    plt.ylabel('pc2')
    print(pca.explained_variance_ratio_)    
    plt.show()

    mds = MDS(n_jobs=4)
    mds.fit(X)  
    transformed = mds.fit_transform(X)
    plt.scatter(transformed[:, 0], transformed[:, 1])
    plt.title('Multidimensional scaling')
    plt.show()
    
    tsne = TSNE()
    tsne.fit(X)    
    transformed = tsne.fit_transform(X)
    plt.scatter(transformed[:, 0], transformed[:, 1])
    plt.title('t-distributed Stochastic Neighbor embedding')
    plt.show()
   
if __name__ == '__main__':
    main()   

MDS plotやtSNEも数行書き換えるだけでOK