Pythonで主成分分析
主成分分析に必要なライブラリはScikit-learn と Numpyだけ。
今回は時系列データに対して主成分分析を行う場合を考える。
地球物理の分野ではEOF解析とも呼ばれる。
n地点×24時間分の気温観測値が与えられているとする。
主成分分析によって気温の時間変動特性を調べたい場合には、各地点の日平均気温からの偏差dTi,j (i = 1, 2, …, 24: j = 1, 2, …, n)を用いる。
解析に用いるデータ(pcadata.csv)の並びは
dT1,1 dT2,1 … dT24,1
dT1,2 dT2,2 … dT24,2
︙ ︙ ︙
dT1,n dT2,n … dT24,n
となる。
以下、スクリプト例
-----
# -*- coding:utf-8 -*-
import numpy as np
from sklearn.decomposition import PCA
# 1. 入力データの読み込み
temp = np.loadtxt('pcadata.csv', delimiter=',')
# 2. 主成分分析を行う(第5主成分まで)
pca = PCA(n_components=5)
pca.fit(temp)
# 3. 主成分の数
print pca.n_components_
# 4. 固有値
print pca.explained_variance_
# 5. 寄与率
print pca.explained_variance_ratio_
# 6. 累積寄与率
print np.cumsum(pca.explained_variance_ratio_)
# 7. 固有ベクトル
print pca.components_
# 8. 第1主成分の固有ベクトルのみ
print pca.components_[0,0:24]
-----
pca.components_で算出される値は、因子負荷量ではなく固有ベクトル(ノルム1だから)かと。
主成分得点は自分で計算するしか無いようだ。
が、dT1,j dT2,j … dT24,j に固有ベクトルをかけて足し合わせるだけなので、そこまで手間な作業ではない。