비음수 행렬 분해(NMF)

Python으로 배우는 Unsupervised Learning

Benjamin Wilson

Director of Research at lateral.io

비음수 행렬 분해

  • NMF = 비음수 행렬 분해
  • 차원 축소 기법
  • NMF 모델은 해석 가능함(PCA와 달리)
  • 해석이 쉬우면 설명도 쉽습니다!
  • 단, 모든 특성은 비음수(>= 0)여야 함
Python으로 배우는 Unsupervised Learning

해석 가능한 부분

  • NMF는 문서를 주제(또는 "테마")의 조합으로 표현합니다

 

텍스트 상자: DataCamp는 데이터 과학 교육의 선도자로서 기술 혁신을 선도하며 역량 기반 훈련을 제공합니다... 대략 같음 기호 0.6 × 단어 program, r, python, function, method가 있는 텍스트 상자 + 0.5 × 단어 data, analysis, cluster, statistics, mean이 있는 텍스트 상자 + 0.7 × 단어 teaching, learn, lesson, lessons, course가 있는 텍스트 상자

Python으로 배우는 Unsupervised Learning

해석 가능한 부분

  • NMF는 이미지를 패턴의 조합으로 표현합니다

 

3개의 줄무늬 상자 ≈ 0.98 × 한 줄무늬 상자 + 0.91 × 다른 줄무늬 상자 + 0.95 × 또 다른 줄무늬 상자

Python으로 배우는 Unsupervised Learning

scikit-learn NMF 사용법

  • fit() / transform() 패턴을 따릅니다
  • 구성요소 수 지정 필요, 예: NMF(n_components=2)
  • NumPy 배열과 csr_matrix에 사용 가능
Python으로 배우는 Unsupervised Learning

단어 빈도 배열 예시

  • 단어 빈도 배열, 4개 단어, 다수 문서
  • 각 문서의 단어 존재를 "tf-idf"로 측정
    • "tf" = 문서 내 단어 빈도
    • "idf" = 자주 등장하는 단어의 영향 축소

단어 빈도 배열

Python으로 배우는 Unsupervised Learning

NMF 사용 예시

  • samples는 단어 빈도 배열입니다
from sklearn.decomposition import NMF

model = NMF(n_components=2)
model.fit(samples)
NMF(n_components=2)
nmf_features = model.transform(samples)
Python으로 배우는 Unsupervised Learning

NMF 구성요소

  • NMF에는 구성요소가 있습니다
  • PCA에 주성분이 있는 것과 같습니다
  • 구성요소 차원 = samples 차원
  • 항목 값은 음수가 아닙니다
print(model.components_)
[[ 0.01  0.    2.13  0.54]
 [ 0.99  1.47  0.    0.5 ]]
Python으로 배우는 Unsupervised Learning

NMF 특성

  • NMF 특성값은 음수가 아닙니다
  • samples를 복원하는 데 사용합니다
  • 특성값과 구성요소를 결합합니다
print(nmf_features)
[[ 0.    0.2 ]
 [ 0.19  0.  ]
  ...
 [ 0.15  0.12]]
Python으로 배우는 Unsupervised Learning

샘플 복원

print(samples[i,:])
[ 0.12  0.18  0.32  0.14]
print(nmf_features[i,:])
[ 0.15  0.12]

특성값을 곱한 NMF 구성요소를 합산

Python으로 배우는 Unsupervised Learning

샘플 복원

  • 구성요소 × 특성값을 곱해 합산합니다
  • 행렬의 곱으로도 표현할 수 있습니다
  • 이것이 "NMF"의 "행렬 분해"입니다
Python으로 배우는 Unsupervised Learning

NMF는 비음수 데이터에만 적합

  • 문서별 단어 빈도
  • 배열로 인코딩된 이미지
  • 오디오 스펙트로그램
  • 이커머스 구매 이력
  • 그 외 다수
Python으로 배우는 Unsupervised Learning

연습해 봅시다!

Python으로 배우는 Unsupervised Learning

Preparing Video For Download...