NMF
Non-negative Matrix Factorization
NMF Non-negative Matrix Factorization
하나의 데이터 X를 가중치 W와 점수 H의 곱으로 쪼갬
이때 W와 H는 모두 ≥0
• PCA에 비해 점수의 해석이 좀 더 쉬움. (음수가 나오지 않기 때문에)
• 원데이터를 보존하지는 않음
문서 단어 행렬 Document-Term Matrix
문서별 단어의 빈도를 정리한 행렬
에게 | 만들다 | 아름다운 | 한글 | |
Doc1 | 1 | 0 | 1 | 2 |
Doc2 | 0 | 2 | 2 | 2 |
Doc3 | 4 | 0 | 3 | 5 |
Doc4 | 2 | 0 | 2 | 3 |
Python : PCA와 NMF로 차원 축소 & 해석하기
data : 심리학 논문 초록 데이터
PCA | NMF |
# 데이터 불러오기 import pandas as pd psyabs = pd.read_excel('C:\\Users\\suyeo\\Downloads\\dataset\\ann_rev_psy.xlsx') |
|
# 10차원으로 축소 from sklearn.decomposition import PCA # 논문에 나오는 단어 패턴을 10개의 점수로 요약한다. pca = PCA(n_components=10) pca.fit(psyabs) |
# 10차원으로 축소 from sklearn.decomposition import NMF # 논문에 나오는 단어 패턴을 10개의 점수로 요약한다. nmf = NMF(n_components=10) nmf.fit(psyabs) |
# 단어별 가중치 import pandas as pd weight = pd.DataFrame(pca.components_.T) # pca.components_.T < 어떤 단어들이 많이 나오면 점수가 많이 올라가나 => 즉 가중치 weight.index = psyabs.columns weight |
# 단어별 가중치 import pandas as pd weight2 = pd.DataFrame(nmf.components_.T) weight2.index = psyabs.columns weight2 |
# 해석 weight.sort_values(by=0, key=abs, ascending=False) |
#해석 weight2.sort_values(by=0, ascending=False) |
> memory가 많이나오면,
점수를 이해하기가 쉽지 않다. |
> 최근(new, recent), 연구(research, work) 등에 관련된 차원임을 알 수 있음 |
> NMF로 차원축소한 차원의 해석 | |
weight2.sort_values(1).tail(10) | |
> 기억(memory)과 관련된 주제의 논문이면 1번 점수가 올라간다. |
'NMF 차원축소' 를 사용할 수 있는 예
* 차원축소는 '점수'를 만드는 것이 목적
· 고객 리뷰 분석
· 최근 뉴스 동향
· 기존 제품 설명 분석 > 제품 특성 점수화
'Python' 카테고리의 다른 글
[Python/ 데이터 분석] API (Application Programming Interface) 사용하기 (0) | 2023.04.10 |
---|---|
[Pandas] 컬럼명 변경하기/ 순서바꾸기 (0) | 2022.10.22 |
[Python] 클래스 : 상속(Inheritance) (0) | 2022.08.29 |
[Python] 웹크롤링? 웹 스크래핑 (0) | 2022.08.28 |
[Python] 모듈(Module) (0) | 2022.08.28 |