작성
·
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연산)하여 차원 축소를 수행할 수 있습니다.
감사합니다.