【Python×データ分析】Scikit-Learnで主成分分析(PCA)を実装する

こんばんは。今回は久々、Python×データ分析の話です。

主成分分析のScikit Learnを使った実装を実行可能なサンプルコードとともに残しておきます。

取り急ぎ最低限の情報だけ。またUpdateします。

参考サイト

こちらの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

おしまい

この記事を気に入っていただけたらシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT US
Yuu113
初めまして。ゆうたろうと申します。 兵庫県出身、東京でシステムエンジニアをしております。現在は主にデータ分析、機械学習を活用してビジネスモデリングに取り組んでいます。 日々学んだことや経験したことを整理していきたいと思い、ブログを始めました。旅行、カメラ、IT技術、江戸文化が大好きですので、これらについても記事にしていきたいと思っています。