主成分分析とは?簡単な説明とPythonでの実装!

目次
ウマたん当サイト【スタビジ】の本記事では、実務の基礎分析にて使われることの多い主成分分析について詳しく見ていきます。最後にはカンタンなPythonでの実装も載せていますのでぜひ参考にしてみてください!
こんにちは!
データサイエンティストのウマたん(@statistics1012)です!
データ分析を行っていると以下のような場面にぶち当たることがあるのではないでしょうか?
次元(変数)が多すぎて分析がままならない!そもそも分析できない!
データをコンパクトにまとめて構造を見てみたい!
そんな時に有用なのが「主成分分析」
主成分分析は、古くから使われている伝統的な手法ですが、現在も最前線で使われる強力な手法。
ウマたん主成分分析について理解を深めよう!
この記事では、そんな「主成分分析」について見ていき、最終的にはPythonでの実装を行っていきます。
以下のYoutube動画でも解説していますよ!
他の手法についてはこちらも合わせてチェック!
パターン認識の事例やAIや機械学習との関連性をわかりやすく解説!当サイト【スタビジ】の本記事では、パターン認識とは何なのかについて具体的な事例や手法、さらにはPythonでの実装方法を交えて分かりやすく解説していきます!
【これだけはおさえておきたい!】ビジネスで役立つAI用語45選まとめ!当サイト【スタビジ】の本記事では、ディープラーニング系/機械学習系/統計学系の3つのカテゴリに分けて重要な用語を説明していきます!
主成分分析とは

主成分分析は、1900年代前半にピアソンやホテリングにより導かれた手法であり、長い歴史を持っています。
Principal component analysis (PCA) in many ways forms the basis for multiv~ate data analysis
引用元:Google-“Principal Component Analysis”
教師データ(正解データ)がいらない手法であり、手元にあるデータの次元を圧縮し構造化するのに優れています。
良く主成分分析の例として取り上げられるのが学校の成績の例。
生徒それぞれに対して算数・国語・理科・社会の点数が変数として存在します。
そんなデータセットに対して主成分分析をかけると、たとえば
の2つに集約することができます。
元々4つあった変数を2つの変数に集約することでデータをより分かりやすく解釈できるようになる可能性があります。
この「2つ」という数字は恣意的に設定することが可能ですが、このようなデータセットであった場合は2つでほぼデータを説明できる結果になるはずです。
主成分軸によってデータをどのくらい説明できるか寄与率が算出されるのですが、概ね主成分軸の寄与率を足し上げていった時に80%を超えれば問題ないでしょう!
主成分分析のメリット

主成分分析のメリットは2つあります。
データの構造が分かりやすくなる
主成分分析を行うことで、データの構造を分かりやすくすることが可能です。
変数が多くデータの構造が分かりにくい時は、主成分分析をかけてみると良いでしょう。
次元圧縮により計算負荷を下げる
多次元データは計算負荷が物凄くかかります。
そんな多次元データに対して主成分分析をかけることにより、次元が圧縮され計算負荷が大幅に下がります。
先ほどの算数・国語・理科・社会だとあまり感じられないかもしれませんが、例えば、数学基礎・微分・線形代数・確率・現代文・古文・漢文・政治経済・現代社会・・・・
みたいな感じでものすごく多くの科目が合った場合、それを2つの軸に分けるとシンプルで分かりやすくなるということが実感できるでしょう。

主成分回帰(PCR)という手法が存在し、まさに多次元データへ適用される手法になっています。
ちなみに主成分分析と似た手法に因子分析があります。
どちらも「より少ない変数にまとめる」というプロセスを辿りますが、両者の違いはズバリ分析の目的です。
因子分析が各観測変数から共通している部分を探索する分析であるのに対し、主成分分析は各観測変数をより少ない変数にまとめる分析です。

目的に合わせて分析手法を選択していきましょう!
因子分析について詳しくは以下の記事で解説しています!
因子分析をわかりやすく解説!主成分分析との違いやPythonでの実装方法!当サイト【スタビジ】の本記事では、多変量解析の一種である因子分析について解説していきます!考え方や主成分分析との違いを説明した後、Pythonで実装していきます!
主成分分析のほかの次元削減の手法(t-SNEやUMAPなど)とのちがいについては、以下の記事で解説しています。
次元削減とは?必要な理由と主な手法(主成分分析・t-SNE)のちがいを分かりやすく解説!次元削減とは、たくさんある特徴量を、できるだけ情報を保ちながら少ない特徴量に圧縮する技術です。本記事では、次元の意味、次元削減が必要な理由、特徴選択と特徴抽出のちがい、主成分分析(PCA)とt-SNEなど主な手法の比較、使われる場面とPythonでの試し方を図解で解説します!
主成分分析をPythonで実装してみよう!

