SVM 垃圾邮件分类
-
前言
-之前在学习SVM理论的时候,一边照着别人的思路做了这个实战,SVM只是调用sklean的,主要学习的还是对数据的处理,如何构建一个好的特征向量去学习得到一个好的模型。在这里做下笔记。 -
实战思路:
主要的目标是为了提取特征向量,然后进行训练验证。这里采用的思路是:邮件中某个词在多个邮件(设为10)中出现就提取其作为提取特征,即一个词在10封邮件中出现,就选择这个词作为特征,从而构建每封邮件的特征向量。
为了实现目标,我们首先要对邮件进行分词并且清洗,这里使用 python 的 jieba 库。
这里由于本身机器的问题,我只从所有数据中正反例各取出600封做训练。(提醒我加钱???)
这里定义我们文件的路径:
stopWordFile = ‘./data/stopWords.txt’# 停用词路径
normal = ‘./data/normal_600’# 正例路径
spam = ‘./data/spam_600’# 反例路径
所用的库
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.externals import joblib
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import os
首先先获取停用词列表:
#获取停用词
def getStopWord(file):
stopWords = []
#此处编码之前在windows上设为utf-8可运行,不过后来在ubuntu18上改成gb18030才可以,不解。
with open(file, 'r', encoding='gb18030') as f:
for line in f.readlines():
stopWords.append(line.strip())
f.close()
#print(stopWords)
return stopWords
然后对邮件进行分词并