SVM 垃圾邮件分类

这篇博客记录了使用SVM进行垃圾邮件分类的过程,包括数据预处理、特征提取和模型训练。通过jieba分词和去除停用词,构建词频矩阵,并利用sklearn的CountVectorizer。选用线性核的SVM模型,训练后在测试集上得到0.9777的准确率。最后,作者尝试用模型预测一封验证码邮件,结果被判为垃圾邮件,反映出数据集的局限性。
摘要由CSDN通过智能技术生成

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

然后对邮件进行分词并

  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值