主成分分析
主成分分析とはデータの分散が大きいところをみつけ,元の次元と同じかそれよりも低い次元の新しい部分空間へ射影することである.
データの可視化や次元を削減するために用いられる.
データの可視化や次元を削減するために用いられる.
プログラム
import numpy as np
from matplotlib import pyplot as plt
from sklearn.decomposition import PCA
from sklearn import datasets
dataset = np.loadtxt("ファイル名.csv", delimiter=',')
features = dataset[:,1:] # 1列目以降の特徴量をfeaturesとする
targets = dataset[:,0] # 0列目の教師データをtargetsとする.(教師データは0、1、2の三種類を例とする)
#主成分分析する
pca = PCA(n_components=2) #2成分に圧縮している
pca.fit(features) #特徴量をセットする
#分析結果を元にデータセットを主成分に変換する
transformed = pca.fit_transform(features)
#主成分分析の結果を保存(第2成分まで)
savedata = np.vstack([targets, transformed[:,0], transformed[:,1]])
savedata = savedata.T
np.savetxt('savedata.csv', savedata ,delimiter=',')
#散布図を書く
a=lt.scatter(transformed[targets == 0, 0],transformed[targets == 0, 1],s=150,c="black", marker='o',label="A") #教師データ0の散布図の詳細
b=plt.scatter(transformed[targets == 1, 0],transformed[targets == 1, 1],s=150,c="blue", marker='x',label="B") #教師データ0の散布図の詳細
c=plt.scatter(transformed[targets == 2, 0],transformed[targets == 2, 1],s=150,c="red", marker='d',label="C") #教師データ0の散布図の詳細
plt.title('principal component') #図のタイトル
plt.legend([a,b,c],
["0", "1","2"],
fontsize=90,
loc=1,
labelspacing=0.6,
prop={'size':16,}) #凡例の詳細設定
plt.xlabel('pc1') #横軸の名前
plt.ylabel('pc2') #縦軸の名前
plt.legend()
# 主成分の寄与率を出力する
print("各次元の寄与率:",pca.explained_variance_ratio_)
print("累積寄与率:",(sum(pca.explained_variance_ratio_)))
# グラフを表示する
plt.show()