使用线性SVM实现对垃圾邮件分类

简介: 使用线性SVM实现对垃圾邮件分类

代码地址


代码地址


使用线性SVM实现对垃圾邮件分类


(1)问题描述:

编程实现一个垃圾邮件SVM线性分类器,分别在训练集和测试集上计算准确率。其中训练数据文件:task3_train.mat,要求导入数据时输出样本数和特征维度。测试数据文件:task3_test.mat,要求导入数据时输出样本数和特征维度,测试数据标签未给出。(程序运行时间10mins左右)


(2)实现过程:

1.分析数据:


利用给出loadData(),读取数据,并输出维度:

X, y = svmF.loadData('task3_train.mat')
shape = np.shape(X)
print('训练集样本数:%d,特征维度:%d' % (shape[0], shape[1]))
'''
output:
训练集样本数:4000,特征维度:1899
'''


观察输入如下图所示:



可知,这里是已经完成了邮件特征变量的提取的数据。


完成了邮件特征变量的提取之后, 可以利用4000个训练样本和1000个测试样本训练SVM算法, 每个原始的邮件将会被转化为一个 x ∈ R 1900 的向量 (词汇表中有1899个词汇, x 0 = 1会被添加到向量中)。


2.训练模型:


载入数据集之后, 用变量 y = 1 表示 垃圾邮件, 而 y = 0  表示非垃圾邮件可就可以训练SVM算法了。


这里我们使用sklearn的svm,具体实现代码如下所示:

c = 0.1
clf = svm.SVC(c, kernel='linear')
clf.fit(X, y)


在训练集上的精度如下:

p = clf.predict(X)
print('Training Accuracy: {}'.format(np.mean(p == y) * 100))



尝试高斯核:

c = 1
sigma = 0.1
clf = svm.SVC(c, kernel='rbf', gamma=np.power(sigma, -2))
clf.fit(X, y)


3.输出预测结果:

result = clf.predict(X_t)
np.savetxt('result.txt', result, fmt='%d', delimiter='\n')


实验小结:


支持向量机的参数选择

C : C:C:对于C,C越大,可以理解为正则化系数越小,会出现lower bias和high variance的问题就是过拟合;C越小,可以理解为lambda越大,会出现high bias和low variance的问题就是欠拟合。


sigma:对于高斯函数的sigma,sigma越大,特征变化越平滑,会出现high bias和low variance的问题就是欠拟合;sigma越小,特征变化越陡峭,会出现lower bias和high variance的问题就是过拟合。


核函数选择:


当特征数量相对于训练集数量很大时,使用逻辑回归或者是使用线性核函数的支持向量机;

当特征数量很少,训练集数据量一般,使用高斯核函数的支持向量机;

当特征数量很少,训练集数据很大,可以考虑添加更多特征,然后使用逻辑回归或者是使用线性核函数的支持向量机。

目录
相关文章
|
6月前
|
人工智能 自然语言处理 算法
什么是智能客服?2026年智能客服的底层逻辑
智能客服融合大模型、NLP等技术,实现7×24小时全渠道服务,已从成本工具升级为驱动企业数字化转型的核心枢纽。瓴羊Quick Service依托阿里生态与AI Agent能力,支持业务闭环与数据反哺,助力企业降本增效、提升体验并创造业务价值,成为多行业优选方案。
|
11月前
|
安全 Java Shell
Java模块化编程(JPMS)简介与实践
本文全面解析Java 9模块化系统(JPMS),帮助开发者解决JAR地狱、类路径冲突等常见问题,提升代码的封装性、性能与可维护性。内容涵盖模块化核心概念、module-info语法、模块声明、实战迁移、多模块项目构建、高级特性及最佳实践,同时提供常见问题和面试高频题解析,助你掌握Java模块化编程精髓,打造更健壮的应用。
|
机器学习/深度学习 算法
深度学习中的优化算法:从梯度下降到Adam
本文深入探讨了深度学习中的核心——优化算法,重点分析了梯度下降及其多种变体。通过比较梯度下降、动量方法、AdaGrad、RMSProp以及Adam等算法,揭示了它们如何更高效地找到损失函数的最小值。此外,文章还讨论了不同优化算法在实际模型训练中的表现和选择依据,为深度学习实践提供了宝贵的指导。
534 7
|
存储 人工智能 Cloud Native
NAS深度解析:面向云原生应用的文件存储
本文深入解析了面向云原生应用的文件存储NAS,由阿里云专家分享。内容涵盖Cloud Native与AI浪潮下的技术创新,包括高性能、弹性伸缩、成本优化及数据安全等方面。针对云原生应用的特点,NAS在Serverless生态中不断演进,提供多种产品规格以满足不同需求,如极速型NAS、归档存储等,确保用户在高并发场景下获得稳定低延时的存储体验。同时,通过优化挂载参数和容器访问策略,提升整体性能与可用性。
755 11
|
机器学习/深度学习 算法 PyTorch
【从零开始学习深度学习】38. Pytorch实战案例:梯度下降、随机梯度下降、小批量随机梯度下降3种优化算法对比【含数据集与源码】
【从零开始学习深度学习】38. Pytorch实战案例:梯度下降、随机梯度下降、小批量随机梯度下降3种优化算法对比【含数据集与源码】
|
机器学习/深度学习 算法 数据处理
SVM的优缺点是什么
SVM的优缺点是什么
1643 9
|
物联网 5G API
怎么在三大运营商中选择物联网卡
在选择物联网卡(IoT卡)的运营商时,您需要考虑几个关键因素,包括网络覆盖、服务质量、价格、功能需求以及后续的技术支持等。中国的三大主要运营商是中国移动、中国联通和中国电信,它们各自在物联网领域有不同的优势和特点。以下是一些建议,帮助您在这三者之间做出选择:
|
机器学习/深度学习 算法 数据挖掘
一文介绍回归和分类的本质区别 !!
一文介绍回归和分类的本质区别 !!
1756 1
|
机器学习/深度学习 数据采集 自然语言处理
【机器学习】逻辑回归:智能垃圾邮件分类实例
【机器学习】逻辑回归:智能垃圾邮件分类实例
1193 0
|
数据采集 数据处理 开发者
Python中的filter函数用法详解
Python中的filter函数用法详解
1326 0

热门文章

最新文章