Coursera_Stanford_ML_ex6_支持向量机(SVM) 作业记录

来源:互联网 发布:管家婆软件那三个 编辑:程序博客网 时间:2024/05/16 05:38

Programming Exercise 6:Support Vector Machines

这周总结一下Week7的作业,利用SVM实现垃圾邮件分类,作业中并未要求实现SVM的训练过程,所以总体上来说难度不大。

      首先看一下作业要求(打星号的需要提交):


     别看文件多,但是要求提交的只有四个。

一.ex6

gaussianKernel.m要求实现高斯型核函数。

编程无难度。

sim=sim+exp(-(x1-x2)'*(x1-x2)/2/sigma^2);

dataset3Params.m选择使测试误差达到最小时的参数C, sigma

err=10000;temp=[0.01,0.03,0.1,0.3,1,3,10,30];for i=1:length(temp)    for j=1:length(temp)        model= svmTrain(X, y, temp(i), @(x1, x2) gaussianKernel(x1, x2,temp(j)));        predictions = svmPredict(model, Xval);                if(err>mean(double(predictions ~= yval)))            err=mean(double(predictions ~= yval));            C=temp(i);            sigma=temp(j);        end    endend 

其中svmTrain中使用了SMO算法,结果如下。

二.ex6_spam

     processEmail.m在一个单词序列中查找每一个邮件单词,如果含有则将其在单词序列中的位置加     入word_indices
for i=1:length(vocabList)   if(strcmp(vocabList(i),str))      word_indices=[word_indices;i];   endend

emailFeatures.mword_indices中对应位置的单词进行标记。

for i=1:length(word_indices)    x(word_indices(i))=1;end

训练误差为99.85,测试误差为98.80。

总结一下,这次作业基本无难度,但是要把整个邮件检测系统搞明白,例如邮件中字符处理,SVM的训练过程等真的需要一段时间。





0 0