由于Programming Exercise 6的作业内容可以分为两大块,即1Support Vector Machines 2Span Classification.其中,第一块主要是描述SVM算法的具体实现过程,是本周课程内容的基础,第二块垃圾邮件分类是基于第一块代码的基础上的具体实际应用。第一部分的实现过程已经在前一篇博客中给出,地址为:第一部分:Support Vector Machines。下面介绍第二部分Spam Classification(垃圾邮件分类)的实现过程。
好的,话不多说,开始我们的讲解。
数据集:spamTrain.mat ---训练样本,用于训练垃圾邮件分类器,有4000个训练样本
spamTest.mat ---测试样本,用于查看已得到的分类器对新样本的泛化能力,有1000个训练样本
vocab.txt ---分类器用到的词汇集合,保存在txt中,存有编号和对应的词汇,这里设置的是1899个常用词汇
emailSample1.txt ,emailSample2.txt---邮件样例,用于查看邮件处理算法对邮件的处理效果
spamSample1.txt,spamSample2.txt ---垃圾邮件,用于对以训练的样本进行预测,看分类器判断是否为垃圾邮件
函数文件:ex6_spam.m --- 实验的控制文件,描述实验的进行过程,控制输入输出,绘图等操作。不用修改
getVocabList.m ---将vocab.txt读入matlab中,并放在一个一维字符数组vocabList中。不用修改,直接调用
porterStemmer.m ---英文分词函数。不用修改,直接调用
readFile.m ---读取邮件文本函数。不用修改,直接调用
processEmain.m ---对读取的字符串进行加工,如:去标点,分词,去网址,去数字等。需要修改
emailFeature.m ---看分好词后,这个词是否在词汇库vocabList中,如果在,则在对应的向量上置1。需要修改
svmTrain.m --- 利用训练样本训练SVM分类器,不用修改,直接调用。上篇博客解释过
linearKernel.m --- 线性核函数,不用修改,直接调用。上篇博客解释过
svmPredict.m --- 利用训练得到的model对新样本进行预测,不用修改,直接调用。上篇博客提到过
1.ex6_spam.m为此程序的实现流程,代码如下
<span style="font-size:12px;">%% Initialization
clear ; close all; clc
%% ==================== Part 1: Email Preprocessing ====================
% To use an SVM to classify emails into Spam v.s. Non-Spam, you first need
% to convert each email into a vector of features. In this part, you will
% implement the preprocessing steps for each email. You should
% complete the code in processEmail.m