多変量解析

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

ながこんにちは!デジタルマーケターのウマたん(@statistics1012)です!

データ分析を行っていると以下のような場面にぶち当たることがあるのではないでしょうか?

次元(変数)が多すぎて分析がままならない!そもそも分析できない!
データをコンパクトにまとめて構造を見てみたい!

そんな時に有用なのが「主成分分析

主成分分析は、古くから使われている伝統的な手法ですが、現在も最前線で使われる強力な手法。

この記事では、そんな「主成分分析」について見ていき、最終的にはPythonでの実装を行っていきます。

ウマたん
ウマたん
主成分分析について理解を深めよう!

主成分分析とは

主成分分析は、1900年代前半にピアソンやホテリングにより導かれた手法であり、長い歴史を持っています。

教師データ(正解データ)がいらない手法であり、手元にあるデータの次元を圧縮し構造化するのに優れています。

良く主成分分析の例として取り上げられるのが学校の成績の例。

生徒それぞれに対して算数・国語・理科・社会の点数が変数として存在します。

そんなデータセットに対して主成分分析をかけると、見事に2つの変数に集約することができます。

算数と理科は理系の能力、国語と社会は文系の能力。元々4つあった変数を2つの理系・文系という能力に集約することができるのです。

この「2つ」という数字は恣意的に設定することが可能ですが、このようなデータセットであった場合は2つでほぼデータを説明できる結果になるはずです。

主成分軸によってデータをどのくらい説明できるか寄与率が算出されるのですが、概ね主成分軸の寄与率を足し上げていった時に80%を超えれば問題ないでしょう!

主成分分析のメリット

主成分分析のメリットは2つあります。

データの構造が分かりやすくなる

主成分分析を行うことで、データの構造を分かりやすくすることが可能です。

変数が多くデータの構造が分かりにくい時は、主成分分析をかけてみると良いでしょう。

次元圧縮により計算負荷を下げる

多次元データは計算負荷が物凄くかかります。

そんな多次元データに対して主成分分析をかけることにより、次元が圧縮され計算負荷が大幅に下がります。

主成分回帰(PCR)という手法が存在し、まさに多次元データへ適用される手法になっています。

主成分分析をPythonで実装してみよう!

それでは、最後にPythonで主成分分析を実装していきましょう!

非常に簡単に実装することが可能です。

使用するデータは、統計科学研究所の「成績データ」。以下のURLからダウンロードできます。

https://statistics.co.jp/reference/statistical_data/statistical_data.htm

kokugoshakaisugakurikaongakubijututaiikugikaeigo
304351636066374420
392149567072566316
29302357697633546
9587771007782789687
707178677282466344
675356616176706640
292644523768334313

9科目の点数が166人分入ってます。

主成分分析自体は、sklearn内のパッケージを用います。

from sklearn.decomposition import PCA

実際に第1主成分と第2主成分を軸にデータをプロットしてみるとこんな感じ

寄与率を見てみると以下のようになっており、ほぼ第2主成分までで80%を超えていることが分かります。

array([0.66738119, 0.12202057, 0.05453805, 0.04521959, 0.03336222, 0.02460657, 0.02030967, 0.01902168, 0.01354047])

主成分分析 まとめ

主成分分析について簡単に見てきました。

最後に主成分分析についてまとめておきましょう!

■データの構造を分かりやすく出来る
■次元圧縮により計算負荷を下げることが出来る
■Pythonで簡単に実装できる

主成分分析は様々な場面で活用できる優秀な手法です!もし主成分分析について詳しく知りたい方はこちらの書籍がオススメ!是非参考にしてみてください!

また、多変量解析全般のオススメ本を以下にまとめているのでそちらもご覧ください!

厳選5冊!多変量解析を勉強する上でおすすめな本!こんにちは!デジタルマーケターのウマたん(@statistics1012)です! ある程度統計学に関する基礎土台がついてきた後は、...