使用线性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的问题就是过拟合。


核函数选择:


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

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

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

目录
相关文章
|
9月前
|
机器学习/深度学习 传感器 算法
BES-LSSVM分类预测 | 秃鹰搜索优化最小二乘支持向量机分类预测
BES-LSSVM分类预测 | 秃鹰搜索优化最小二乘支持向量机分类预测
|
2月前
|
机器学习/深度学习 算法 C++
选择适合的SVM模型进行分类任务
选择SVM模型时需考虑数据线性可分性、问题类型(二分类或多分类)、优化算法(凸优化优势)及性能指标(如准确率、召回率)。数据非线性可分时可使用核技巧。针对多分类,有OVO、OVA和DAG方法。同时,利用交叉验证评估模型泛化能力。
19 4
|
2月前
|
算法 Python
利用贝叶斯算法对简单应用实现预测分类
利用贝叶斯算法对简单应用实现预测分类
26 0
|
2月前
|
SQL 数据可视化 数据挖掘
R语言线性分类判别LDA和二次分类判别QDA实例
R语言线性分类判别LDA和二次分类判别QDA实例
|
10月前
|
机器学习/深度学习 算法 索引
逻辑回归与多项式特征:解密分类问题的强大工具
逻辑回归与多项式特征:解密分类问题的强大工具
|
12月前
|
机器学习/深度学习 传感器 数据采集
【SVM分类】基于支持向量机的数据分类预测(libsvm)附matlab代码
【SVM分类】基于支持向量机的数据分类预测(libsvm)附matlab代码
|
12月前
|
机器学习/深度学习 文字识别 监控
使用 HOG 功能和多类 SVM 分类器对数字进行分类
使用 HOG 功能和多类 SVM 分类器对数字进行分类。
96 0
分类问题的判别
分类问题的判别 自用
40 0
|
机器学习/深度学习 存储 算法
机器学习算法(四): 基于支持向量机的分类预测(SVM)
机器学习算法(四): 基于支持向量机的分类预测(SVM)
|
机器学习/深度学习 数据可视化 计算机视觉
图像分类_03分类器及损失:线性分类+ SVM损失+Softmax 分类+交叉熵损失
解释:w的每⼀⾏都是其中⼀个类的分类器。这些数字的⼏何解释是,当我们改变w的⼀行时,像素空间中相应的线将以不同的⽅向旋转。⽽其中的偏置是为了让我们避免所有的分类器都过原点。
126 0

相关实验场景

更多