在此,你也可以上网搜索“基于为什么叫支持向量机机的垃圾邮件过滤”加以了解。并在解答中加以描述。

在本练习中我们将使用为什么叫支持向量机机(SVM)来构建垃圾邮件分类器。 我们将从一些简单的2D数据集开始使用SVM来查看它们的工作原理 然后,我们将对一组原始电子郵件进行一些预处理工作并使用SVM在处理的电子邮件上构建分类器,以确定它们是否为垃圾邮件

我们要做的第一件事是看一个简单的二維数据集,看看线性SVM如何对数据集进行不同的C值(类似于线性/逻辑回归中的正则化项)

我们将其用散点图表示,其中类标签由符号表示(+表示正类o表示负类)。


  


![在这里插入图片描述

请注意还有一个异常的正例在其他样本之外。
这些类仍然是线性分离的但它非常紧凑。 我们要训练线性为什么叫支持向量机机来学习类边界 在这个练习中,我们没有从头开始执行SVM的任务所以我要用scikit-learn。

首先我们使用 C=1 看丅结果如何。


  

其次让我们看看如果C的值越大,会发生什么


  

这次我们得到了训练数据的完美分类但是通过增加C的值,我们创建了一个不洅适合数据的决策边界 我们可以通过查看每个类别预测的置信水平来看出这一点,这是该点与超平面距离的函数


  

  

可以看看靠近边界的點的颜色,区别是有点微妙 如果您在练习文本中,则会出现绘图其中决策边界在图上显示为一条线,有助于使差异更清晰

现在我们將从线性SVM转移到能够使用内核进行非线性分类的SVM。 我们首先负责实现一个高斯核函数 虽然scikit-learn具有内置的高斯内核,但为了实现更清楚我們将从头开始实现。

如果你的程序正确这里的输出应该是0.34974


对于该数据集,我们将使用内置的RBF内核构建为什么叫支持向量机机分类器并檢查其对训练数据的准确性。 为了可视化决策边界这一次我们将根据实例具有负类标签的预测概率来对点做阴影。 从结果可以看出它們大部分是正确的。


  

  

  


对于第三个数据集我们给出了训练和验证集,并且基于验证集性能为SVM模型找到最优超参数 虽然我们可以使用scikit-learn的内置网格搜索来做到这一点,但是本着遵循练习的目的我们将从头开始实现一个简单的网格搜索。

现在我们将进行第二部分的练习。 在這一部分中我们的目标是使用SVM来构建垃圾邮件过滤器。 在练习文本中有一个任务涉及一些文本预处理,以获得适合SVM处理的格式的数据 然而,这个任务很简单(将字词映射到为练习提供的字典中的ID)而其余的预处理步骤(如HTML删除,词干标准化等)已经完成。 我将跳過机器学习任务而不是重现这些预处理步骤,其中包括从预处理过的训练集构建分类器以及将垃圾邮件和非垃圾邮件转换为单词出现佽数的向量的测试数据集。


每个文档已经转换为一个向量其中1,899个维对应于词汇表中的1,899个单词。 它们的值为二进制表示文档中是否存在單词。 在这一点上训练评估是用一个分类器拟合测试数据的问题。


  

这个结果是使用默认参数的 我们可能会使用一些参数调整来获得更高的精度,尽管95%的精度相当不错

在下一个作业中,我们将使用K-Means和主成分分析进行聚类和图像压缩

coursera斯坦福机器学习公开课为什么叫支持向量机机作业(垃圾邮件分类) 评分

简单的SVM分类程序并用高斯核SVM进行垃圾邮件分类,已通过submission供大家学习参考

在本练习中您将使用为什么叫支持向量机机来建立一个垃圾邮件分类器。
在本练习的前半部分您将使用为什么叫支持向量机机(SVM)处理各种两维的样本数据集。使用这些數据集进行实验将帮助您直观地了解为什么叫支持向量机机如何工作以及如何使用带高斯核函数的SVM。在后半部分的练习中您将使用为什么叫支持向量机机来构建垃圾邮件分类器。本次作业只包含前半部分

核函数用来定义新的特征变量。将训练数据作为标记点利用核函数计算每个训练数据与其他训练数据之间的相似度得到新的特征向量。这样优化目标和假设函数变为:

0 0 核函数需要满足默塞尔定理(Mercer’s theorem)保证SVM优化运行正常,不会发散

对于高斯核函数中的方差sigma:

对于大部分情况神经网络表现都很好,但是训练慢

逻辑回归与SVM比较:逻輯回归对异常值敏感,SVM对异常值不敏感(抗噪能力强)——为什么叫支持向量机机改变非为什么叫支持向量机样本并不会引起决策面的变化;泹是逻辑回归中改变任何样本都会引起决策面的变化

样本集1首先可视化数据集,然后使用不同的C再用线性核函数的SVM训练模型并画出决策邊界

  • svm.SVC( ) 可以选择C值,以及核函数调用之后先fit,再predict注意predict时输入为一个二维数组,因此在画等高线的时候需要先把网格展开成二维数组进荇predict再重新组成网格画图在选择核函数时可以自己定义,例如:svm.SVC(kernel=my_kernel)内置核函数默认为rbf高斯核,形式为
  • 具体可参考sklearn中文文档:
  • 在计算错误率時可能会涉及两幅图像像素值之间的加减运算,这里需要注意的是图像像素值是ubyte类型ubyte类型数据范围为0~255,若做运算出现负值或超出255则會抛出异常,因此需要将预测的y值和yval强制转为int再进行相减
 '''线性核函数模型-样本1''' '''高斯核函数模型-样本2''' '''高斯核函数模型-样本3''' 

C=1时的决策边界,仳较合适的给出了间距

C=100时的决策边界把异常点也正确分类了,可以看出C太大可能会过拟合

样本集2可视化结果明显非线性可分

C=1、sigma=0.01时的决筞边界,显然过拟合了此时simga太小了

C=1、sigma=0.5时的决策边界,显然拟合的不好欠拟合了,此时simga太大了

参考资料

 

随机推荐