본문 바로가기

Artificial Intelligence/Machine Learning

[Machine Learning] 가짜 뉴스 분류 모델 - 머신러닝 모델

728x90

 

[Machine Learning] 가짜 뉴스 분류 모델 - 데이터 전처리의 내용에 이어서 머신러닝 모델을 만들어 보겠습니다.

 

from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB

 

학습 데이터와 검증 데이터로 나눌 train_test_split, naive bayes 모델인 MultinomialNB, clean_message에 있는 단어들의 특징 추출을 위해 문자열 데이터를 수치 벡터로 변환시켜주는 CountVectorizer를 import 해줍니다.

 

X = result_df['clean_message']
y = result_df['label']

 

종속변수 label을 y에 독립변수 cleam_message를 x에 저장해준다. 

 

X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.7, random_state = 1234)

 

전체 데이터에서 테스트 사이즈를 70%로 설정하고, random_state를 1234로 설정해준다.

 

X_train.shape, X_test.shape, y_train.shape, y_test.shape

((31428,), (13470,), (31428,), (13470,))

 

나누어진 데이터의 크기를 확인해본다.

 

vectorizer = CountVectorizer()

 

단어들의 출현 빈도를 체크하기 위한 vectorizer를 생성해준다.

 

X_train_docs = vectorizer.fit_transform(X_train)
X_test_docs = vectorizer.transform(X_test)
print(X_train_docs.shape, X_test_docs.shape)

(31428, 207868) (13470, 207868)

 

X_train과 X_test의 데이터를 vectorizer를 통해 수치 벡터로 만들어 X_train_docs와 X_test_docs에 넣어준다.

 

X_train_docs.toarray()
X_test_docs.toarray()

array([[0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       ...,
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0]], dtype=int64)

 

수치 벡터로 만들어진 데이터를 넘파이 배열로 바꿔준다.

 

naive_bayes = MultinomialNB(alpha=1, fit_prior=True)
naive_bayes.fit(X_train_docs, y_train)

MultinomialNB(alpha=1)

 

MultinomialNB 모델을 alpha=1, fit_prior=True로 설정하여 navive_bayer에 저장한다. 이때 모델의 복잡도를 조정하는 alpha값은 작으면 작을수록 모델의 성능이 향상된다. 

 

y_pred = naive_bayes.predict(X_test_docs)
y_pred

array([1, 1, 1, ..., 0, 0, 0], dtype=int64)

 

predict를 사용하면 0과 1만을 반환하여 0은 가짜 뉴스 1은 진짜 뉴스가 되게 된다.

 

 

y_pred_proba = naive_bayes.predict_proba(X_test_docs)
y_pred_proba

array([[1.44370683e-084, 1.00000000e+000],
       [6.84226586e-004, 9.99315773e-001],
       [1.54851509e-016, 1.00000000e+000],
       ...,
       [1.00000000e+000, 6.05089154e-119],
       [1.00000000e+000, 3.01655703e-019],
       [1.00000000e+000, 1.15350827e-084]])

 

predict_proba를 사용하면 0일 가능성과 1일 가능성을 둘 다 출력해준다.

 

 

결과 약 98.13%

이렇게 만든 머신러닝 모델은 약 98.13%의 정확도를 보여준다.

728x90