본문 바로가기

머신러닝/혼자 공부하는 머신러닝

16강 주성분 분석: 차원 축소 알고리즘 PCA 모델 만들기

이 글은 https://www.youtube.com/watch?v=ePqKgBnpcw4&list=PLJN246lAkhQjoU0C4v8FgtbjOIXxSs_4Q&index=16 보고 공부한 글 입니다.

 

지난 시간에 

군집알고리즘(k평균 알고리즘)으 배웠다.

 

데이터셋의 클러스터의 중심(센트로이드)을 정한다.

 

가까운 클래스들은 하나의 클러스터로 만든다.

 

다수의 셈플쪽으로 중심을 이동시킨다. 다시 k평균알고리즘을 돌려서 새로운 클러스터로 묶는다.

반복한다.

 

좋은 클러스터 갯수를 구하기 위해서 엘보우 그래프를 사용했다.

 

 

차원 축소 

축 = 차원

2차원 배열 = 축이 2개 있다.

 

1차원 배열 = 원소의 갯수가 차원

 

특성의 갯수를 줄여본다.

 

딥러닝에 가면 배열 = 텐서가 된다. 

 

 

주성분(PCA)

훈련 데이터가 산점도로 놓여있을때 

 

퍼져있는 정도가 다를 것이다.

 

가장 많이 퍼져있는 쪽을 찾는 것이다. 

 

(4,2)를 직선에 넣으면 (4,5)가 된다.

x1,x2인 2개의 특성을 (4,5)로 하나의 특성으로 만들었다.

 

차원이 축소되었다.

 

직선에서 수직 방향으로 나가야 한다. 

 

 

PCA 

PCA객체를 만들고 fit을 호출하면 된다.

 

n_components로 50개만 데이터를 찾게 한다.

 

50개 주성분을 찾고 10000개의 특성을 가로지르는 공간이다.

 

transform()은 10,000개 특성을 50개로 변환시킨다.

 

재구성 

50개 주성분 -> 10,000개 특성을 복원 할 수 있다.

fruits_pca는 (300,50)ㅎ여태이다.

 

이것을 다시 300, 10,000으로 만든다.

 

 

 

설명된 분산 

원본데이터에서 얼마나 복원됬는지 

어느 정도 원본 데이터에서 분산을 유지했는지 살펴볼 수 있다.

explained_variance_ratio_로 설명된 분산을 볼 수 있다.

 

explained_variance_ratio_은 50개의 배열로 이루어져 있다. 

 

주성분 50개 찾았고 각 주성분이 얼마나 분산을 설명하는지, 유지했는지

 

50개 까지 주성분을 볼 수 있다.

사실 10개 까지만해도 많은 주성분을 볼 수 있다.

10개 이후로는 좋지 않은 주성분이다.

 

 

분류기와 함께 사용하기 

로지스틱 회귀를 사용하기 위해서는 타깃을 임의로 만들었다. 

 

50개로 줄인 것으로 하면 엄청난 시간 단축이 된다. 

 

주성분의 갯수를 n_components로 구하는데 실수를 넣을 수 있다.

이것은 설명된 분산의 비율이다. 

sum한 총량이 0.9 or 0.8이 될 때까지 주성분을 찾아줘 

 

여기서 원본데이터의 50%만 설명할 수 있는 주성분 갯수를 찾아주는 객체를 만들었다. 

 

찾은 것은 2개이다.

2개의 특성만 가지고 있는 것이다.

 

2개의 특성만가지고 있어서 교차검증을 해보니

좋은 점수를 출력했다.

 

 

 

군집과 함께 사용하기 

군집에다가 특성이 2개있는 모델을 넣고

 

unique()로 0,1,2를 구분한다. 

return_counts를 True로 해서 그것의 갯수도 출력한다.

 

 

시각화 

2개의 특성을 가지고 그래프를 나타낼 수 있다.

 

apple과 pineapple중간에 비슷한게 보이는대 그것 때문에 비슷한 이미지로 측정하는 것이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90