それでは、最後にPythonで主成分分析を実装していきましょう!
非常に簡単に実装することが可能です。
使用するデータは、統計科学研究所の「成績データ」。以下のURLからダウンロードできます。
https://statistics.co.jp/reference/statistical_data/statistical_data.htm
| kokugo | shakai | sugaku | rika | ongaku | bijutu | taiiku | gika | eigo |
| 30 | 43 | 51 | 63 | 60 | 66 | 37 | 44 | 20 |
| 39 | 21 | 49 | 56 | 70 | 72 | 56 | 63 | 16 |
| 29 | 30 | 23 | 57 | 69 | 76 | 33 | 54 | 6 |
| 95 | 87 | 77 | 100 | 77 | 82 | 78 | 96 | 87 |
| 70 | 71 | 78 | 67 | 72 | 82 | 46 | 63 | 44 |
| 67 | 53 | 56 | 61 | 61 | 76 | 70 | 66 | 40 |
| 29 | 26 | 44 | 52 | 37 | 68 | 33 | 43 | 13 |
9科目の点数が166人分入ってます。
import numpy as np
import pandas as pd
import sklearn
from sklearn.decomposition import PCA #主成分分析
import matplotlib.pyplot as plt
df=pd.read_csv('C:/Users/uenyu/Documents/Python Scripts/seiseki.csv')
# 主成分分析実行
pca = PCA()
feature = pca.fit(df)
# データを主成分空間に写像
feature = pca.transform(df)
#第2主成分まででプロット
plt.figure(figsize=(6, 6))
plt.scatter(feature[:, 0], feature[:, 1], alpha=0.8, c=list(df.iloc[:, 0]))
plt.grid()
plt.xlabel("PC1")
plt.ylabel("PC2")
plt.show()
#寄与率表示
pca.explained_variance_ratio_
主成分分析自体は、scikit-learn内のライブラリを用います。
実際に第1主成分と第2主成分を軸にデータをプロットしてみるとこんな感じ

寄与率を見てみると以下のようになっており、ほぼ第2主成分までで80%を超えていることが分かります。
ウマたん第2主成分までの累積寄与率は0.67+0.12=0.79なので第2主成分まででデータ全体の8割ぐらいは説明できることを表しているよ!
Pythonの学習については以下にまとめていますので合わせて参考にしてみてください。
【Python独学勉強法】Python入門を3ヶ月で習得できる学習ロードマップ当サイト【スタビジ】の本記事では、過去僕自身がPythonを独学を駆使しながら習得した経験をもとにPythonを効率よく勉強する方法を具体的なコード付き実装例と合わせてまとめていきます。Pythonはできることが幅広いので自分のやりたいことを明確にして勉強法を選ぶことが大事です。
主成分分析 まとめ
本記事では、主成分分析について簡単に見てきました。
最後に主成分分析についてまとめておきましょう!
主成分分析は様々な場面で活用できる優秀な手法です!
もし主成分分析について詳しく知りたい方はこちらの書籍がオススメ!
是非参考にしてみてください!
ウマたん知っておくと便利!ぜひ自分の手で実装してみよう!
多変量解析手法については以下の記事でより詳しくまとめていますので見てみてください!
多変量解析の基礎をRで実装しながら学んでいこう!当サイト【スタビジ】の本記事では、データの構造把握に役立つ多変量解析について見ていきます。多変量解析とは予測的な観点ではなくあくまで現状データの構造把握に端を発していることが特徴です。Rでの実装も同時に行いながら理解を深めていきましょう!
統計学や機械学習やデータサイエンスの勉強法については以下の記事をぜひ参考にしてみてください!
【初心者必見】統計学入門に必要な知識と独学勉強方法を簡単に学ぼう!当ブログ【スタビジ】の本記事では、統計学入門に必要な知識をカンタンにまとめ、それらをどのように効率的に独学で勉強していけばよいかをお話ししていきます。統計学は難しいイメージが少しありますが、学び方をしっかり考えれば大丈夫!
【入門】機械学習のアルゴリズム・手法をPythonとRの実装と一緒に解説!当サイト【スタビジ】の本記事では、入門者向けに機械学習についてカンタンにまとめていきます。最終的にはどのように機械学習を学んでいけばよいかも見ていきます。細かい手法の実装もPython/Rを用いておこなっていくので適宜参考にしてみてください。
【5分で分かる】データサイエンティストに必要なスキルと独学勉強ロードマップ!当サイト【スタビジ】の本記事では、データサイエンティストに求められるスキルとそれを身に付けるための勉強法について徹底的にまとめていきます!入門者でも、しっかりデータサイエンティストについて理解しある程度独学で駆け出しの状態までいけることを目指します。
ちなみにもし、これらを全て包括的に学びたいのであれば当メディアが運営するスクールであるスタビジアカデミー、略して「スタアカ」がオススメです!
読んだ内容を、スタアカの「統計学概要」コースで身につける
データサイエンス・AIを、動画と課題で体系的に学べるオンラインスクール。最初のレッスンは無料で見られます。



