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
반응형