데이터분석/Python
머신러닝 Example by Python - 토픽 모델 시스템 만들기 (문서 분류)
버섯도리
2022. 1. 14. 14:48
# 데이터 다운로드 경로 : https://archive.ics.uci.edu/ml/machine-learning-databases/00228/
## 1. LDA를 이용하여 문자에서 토픽 추출하기
from sklearn.decomposition import LatentDirichletAllocation
from sklearn.feature_extraction.text import CountVectorizer
spam_header = 'spam\t'
no_spam_header = 'ham\t'
documents = []
with open('F:/1_Study/1_BigData/7_FirstML/smsspamcollection/SMSSpamCollection', 'rt', encoding='UTF8') as file_handle:
for line in file_handle:
if line.startswith(spam_header):
documents.append(line[len(spam_header):])
elif line.startswith(no_spam_header):
documents.append(line[len(no_spam_header):])
# LDA는 단어 빈도 피처보다 개수 피처가 잘 동작하기 때문에
# CountVectorizer를 사용합니다. 또한 토픽 모델에 도움이 되지 않는
# 단어(stop_words)를 자동으로 제거합니다.
vectorizer = CountVectorizer(stop_words='english', max_features=2000)
term_counts = vectorizer.fit_transform(documents)
vocabulary = vectorizer.get_feature_names()
# 토픽 모델을 학습합니다.
topic_model = LatentDirichletAllocation(n_components=10)
topic_model.fit(term_counts)
# 학습된 토픽을 하나씩 출력합니다.
topics = topic_model.components_
for topic_id, weights in enumerate(topics):
print('topic %d' % topic_id, end=': ')
pairs = []
for term_id, value in enumerate(weights):
pairs.append( (abs(value), vocabulary[term_id]) )
pairs.sort(key=lambda x: x[0], reverse=True)
for pair in pairs[:10]:
print(pair[1], end=',')
print()
출처 : 처음 배우는 머신러닝 : 기초부터 모델링, 실전 예제, 문제 해결까지