1. Dimensionality Reduction
1.1 Curse of Dimensionality
- BOW 기반의 문서 분류와 같은 문제에서 차원은 문서의 표현에 사용된 특성 수
- 특성 수가 매우 커서 기본적으로 차원의 저주 같은 문제를 내포
- 차원이 구성하는 공간의 크기가 커져서 데이터 간의 거리가 너무 멀게 위치
- 데이터가 희박해지면 모형의 설명력이 일반적으로 떨어짐
Solution
- 충분히 많은 데이터 확보
- 특성의 수를 줄여서 차원 축소
- 특성 선택: 현재 특성들 중에서 대표 특성 선택(e.g., Lasso)
- 특성 추출: 기존 특성들의 선형 결합으로 이루어진 새로운 특성 추출(e.g., PCA, LSA)
1.2 PCA(Principal Component Analysis)
- 데이터의 분산을 최대한 보존하는 새로운 축을 찾아 변환함으로써 차원 축소
- 차원을 줄이는 과정에서 정보가 최대한 유지되도록
- 그림 2 방향에서 가장 분산이 작고, 3의 방향에서 분산이 가장 큼
- 점들이 넓게 분포할 때 정보량이 가장 많으므로 3번 방향으로 축소하는 것이 바람직
PCA는 가장 정보량이 큰 축을 찾아 단계적으로 차원을 축소하는 방식 → 정보 손실 최소화
1. Stopwords 처리, PorterStemmer 추가
2. TF-IDF 특성 벡터 변환
- 차원 축소의 영향력을 확인하기 위해 토큰화 외에 아무것도 적용 안 함
3. Logistic Regression
- 차원 축소 전 로지스틱 회귀 분석
- 향후 차원 축소를 한 결과와 비교해서 성능 변화 탐지
- 특성 선택, 특성 추출 방법에 따라 어떻게 성능이 변화하는지 확인
- sklearn.decomposition.PCA
- n_components: 축소할 차원 크기 지정
- explained_variance: 각각의 새로운 차원이 설명하는 분산
- explainedvariance_ratio: 각각의 새로운 차원이 설명하는 분산 비율
- fit_transform: PCA 변환을 위한 학습 및 변환 수행
- transform: 학습된 값을 이용해 PCA 변환
일반적으로 특성 선택은 PCA를 이용한 특성 추출이 Lasso Regression보다 잘 나옴
1.3 LSA(Latent Semantic Analysis)
- 문서들에 잠재된 의미를 분석하고 동시에 단어들에 잠재된 의미도 분석
- 잠재 의미는 문서와 단어를 연결하는 매개체, 축소된 차원이 잠재 역할
- Truncated SVD로 구현
- 대각원소(특이값) 가운데 상위 t개만 골라낸 형태
- 행렬 A를 원복할 수 없게 되지만, 데이터 정보를 상당히 압축했음에도 행렬 A 근사
SVD(Singular Value Decomposition)
- 주어진 DTM(document, term matrix, A)을 A=U∑VT의 형태로 분해
- document 수: m
- term 수: n
Truncated SVD를 이용한 차원 축소
- ∑ 행렬
- 차원 축소의 핵심
- 가장 정보량이 많은 축이 위에 있고, 아래로 갈수록 점차 정보량이 작아짐 → 텍스트 분석에 조금 더 적합한 차원 축소 방법(vs PCA)
- Truncated SVD에서는 ∑의 대각 원소(특이값) 가운데 상위 t개만 골라냄
- 즉, t는 잠재 의미 중에서 비중이 큰 것부터 차례대로 골라낸 것.
- A'은 축소는 U, ∑, V로 복원한 값으로, A에 근사한 값
1.4 DTM
- 문서 단어 행렬
- 각 단어는 고유한 정수 인덱스를 가지며, 해당 단어가 등장 횟수를 해당 인덱스의 값으로 가짐
- 띄어쓰기 단위 토큰화를 수행한다고 가정
- 각 문서에서 등장한 단어의 빈도를 행렬의 값으로 표기
구현
corpus는 토큰화되지 않은 문장들에 해당한다. 실행 결과 문서 4개 단어 9개인 것을 확인할 수 있다.
- sklearn.decomposition.TruncatedSVD
- n_components: 축소할 차원 크기 t
- singularvalues: ∑t, 대각원소만으로 구성된 벡터
- components_:VtT, 축소된 차원을 행으로 하고 특성벡터(단어)를 열로 하는 벡터
- fit_transform(X):Ut∑t 반환, 즉 X에 대해 TruncatedSVD를 수행한 결과를 이용해 X를 t차원으로 축소한 행렬
- transform(X): XVt를 반환, 즉 학습 과정에서 생성한 Vt의 전치행렬을 주어진 X에 곱함으로써 t차원으로 축소한 행렬 반환
1.5 Cosine Similarity
- 두 벡터 간의 코사인 각도를 이용하여 구할 수 있는 두 벡터의 유사도
- 두 벡터의 방향이 완전한 동일한 경우(0도)에는 1
- 90도의 각을 이루면 0
- 180도로 반대의 방향을 가지면 -1
- 코사인 유사도는 -1 이상 1 이하의 값을 가지며 값이 1에 가까울수록 유사도가 높다고 판단
- 직관적으로 이해하면 두 벡터가 가리키는 방향이 얼마나 유사한가를 의미
LSA를 이용한 의미 기반의 문서 간 유사도
- 모두 원본 문서와 동일한 카테고리 → 의미적인 유사성이 작동
- CountVector 및 TF-IDF 벡터와 비교
- 차원이 적기 때문에 상대적으로 더 적은 공간에 문서들 위치
- 이로 인해 거리에 기반한 작업, 클러스터링 및 시각화에서 더 유리
2. t-SNE
- 시각화를 위해 사용되는 비지도 학습 알고리즘
- 다차원 데이터 사이의 거리를 가장 잘 보존하는 2차원 좌표를 찾기 위해 사용
t-SNE를 이용한 시각화
- t-SNE를 이용해 그린 그래프에서 모양이 좋게 나타나면 원래의 다차원 데이터 간의 거리도 의미 있게 잘 계산된다고 할 수 있음
- 각각 x, y 좌표에 해당하는 2차원으로 차원을 축소 후 그래프를 그림
t-SNE를 이용한 시각화 준비
- 크기 제한 없이 전체 특성 벡터를 다 사용하기 위해 새롭게 TF-IDF 특성벡터를 생성
- 시각화가 목적이므로 학습 데이터셋만 변환하여 사용
- TSNE 패키지를 이용하여 2차원으로 축소한 후 차원 확인
label, 즉 카테고리 간의 구분 없이 고르게 분포된다.
LSA를 이용한 차원 축소
- 차원 축소 후의 t-SNE 결과
- 1,2는 비교적 잘 구분이 되고, 0,3 카테고리는 겹치는 경향 존재
- 0,3은 atheism, religion으로 우리말로는 각각 무신론과 종교
- 따라서 내용 상으로 겹치는 부분이 있을 가능성 존재
