머신러닝

비음수 행렬분해(Non-negative Matrix Factorization, NMF)

데이터_박과장 2023. 3. 28. 11:53

비음수 행렬분해(Non-negative Matrix Factorization, NMF)는 주어진 비음수 행렬을 두 개의 비음수 행렬로 분해하는 기법입니다. 이 때 분해된 두 행렬은 원본 행렬의 구성 성분을 표현하는데 사용될 수 있습니다. 비음수 행렬분해를 도식화 하겠습니다.

 

그림1: geeksforgeeks

 

수식으로 나타내면 아래와 같습니다.


A -> 원본 입력 행렬 (W와 H의 선형 조합)
W -> 특성 행렬
H -> 계수 행렬 (W와 관련된 가중치)
k -> A의 저차원 근사치 (k ≤ min(m,n))

 

 

 

NMF의 목적

 

차원 축소와 특성 추출입니다. 따라서 낮은 차원 k를 설정할 때, NMF의 목표는 양수 요소만 포함하는 두 행렬 W ∈ R(m×k)와 H ∈ R(n×k)를 찾는 것입니다. (위 그림 1 참조).

따라서 NMF를 사용하여 곱셈 행렬보다 훨씬 낮은 차원의 행렬을 얻을 수 있습니다. NMF는 원래 인풋데이터가 W 행렬의 각 열로 구성된 것으로 가정하며, H 행렬의 각 열은 W 행렬 내의 '데이터 점의 좌표'를 나타냅니다. 이는 행렬 W와 관련된 가중치를 포함합니다. 이렇게 A 행렬의 각 데이터 점은 W 행렬의 열로 표시되며, W 행렬의 열로 표시되는 양수 벡터의 덧셈 조합으로 근사할 수 있습니다.

 

NMF는 데이터 행렬 V를 두 개의 낮은 순위 행렬 W와 H의 곱으로 분해하여 V가 W와 H의 곱으로 근사값으로 산출 되도록 합니다. NMF는 W와 H의 초기 값 수정을 반복적으로 수행하여 곱이 V에 근접하도록 하며 근사 오차가 기준을 만족하거나 지정된 연산 반복 횟수에 도달하면 NMF 프로세스는 종료됩니다.

 



위의 이미지 처리 사례를 보겠습니다. 인풋 이미지 데이터 A를 만드는, 픽셀로 구성된 행렬이 있다고 가정해 봅시다. NMF를 사용하여 입력 이미지를 얼굴 특징 집합 [행렬 W]과 각 얼굴 특징의 중요도, 즉 가중치 [행렬 H]가 포함 된 두 개의 행렬로 분해하여 나타낼 수 있습니다.