ML/FeatureExtraction NMF

[ML/FeatureExtraction] NMF(Non - Negative Matrix Factorization)

NMF는 원본행렬$V$ 내의 모든 원소값이 모두 양수라는 것이 보장되면 두 개의 양수 행렬로 분해 할 수 있다.(non-negative 데이터는 non-negative feature로 설명하는것이 좋다.)
NMF는 PCA,SVD와 같은 factorization 방법에 비해 데이터 구조를 더 잘 반영한다. link

분해된 행렬은 잠재 요소를 특성으로 가진다.
분해행렬$W$는 원본 행렬에 대해서 이 잠재요소의 값이 얼마나 되는지에 대응하며 분해행렬$H$는 잠재요소가 원본 열(속성)로 어떻게 구성 됐는지를 나타낸다.

주로 NMF는 차원축소를 통한 잠재요소 도출로 이미지 변환 및 압축/ 텍스트의 토픽도출 영역에서 사용된다. 또한 영화 추천과 같은 추천영역에 활발하게 적용된다.
사용자-평가 데이터 세트를 행렬분해기법을 통해 분해하면서 사용자가 평가하지 않은 상품에 대한 잠재적인 요소를 추출해 이를 통해 평가순위를 예측하고 높은 순위로 예측된 상품을 추천해주는 방식이다. 이를 잠재요소기반의 추천방식(Latent Factorizing)이라한다.


Tutorial

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from sklearn.decomposition import NMF
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt

iris = load_iris()
X_feature = iris.data
y_label = iris.target

nmf = NMF(n_components=2)
iris_nmf = nmf.fit_transform(X_feature)
colors = ['red','blue','green']
for i,color in enumerate(colors):
    plt.scatter(iris_nmf[iris.target==i][:,0],iris_nmf[iris.target==i][:,1],c=color,label=iris.target_names[i])
plt.xlabel('NMF component 1')
plt.ylabel('NMF component 2')
plt.legend()

Practice

  • Feature extraction NMF link

Reference