인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

김태훈님의 프로필 이미지
김태훈

작성한 질문수

[개정판] 파이썬 머신러닝 완벽 가이드

SVD를 이용한 행렬 분해 실습 및 NMF(Non Negative Matrix Factorization)의 이해

사이킷런에서의 TruncatedSVD, NMF 에서 리턴하는 값

작성

·

166

0

안녕하세요.

사이킷런에서의 TruncatedSVD, NMF 에서

transform을 하면 리턴하는 값이

행렬 분해식에서 보면

A = U * Σ * Vt (SVD)

V = W * H (NMF) 

각각, U와 W 인건가요?

'''

iris = load_iris()

iris_ftrs = iris.data

# 2개의 주요 component로 TruncatedSVD 변환

tsvd = TruncatedSVD(n_components=2)

tsvd.fit(iris_ftrs)

iris_tsvd = tsvd.transform(iris_ftrs)

'''

답변 1

0

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까, 

사이킷런에서 제공하는 TruncatedSVD와 NMF는 불친절하게도(?) 행렬 분해된 U   Σ  Vt나 W, H와 같은 개별 분해 행렬을 반환하지 않습니다. 사이킷런의 TruncatedSVD의 fit() 을 수행하면 내부적으로 원본 행렬을 U   Σ  Vt 로 분해하고, transform() 을 수행하면 이 U * Σ * Vt을 재 결합하여 차원 축소가 적용된 최종 변환 행렬만을 반환합니다.NMF 역시 마찬가지 입니다. 

반면에 사이파이의 svds (scipy.sparse.linalg import svds)는 개별 분해 행렬을 반환하고, 이를 재 결합(dot연산)하여 차원 축소를 수행할 수 있습니다.

감사합니다.

김태훈님의 프로필 이미지
김태훈

작성한 질문수

질문하기