차원 축소란?
NMF(Non-Negative Matrix Factorization, 비음수 행렬 분해)
비음수 행렬 분해(Non-negative matrix factorization, NMF)는 음수를 포함하지 않은 행렬 V를 음수를 포함하지 않은 행렬 W와 H의 곱으로 분해하는 알고리즘이다. 행렬이 음수를 포함하지 않는 성질은 분해 결과 행렬을 찾기 쉽게 만든다. 일반적으로 행렬 분해는 정확한 해가 없기 때문에 이 알고리즘은 대략적인 해를 구하게 된다. 비음수 행렬 분해는 컴퓨터 시각 처리, 문서 분류, 음파 분석, 계량분석화학, 추천 시스템 등에 쓰인다.
사용자의 상품(예: 영화) 평가 데이터 세트인 사용자-평가 순위(user-Rating) 데이터 세트를 행렬 분해 기법을 통해 분해하면서 사용자가 평가하지 않은 상품에 대한 잠재적인 요소를 추출해 이를 통해 평가 순위를 예측하고, 높은 순위로 예측된 상품을 추천해주는 방식이며, 이를 잠재 요소 기반의 추천 방식이라고 한다.
NMF는 Truncated SVD와 같이 낮은 랭크를 통한 행렬 근사(Low-Rank Approximation) 방식의 변형이다. NMF는 원본 행렬 내의 모든 원소 값이 모두 양수(0 이상)라는 게 보장되면 좀 더 간단하게 두 개의 기반 양수 행렬로 분해될 수 있는 기법을 지칭한다.
행렬 분해(Matrix Factorization)는 일반적으로 SVD와 같은 행렬 분해 기법을 통칭하는 것인데, 행렬 분해를 하게 되면 W 행렬과 H 행렬은 일반적으로 아래와 같이 분해되며, 이렇게 분해된 행렬은 잠재 요소를 특성으로 가지게 된다.
- 길고 가는 행렬 W 즉, 원본 행렬의 행 크기와 같고 열 크기보다 작은 행렬 ▶ 원본 행에 대해서 이 잠재 요소의 값이 얼마나 되는지에 대응
- 작고 넓은 행렬 H 즉, 원본 행렬의 행 크기보다 작고 열 크기와 같은 행렬 ▶ 이 잠재 요소가 원본 열(원본 속성)로 어떻게 구성됐는지를 나타내는 행렬
사이킷런에서 NMF는 NMF 클래스를 이용해 지원된다.
[붓꽃 데이터 세트를 NMF를 이용해 2개의 컴포넌트로 변환하고 시각화]
from sklearn.decomposition import NMF
from sklearn.datasets import load_iris
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
iris = load_iris()
iris_ftrs = iris.data
nmf = NMF(n_components = 2)
nmf.fit(iris_ftrs)
iris_nmf = nmf.transform(iris_ftrs)
plt.scatter(x=iris_nmf[:, 0], y=iris_nmf[:, 1], c=iris.target)
plt.xlabel('NMF_component_1')
plt.ylabel('NMF_component_2')
다음 내용
[출처]
파이썬 머신러닝 완벽 가이드
위키백과
'[파이썬 Projects] > <파이썬 머신러닝>' 카테고리의 다른 글
[머신러닝] 군집화 (Clustering) (0) | 2024.10.25 |
---|---|
[머신러닝] 차원 축소 - SVD (0) | 2024.10.24 |
[머신러닝] 차원 축소 - LDA (0) | 2024.10.24 |
[머신러닝] 차원 축소 - PCA (0) | 2024.10.24 |
[머신러닝] 차원 축소(Dimension Reduction) (0) | 2024.10.24 |