医療職からデータサイエンティストへ医療職からデータサイエンティストへ統計学、機械学習に関する記事をまとめています。データの変数が多い時に、出来るだけ情報を減らさずに、次元を圧縮するテクニックとして用いられます。マーケティングにおいても、何かの商品に対する評価項目が複数ある場合に、それを少数の評価項目に圧縮し、総合力のような観点で評価することもできるでしょう。今回はそんな主成分分析を使って、様々な食品の栄養素に対して主成分分析を行い、総合的に色々な栄養素を含んでいる、つまり、忙しいあなたに、これ一食でも大丈夫という食品を見つけたいと思います。後半ではRとPythonによる主成分分析実践法も紹介します。主成分分析とはところでデータを主成分に圧縮するとはどのようなことでしょうか?例えば、効率よく一食でタンパク質と炭水化物の両方を摂取できる食品を選びたいとしましょう。筋力トレーニングが大好きな人はまさに理想的な食品ですね。仮想的に作成した全200品目の食品に含まれるタンパク質を横軸、炭水化物を縦軸に、散布図を書いてみます。するとこの緑矢印の先の方にある赤丸で囲った食品がタンパク質と炭水化物の両方を多めに含んでいる食品のようです。この緑矢印はタンパク質と炭水化物の両方の情報を圧縮した新たな変数、第一主成分となり、この緑矢印を見つけるのが主成分分析なのです。タンパク質と炭水化物情報を一つの変数で圧縮してしまったために、失われてしまった情報もあります。緑矢印と直角になる矢印、この青色矢印の情報ですね。この方向のばらつきは緑矢印では説明できませんが、タンパク質を多めに含んでいるか、炭水化物を多めに含んでいるのかという情報が含まれていそうです。これを第二主成分とします。この第一主成分をx軸に、第二主成分をy軸にしてグラフを書き直してみます。主成分分析のメカニズムの関係で、値が平均0、分散1に標準化されていますが、関係性としては変わりません。二つの変数から二つの成分を抽出するということは、全く情報を圧縮していません。データの座標を回転させただけ、つまり見かたを変えただけということです。一度強調しておくと、主成分分析はデータ情報を主成分に圧縮することが目的であるということを忘れないようにしましょう。タンパク質と炭水化物の関係性がこのようであったら、主成分はどうなるでしょうか?このデータのバラつきは緑矢印の主成分だけでほとんど説明できそうですね。先ほどとは違い、青矢印方向にはほとんどバラツキはなさそうです。このように変数ごとのバラツキを一番よく説明できるように、情報を圧縮できる成分が主成分となります。バラツキを使うということは、変数同士でばらつきが大きく違っては、うまく主成分を求めることができません。(ばらつきの大きな変数に引っ張られてしまう。)そこで、平均値を0、分散を1に標準化する必要があったのです。具体的にどう求めるのか気になる方は、数学的な説明な説明が詳しく載っている参考サイトのリンクがページ下部にありますので、そちらをご覧ください。主成分得点と因子負荷量について最後にもう一つ主成分得点と因子負荷量についてご紹介します。因子負荷量とは、変数と主成分との関係を表し、-1~1の値を取ります。変数と主成分との相関係数とも言ってもよいでしょう。先ほどのグラフでは、炭水化物やタンパク質の値が大きくなるほど第一主成分も大きくなりました。実際に因子負荷量を求めてみると炭水化物:0.7タンパク質:0.7となります。第二主成分の因子負荷量は炭水化物:0.7タンパク質:-0.7となります。第一主成分はどちらも正の値、第二主成分はタンパク質が負の値になっているので、グラフの見た目や相関係数の概念とも一致しています。次に主成分得点とは、個々のサンプルが主成分の要因をどれぐらい持っているのかを表します。主成分を横軸にした先ほどのグラフでは、右や左に行くほど第一主成分の要因を多くもつ食品ということになり、この主成分の大きさのことを主成分得点と言います。主成分得点はどのように求めるかというと、因子負荷量と各サンプルの値とを掛け算することで求めることができます。