こんばんは。今回は久々、Python×データ分析の話です。
主成分分析のScikit Learnを使った実装を実行可能なサンプルコードとともに残しておきます。
取り急ぎ最低限の情報だけ。またUpdateします。
Contents
参考サイト
こちらのQiitaの記事を参考にさせていただきました!
実装
Irisのデータセットを使って実験してみました。
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
## Irisデータセットの読み込み
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['target'] = iris.target
display(df.head())
# sns.pairplot(df,hue="target")
# plt.show()
## 主成分分析
pca = PCA(n_components=2)
pca.fit(df[iris.feature_names])
## データを主成分空間に写像
Xt_tr = pca.transform(df[iris.feature_names])
## 分析結果
print(pca.components_)
print(pca.explained_variance_ratio_)
# print(pca.mean_)
# print(pca.get_covariance())
## 可視化
plt.figure(figsize=(6,6))
plt.scatter(Xt_tr[:,0], Xt_tr[:,1], c=df.target, cmap='tab10', s=5)
plt.xlabel("PC1")
plt.ylabel("PC2")
plt.show()
# 第一主成分と第二主成分における説明変数の寄与度をプロット
plt.figure(figsize=(6, 6))
for x, y, name in zip(pca.components_[0], pca.components_[1], df[iris.feature_names]):
plt.text(x, y, name)
plt.scatter(pca.components_[0], pca.components_[1], alpha=0.8)
plt.xlabel("PC1")
plt.ylabel("PC2")
plt.show()
主成分分析の結果が以下。PC1, PC2でカテゴリが綺麗に分類されていることが分かります。
PC1はpetal lengthの寄与が最も大きく、PC2はsepal withの寄与が最も大きい変数となっていることが分かります。
(参考)Scikit-Learnの仕様
scikit-learnの仕様は以下から確認できます。今回は試してないですが、様々な引数、メソッドが用意されています。
https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html
おしまい
コメントを残す