これまで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