AI 이론/Classification (supervised)

[머신러닝] Naive Bayes

jasonshin 2021. 11. 26. 18:06

나이브 베이즈를 이용한 스팸 분류

PROBLEM STATEMENT

  • 5,574개의 이메일 메시지가 있으며, 스팸인지 아닌지의 정보를 가지고 있다.
  • 컬럼 : text, spam
  • spam 컬럼의 값이 1이면 스팸이고, 0이면 스팸이 아닙니다.
  • 스팸인지 아닌지 분류하는 인공지능을 만들자 - 수퍼바이즈드 러닝의 분류 문제!

STEP #0: LIBRARIES IMPORT

STEP #1: IMPORT DATASET

STEP #2: VISUALIZE DATASET

스팸은 몇개이고, 아닌것은 몇개인지 확인하시오.

spam_df['spam'].value_counts()

이메일의 길이가 스팸과 관련이 있는지 확인해 보려 합니다. 이메일의 문자 길이를 구해서, length 라는 컬럼을 만드세요.

spam_df['text'].apply(len)

 

글자 길이를 히스토그램으로 나타내시오.

spam_df['length'].hist()
plt.show()

가장 긴 이메일을 찾아서 스팸인지 아닌지 확인하고, 이메일 내용을 확인하시오.

spam_df.loc[spam_df['length'] == spam_df['length'].max(), ]
spam_df.loc[spam_df['length'] == spam_df['length'].max(), 'text'][2650]

0은 스팸이 아니고, 1은 스팸입니다. 파이차트를 통해, 스팸과 스팸이 아닌것이 몇 퍼센트인지, 소수점 1자리 까지만 보여주세요.

spam_df['spam'].value_counts()
plt.pie(spam_df['spam'].value_counts(), autopct='%.1f')
plt.show()

스팸이 아닌것은 ham 변수로, 스팸인것은 spam 변수로 저장하시오.

ham = spam_df.loc[spam_df['spam']==0, ]
spam = spam_df.loc[spam_df['spam']==1, ]
# 스팸의 이메일 길이를 히스토그램으로 나타내시오.
ham['length'].hist()
plt.show()
# 햄의 이메일 길이를 히스토그램으로 나타내시오.
spam['length'].hist()
plt.show()
spam_df.corr()

STEP #3: CREATE TESTING AND TRAINING DATASET/DATA CLEANING

STEP 3.1 쉼표, 마침표 등의 구두점 제거하기

STEP 3.2 STOPWORDS(불용어) 제거하기

STEP 3.3 COUNT VECTORIZER

이제, 우리의 데이터프레임에 있는, 이메일 내용을 Cleaning 한다.

이메일의 내용을 벡터라이징 한다.

STEP#4: TRAINING THE MODEL WITH ALL DATASET

STEP#4: Training셋과 Test셋으로 나눠서, 학습한다. 테스트셋은 20%로 한다.

STEP#5: 테스트셋으로 평가한다. 분류의 문제이므로 컨퓨전 매트릭스 확인.

WordCloud Visualizing - 스팸 이메일에는 어떤 단어들이 많이 들어있는지 Visualizing

반응형