본문 바로가기
CS/MachineLearning

파이썬으로 완성하는 비지도 학습 알고리즘

by Diligejy 2022. 7. 4.

 

p.7

오토 인코더는 딥러닝 내 비지도 학습 중 가장 기본이 되는 알고리즘으로 여겨도 될 만큼, 익히기 쉽고 성능도 좋아서 빠르게 결과를 얻을 수 있다. 차원을 축소 또는 증가하였다가 데이터 원본의 특성을 그대로 유지하는 가중치 파라미터들을 만들어 내는 데 목적이 있다. 오토 인코더로 학습시킨 데이터가 있다면, 데이터가 변형된 후에도 이전으로 복구가 가능하다. 또한, 불안정하지만 다른 데이터를 학습시킨 데이터로도 변형이 가능하다. 데이터가 딥러닝 할 정도로 충분하다면, 앞의 주성분분석과 특이값 분해를 대체하여 모든 동일한 용도로도 대체가 가능하다. 비지도 학습이면서 딥러닝을 다룬 여러 논문 중에서도 기본 모형으로 자주 언급된다. 오토 인코더의 가장 간단한 형태인 바닐라 오토 인코더에서 다층, 희소, 디노이징, 장단기 기억 모델(LSTM), 합성곱 등 다양한 오토 인코더를 구현한다.

 

p.24

sklearn의 PCA 시행 이후에 저장되는 값 중 중요한 정보는

1. 설명된 분산

2. 설명된 분산의 비율

3. 고유값

4. 고유벡터

가 있다.

 

p.29~30

주성분분석은 공통적인 성분이 제일 우선시해서 나오는 성질을 이용하여, 노이즈 데이터를 제거할 수 있다. 이유를 간단히 말하자면, 노이즈의 경우 랜덤한 값에 속하게 되고, 상관계수가 0에 가깝게 나오기 때문이다. 즉, 서로의 공통성이 낮으니 독자적으로 하나의 변수가 하나의 성분이 되는 경향을 보이게 되는 것이다. 이러한 이유로 적은 정보량을 갖는 성분들에 노이즈의 대부분이 포함된다. 그 결과, 낮은 차원으로 축소한 뒤 복구하면서 노이즈를 갖는 성분들의 대부분이 사라지는 것이다.

 

p.36

특이값 분해는 앞에 소개한 주성분분석과 유도 방식이 거의 유사하다. 주성분분석은 상관분석이나 공분산행렬을 이용해 고유값, 고유벡터로 행렬 분해를 하고, 특이값 분해는 데이터 전체를 두고 행렬 분해를 시행한다는 점이 가장 두드러지게 다른 부분이다. 또한 주성분분석의 행렬 분해하는 과정이 더 적은 데이터를 처리하기에 속도면에서 더 유리하지만, 원본 데이터를 사용하기에 데이터의 특성을 더욱 크게 가져간다는 장점이 있다. 이렇나 장점으로 인해 잠재 의미 분석(LSA)에 특이값 분해가 사용된다. 또한 축소된 데이터만으로 원 데이터와 유사한 데이터를 복구할 수 있다.

 

 

p.144

고객이 여러 상품을 구매한 이력이 있는 데이터가 있다고 가정해 보자. 고객과 상품에 대한 (거래일시) * (고객, 상품)으로 이뤄진 시간에 따른 데이터이다. 데이터는 시간순으로 존재한다. 그러나 우리가 보고 싶은 데이터가 고객 중심의 데이터라면, 시간순서로 된 데이터는 목적에 맞지 않는 형태이다. 구매한 상품 목록이 유저를 구분하는 매개체가 되어야 한다. 어느 고객이 어느 상품들을 구매했는지를 중심으로 행렬을 만들어야 한다. 예를 들어, 고객1이 상품1~10 가운데 상품2, 상품4, 상품7, 상품8을 구매했다고 하자. 이를 행렬로 나타내는 표현은 [0, 1, 0, 1, 0, 0, 1, 1, 0, 0]이 된다. 구매한 상품 행렬이 고객의 수만큼 존재한다. 즉, 상품의 종류가 1,000가지, 고객의 수가 1만 명이라면, 고객별 구매한 상품 행렬의 길이는 1,000이 되고, 모든 고객의 데이터를 가지고 있다는 가정 하에 1만 개의 상품 행렬이 하나로 합쳐진 데이터가 된다.

 

p.145

행렬 변환에는 파이썬의 scipy.sparse 패키지를 사용한다. coo_matrix, csr_matrix, csc_matrix, dok_matrix를 사용하면, 쉽게 거래 데이터를 희소행렬로 변환할 수 있다. 

댓글