주성분분석(PCA) 이해용 파이썬 코드

pca

주성분분석(PCA) 이해용 파이썬 코드

  • 주성분분석은 고차원 데이터를 저차원으로 투영하되, 최대한 정보를 가지고 있게끔 하는 방법입니다.
In [2]:
import numpy as np
import numpy.linalg as linalg
from sklearn.preprocessing import StandardScaler
from sklearn import datasets
In [7]:
iris = datasets.load_iris()

iris_data = iris['data']

0으로 평균화 한다.

  • PCA는 각 feature들이 들쭉날쭉할경우 제대로 되지 않습니다.
In [25]:
iris_std = StandardScaler().fit_transform(iris_data)

공분산 계산

  • 오리지널 공분산의 경우 자신의 분산을 제외하고도 다른 값들도 0이 아닌 값들을 보여준다.
  • 즉, feature마다 그 힘이 섞여져 있기 때문에 이를 하나하나 독립적인 예측력을 지니도록 투영하는 작업이라고 생각하면 된다.
  • 대각행렬은 분산이며, 그 외의 행렬은 공분산이다. feature-feature간 상관관계를 보여준다.
  • 모든 feature가 독립적이라면, 이는 0에 가까운값이여야 한다.
In [26]:
iris_cov = (np.cov(iris_std.T))
iris_cov
Out[26]:
array([[ 1.00671141, -0.11835884,  0.87760447,  0.82343066],
       [-0.11835884,  1.00671141, -0.43131554, -0.36858315],
       [ 0.87760447, -0.43131554,  1.00671141,  0.96932762],
       [ 0.82343066, -0.36858315,  0.96932762,  1.00671141]])

공분산으로부터 고유벡터, 고유값을 뽑아낸다.

  • 공분산행렬에서 고유값과 고유벡터를 계산할 수 있다.
  • 특성다항식을 이용해 계산하면 되는데, 직관적 이해는 공분산행렬을 선형변환을 통해서 서로 독립인 데이터를 만들수 있다는것이다.
  • 그리고 고유벡터는 각각의 벡터가 직교하기 때문에 무엇이든 투영할수 있다.
  • 고유값의 크기별로 내림차순으로 되어있기 때문에, 영향력을 말한다고 할수도 있다.
  • 따라서 PC1부터 차례대로 기존의 행렬의 내적을 한다면, 축소된 차원이지만 정보는 차있는 알찬 결과를 얻게 된다.
In [27]:
eig_vals, eig_vecs = np.linalg.eig(iris_cov)
In [16]:
eig_vals_sum = np.sum(eig_vals)
for eig_val in eig_vals:
    print ("contain " + str(eig_val/eig_vals_sum))
contain 0.7296244541329985
contain 0.22850761786701781
contain 0.036689218892828744
contain 0.005178709107154771
  • 제1주성분을 도출해서 이를 이용해 데이터를 예측하면 정보손실은 최소화하면서 예측력은 높일수있다.
In [24]:
PC1 = iris_std.dot(np.reshape(eig_vecs.T[0], (4, 1)))

PC1
Out[24]:
array([[-2.26470281],
       [-2.08096115],
       [-2.36422905],
       [-2.29938422],
       [-2.38984217],
       [-2.07563095],
       [-2.44402884],
       [-2.23284716],
       [-2.33464048],
       [-2.18432817],
       [-2.1663101 ],
       [-2.32613087],
       [-2.2184509 ],
       [-2.6331007 ],
       [-2.1987406 ],
       [-2.26221453],
       [-2.2075877 ],
       [-2.19034951],
       [-1.898572  ],
       [-2.34336905],
       [-1.914323  ],
       [-2.20701284],
       [-2.7743447 ],
       [-1.81866953],
       [-2.22716331],
       [-1.95184633],
       [-2.05115137],
       [-2.16857717],
       [-2.13956345],
       [-2.26526149],
       [-2.14012214],
       [-1.83159477],
       [-2.61494794],
       [-2.44617739],
       [-2.10997488],
       [-2.2078089 ],
       [-2.04514621],
       [-2.52733191],
       [-2.42963258],
       [-2.16971071],
       [-2.28647514],
       [-1.85812246],
       [-2.5536384 ],
       [-1.96444768],
       [-2.13705901],
       [-2.0697443 ],
       [-2.38473317],
       [-2.39437631],
       [-2.22944655],
       [-2.20383344],
       [ 1.10178118],
       [ 0.73133743],
       [ 1.24097932],
       [ 0.40748306],
       [ 1.0754747 ],
       [ 0.38868734],
       [ 0.74652974],
       [-0.48732274],
       [ 0.92790164],
       [ 0.01142619],
       [-0.11019628],
       [ 0.44069345],
       [ 0.56210831],
       [ 0.71956189],
       [-0.0333547 ],
       [ 0.87540719],
       [ 0.35025167],
       [ 0.15881005],
       [ 1.22509363],
       [ 0.1649179 ],
       [ 0.73768265],
       [ 0.47628719],
       [ 1.2341781 ],
       [ 0.6328582 ],
       [ 0.70266118],
       [ 0.87427365],
       [ 1.25650912],
       [ 1.35840512],
       [ 0.66480037],
       [-0.04025861],
       [ 0.13079518],
       [ 0.02345269],
       [ 0.24153827],
       [ 1.06109461],
       [ 0.22397877],
       [ 0.42913912],
       [ 1.04872805],
       [ 1.04453138],
       [ 0.06958832],
       [ 0.28347724],
       [ 0.27907778],
       [ 0.62456979],
       [ 0.33653037],
       [-0.36218338],
       [ 0.28858624],
       [ 0.09136066],
       [ 0.22771687],
       [ 0.57638829],
       [-0.44766702],
       [ 0.25673059],
       [ 1.84456887],
       [ 1.15788161],
       [ 2.20526679],
       [ 1.44015066],
       [ 1.86781222],
       [ 2.75187334],
       [ 0.36701769],
       [ 2.30243944],
       [ 2.00668647],
       [ 2.25977735],
       [ 1.36417549],
       [ 1.60267867],
       [ 1.8839007 ],
       [ 1.2601151 ],
       [ 1.4676452 ],
       [ 1.59007732],
       [ 1.47143146],
       [ 2.42632899],
       [ 3.31069558],
       [ 1.26376667],
       [ 2.0377163 ],
       [ 0.97798073],
       [ 2.89765149],
       [ 1.33323218],
       [ 1.7007339 ],
       [ 1.95432671],
       [ 1.17510363],
       [ 1.02095055],
       [ 1.78834992],
       [ 1.86364755],
       [ 2.43595373],
       [ 2.30492772],
       [ 1.86270322],
       [ 1.11414774],
       [ 1.2024733 ],
       [ 2.79877045],
       [ 1.57625591],
       [ 1.3462921 ],
       [ 0.92482492],
       [ 1.85204505],
       [ 2.01481043],
       [ 1.90178409],
       [ 1.15788161],
       [ 2.04055823],
       [ 1.9981471 ],
       [ 1.87050329],
       [ 1.56458048],
       [ 1.5211705 ],
       [ 1.37278779],
       [ 0.96065603]])

댓글 남기기