[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🛠 기타/Data & AI

[scikit-learn 라이브러리] PCA를 사용한 차원축소

inu 2020. 7. 31. 00:23
반응형

주성분 분석 : PCA (Principal component analysis)

  • 고차원의 데이터를 저차원으로 줄이기 위해 사용된다.
  • 예를 들어 시각화를 진행하려고 할 때 우리는 13차원의 데이터를 시각화할 수 없다. 따라서 해당 데이터의 차원을 줄여서 확인해야만 한다.
  • 필연적으로 데이터 손실이 일어나지만 이를 최소화한다.
  • 혹은 고차원에 존재하면서 생긴 노이즈를 없애면서 데이터를 정제하는 일도 가능하다.

정규화와 사이킷런 라이브러리 활용

def normalize(X):
    for i in range(X.shape[1]):
        X[:, i] = X[:,i] - np.min(X[:,i])
        X[:, i] = X[:,i] - np.max(X[:,i])
    return X
  • 데이터 행렬 X를 받고 그를 정규화하여 리턴하는 함수이다.
  • 각 특성치들의 단위가 많이 차이가 나면, 단위가 큰 특성치가 나머지를 가릴 확률이 높다.
  • 따라서 '정규화(normalize)'를 진행하여 각 특성치의 단위를 조절하는 작업을 진행한다.
  • 특성치별로 각 행의 값을 특성치 최소값으로 빼주고, 특성치 최대값으로 나눠준다.
  • 각 값은 최소 0, 최대 1이 된다.
def run_PCA(X, num_components):
    pca = sklearn.decomposition.PCA(n_components=num_components)
    pca.fit(X)
    pca_array = pca.transform(X)
    return pca, pca_array
  • 정규화된 데이터 행렬 X와 차원 수를 받아 최종적으로 차원 축소된 데이터를 리턴하는 함수이다.
  • n_components : 환원 차원 수
  • 차원 수를 가진 PCA 모델을 만들고 데이터로 해당 모델을 fitting한 뒤(모델이 현 데이터의 차원 축소에 적절하도록), 해당 모델을 사용해서 transform(실질적 변환)한다.
반응형