【PCA解説】sklearnで主成分分析を試してみよう!

主成分分析の概要と scikit-learnによる実装

ビッグデータやAIが話題になっている昨今ですが、膨大なデータを効率的に扱うために行うための処理の一つに「次元圧縮」があります。

データ一つ一つが数万個の特徴を持っているとしましょう。その特徴すべてをそのままデータ解析に使う必要があるのでしょうか?

もしかしたら、他の特徴と似たような特性を持っている特徴がたくさんあるかもしれません。また、特徴が増えれば増えるほど、必要となるメモリが増えてしまいます。計算機資源の面から言っても、次元圧縮を行うことは有用だといえます。

この記事では「主成分分析(PCA)の大まかな概要とscikit-learnによる実装」を解説します。PCAの勉強を始める前に、まずはどんな事ができるのかを確かめておきましょう。

主成分分析(PCA)とは

次元圧縮の手法「主成分分析」について簡単に紹介します。

PCA(Principal Component Analysis、主成分分析)とは、

  • 機械学習(教師なし学習)の一つ
  • 次元圧縮手法
  • データのばらつき具合に着目して新しい座標軸を作る
  • ばらつき具合(=分散)が大きいところが大切


のような機械学習モデルです。

PCAは大量の特徴を持つデータに適用することで、比較的少数の項目に置き換えます。もともとあった特徴を新しい座標軸を使って少ない次元で表現します。

  • 100次元を5次元へ圧縮
  • 4次元を3次元へ圧縮


のような変換を行い、教師あり学習の入力データを作ったり、データの可視化を行ったりします。

PythonでPCA

PythonでPCAを試してみましょう。勉強のために自分で実装してもいいのですが、この記事では簡単のためにscikit-learnを使ってPCAを試します。

開発環境

OS: Windows 10
Python: 3.6.5

まずはライブラリをimportしましょう。

次に、データセットを読み込みます。

[出力結果]

PCAをする前に、このデータセットをsns.pairplotで可視化してみましょう。このとき、データセットを読み込むときにクラスを列に追加したのを思い出して下さい。

そのままsns.pairplotに渡してしまうと、クラス情報まで特徴と同じように扱われてしまいます。

[出力結果]

ではこれをPCAにかけてみましょう。

[出力結果]

出力結果の表を見てみると、確かに三次元に圧縮できていることがわかりますね。

PCAの見方

圧縮して3次元の行列になったデータを三次元散布図としてプロットしてみましょう。

[出力結果]

グリグリ動かしてどんな形になったのか確認してみてください。

ここまでできたら、次は以下のコードで2次元に圧縮してみてください。

このように可視化のために使うこともできるPCA、本当はもっとたくさんの情報がわかります。これについてはまた次回。

まとめ

この記事ではPCA(主成分分析)について解説しました。

PCA以外にも次元圧縮を行うモデルはたくさんあります。AutoEncoder, SVDなどなど。データの種類や次元圧縮を行う目的によって使うべきモデルは異なりますが、PCAはその中でも覚えておきたいモデルの一つです

sklearnを使えば簡単に使うことができます。是非試してみて下さい。

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

フクロウ

フクロウ

第一言語はPythonです。
皆さんRustやりましょう。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説