1. 차원감소 dimensionality reduction란?
차원감소 dimensionality reduction은 말 그대로 벡터의 차원을 줄이는 방법을 말합니다.
데이터의 양이 너무 방대할 때,
행렬 내부 원소의 대부분이 0이거나(sparse matrix) 중요도가 낮을 때,
벡터의 차원을 줄이게 됩니다.
이때, 단순히 물질적으로 공간을 축소하는 것이 아니라
중요한 정보는 최대한 유지하면서 줄이는 것이 핵심입니다.
아래의 그림처럼 데이터의 분포를 고려해 중요한 '축'을 찾는 일을 수행합니다.
2. SVD 특잇값분해
차원을 감소시키는 방법 중, 특이값 분해 SVD(Singular Value Decomposition)을 이용하겠습니다.
SVD는 임의의 행렬을 세 행렬의 곱으로 분해합니다.
U, V는 직교행렬 orthogonal matrix이고, 그 열벡터는 서로 직교합니다.
S는 대각행렬 diagonal matrix이며 대각성분 외에는 모두 0인 행렬입니다.
U는 어떤 공간의 축을 형성하며, 단어 공간으로 취급하도록 합시다.
S의 대각성분에는 특잇값이 큰 순서로 나열되어 있습니다. 특잇값이란 해당 축의 중요도라고 간주할 수 있습니다.
그러면 여기서, 중요도가 높은 값은 남겨두고 낮은 값은 없애버리도록 합시다.
이를 그림으로 표현하면 아래와 같습니다.
차원이 감소한 것을 볼 수 있습니다.
3. 코드 구현
파이썬 코드로 살펴봅시다.
SVD는 넘파이의 linalg 모듈이 제공하는 svd메서드로 실행이 가능합니다.
코드는 매우 간단합니다.
※ 하단의 재생버튼▶을 눌러보시면 출력 화면을 볼 수 있습니다.
'머신러닝 > 자연어처리' 카테고리의 다른 글
허깅페이스, 트랜스포머, 자연어처리, 데이터셋로드, 문자, 단어, 토큰화, AutoTokenizer (0) | 2024.08.22 |
---|---|
트랜스포머, 자연어처리, pipeline, 감정분류, 개체명인식, 질문답변, 요약, 생성 (0) | 2024.08.22 |
점별 상호정보량 Pointwise Mutual information(PMI) (0) | 2022.07.29 |
코사인 유사도 cosine similarity (0) | 2022.07.29 |
말뭉치(corpus)란? (0) | 2022.07.28 |