본문 바로가기
기계학습/자연어 처리 머신러닝

신문 제목 분류 실습 - 나이브 베이즈 분류기

by tryotto 2020. 2. 14.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score
 
 
 
# 데이터 셋 가져오기
from sklearn.datasets import fetch_20newsgroups
 
news_data = fetch_20newsgroups(subset='train')
 
 
 
# 주어진 데이터셋을 이용해서 DTM 벡터 만들기
dtm_maker = CountVectorizer() 
dtm_vector = dtm_maker.fit_transform(news_data.data)
 
 
 
 
# DTM 벡터를 TF-IDF 벡터로 변환하기
tfidf_maker = TfidfTransformer()
tfidf_vector = tfidf_maker.fit_transform(dtm_vector)
 
 
 
 
# Naiive Bayes 에 학습시키기
NB_model = MultinomialNB()
NB_model.fit(tfidf_vector, news_data.target)
 
 
 
 
# 학습된 모델에 데이터 넣어본 뒤, 예측값 확인하기
test_data = fetch_20newsgroups(subset='test')
tmp_dtm = dtm_maker.transform(test_data.data)
tmp_tfidf = tfidf_maker.transform(tmp_dtm)
 
predict_data = NB_model.predict(tmp_tfidf)
 
correct = accuracy_score(test_data.target, predict_data)
print("accuracy : ", correct)
 
 
 
 
# 임의의 데이터 하나를 직접 실행 후 예측해보기
import random
 
idx = random.randint(0,len(test_data.data))
little_data = test_data.data[idx:idx+1]
little_data_dtm = dtm_maker.transform(little_data)
little_data_tfidf = tfidf_maker.transform(little_data_dtm)
 
little_data_predict = NB_model.predict(little_data_tfidf)
 
print(little_data)
print("prediction : ", little_data_predict)
print("real data  : ", test_data.target[idx:idx+1])
 
 
 
# 결괏값 라벨을 원문으로 바꾸기
predict_idx = little_data_predict[0]
real_idx = test_data.target[idx:idx+1][0]
 
print("prediction 원문 : ", test_data.target_names[predict_idx])
print("real data 원문  : ", test_data.target_names[real_idx])
 
 
 
cs



정확도가 그리 높진 않지만, 그래도 나쁘진 않은 수치다.

곧바로 네이버 영화 분류기 실습을 해봐야겠다.

나이브 베이즈 분류 모델이었다