베르누이 나이브베이즈
- 데이터의 특징이 0또는 1로 표현하는 경우 사용된다.
1. 단어 정제 안함
# 필요한 라이브러리 불러오기 import pandas as pd import numpy as np from collections import Counter from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score, classification_report |
|
# 데이터 불러오기 / 구조 확인 data = pd.read_csv("C:/data/bulletin_board.txt",header=None, encoding="CP949") data.info() |
|
# 컬럼 이름 바꾸기 data.columns = ['text','class'] |
|
# 파이썬의 베르누이 나이브베이즈는 숫자로만 써야한다. data['label'] = data['class'].map({'긍정':1},{'부정':0}) # NaN값나옴 data['class'].str.len() # 길이가 3임. 공백문자가 들어감 data['class'] = data['class'].str.strip() data['label'] = data['class'].map({'긍정':1, '부정':0}) data['label'] |
|
# 문장안에 단어를 모두 컬럼으로 만들어야함 from sklearn.feature_extraction.text import CountVectorizer |
|
# cv.fit_transform : 단어가 있으면 1 없으면 0 x_train = cv.fit_transform(data['text']) x_train |
|
# 내용을 보기위해 배열 형식으로 바꿈 encode_input = x_train.toarray() encode_input |
|
# cv.inverse_transform() : 0,1 중에서 1인 애들만 단어로 보여줌 cv.inverse_transform(encode_input) |
|
# cv.get_feature_names() : 전체문장에서 단어들만 추출해서 열로 만든다. cv.get_feature_names() |
|
# 각 문장에 명사들만 컬럼으로 만들기 from sklearn.naive_bayes import BernoulliNB nb = BernoulliNB() nb.fit(x_train,data['label']) |
|
# 테스트 데이터 만들기 test1 = [{'text':'홍길동은 재미없다'}] x_test1 = cv.transform(pd.DataFrame(test1)) nb.predict(x_test1) |
2. 단어 정제함
# 필요한 라이브러리 불러오기 import pandas as pd import numpy as np from collections import Counter from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score, classification_report |
|
# 데이터 불러오기 / 구조 확인 data = pd.read_csv("C:/data/bulletin_board.txt",header=None, encoding="CP949") data.info() |
|
# 컬럼 이름 변경 data.columns = ['text','class'] data.info() |
|
# 긍정'=1,'부정'=0 으로 바꾸기 data['class'] = data['class'].str.strip() data['label'] = data['class'].map({'긍정':1, '부정':0}) data['label'] |
|
# 텍스트 정제작업 from konlpy.tag import Okt okt = Okt() x = [] stopword = ['은','는','이','가','야','고','이야','에','에서','낸다','난다'] for i in data['text']: a = okt.morphs(i) b = [j for j in a if j not in stopword] x.append(" ".join(b)) data['text'] = Series(x) data |
|
# 단어만 추출 # 인스턴스 만들기 cv = CountVectorizer() # cv.fit_transform : 단어가 있으면 1 없으면 0 x_train = cv.fit_transform(data['text']) encode_input = x_train.toarray() cv.inverse_transform(encode_input) cv.get_feature_names() |
|
# 각 문장에 명사들만 컬럼으로 만들기 from sklearn.naive_bayes import BernoulliNB nb = BernoulliNB() nb.fit(x_train,data['label']) |
|
# 테스트 데이터 만들기 test1 = [{'text':'지하철은 재미없고 짜증난다'}] x_test1 = cv.transform(pd.DataFrame(test1)) nb.predict(x_test1) |
'인공지능 > 머신러닝' 카테고리의 다른 글
머신러닝 연습 ① - 영화평 긍정/부정 리뷰 예측 (0) | 2020.05.14 |
---|---|
NLTK 자연어 처리 패키지 사용 (0) | 2020.05.14 |
붓꽃 데이터 (iris.csv) 분석하기 / 가우시안 나이브베이즈 (0) | 2020.05.13 |
나이브베이즈(Naive Bayes) 분류 (0) | 2020.05.12 |
사건과 확률 (0) | 2020.05.12 |