大家好,我是Mac Jiang,今天和大家分享一下coursera网站上Stanford University的Machine Learning公开课(吴恩达老师)课程第六次作业:Programming Exercise 6:Support Vector Machines。写这篇博客的目的是为在课程学习中遇到困难的同学提供一些帮助,同时帮助自己巩固这周的课程内容。欢迎博友转载此文章,但希望您在转载之前与我联系并标明文章的出处,谢谢!
由于Programming Exercise 6的作业内容可以分为两大块,即1Support Vector Machines 2Span Classification.其中,第一块主要是描述SVM算法的具体实现过程,是本周课程内容的基础,第二块垃圾邮件分类是基于第一块代码的基础上的具体实际应用。由于文章篇幅有限,本文只讲述第一部分Support Vector Machines的实现过程,第二部分的内容我将在下一篇博客中给出,地址为http://blog.csdn.net/a1015553840/article/details/50826728。
好的,话不多说,开始讲述第一部分的实现过程。
数据集有:ex6data1.mat
ex6data2.mat
ex6data3.mat
实现过程与函数:ex6.m ---控制实验的进程,不用修改
svmTrain.m ---训练SVM算法,是已经开发完善的包,不用修改,直接调用
svmPredict.m ---对新样本进行预测,已开发的包,不用修改,直接调用
plotData.m ----绘制2D图像,不用修改,直接调用
visualizeBoundaryLinear,visualizeBoundaty.m ----可视化决策线,不用修改,直接调用
linearKernel.m ----线性核函数(无核函数),是以完善的包,不用修改,直接调用
guassianKernel.m ----高斯核函数,需要修改
dataset3Params.m ---这个是计算最优C,sigma的函数,需要修改
所以,这部分实验我们实际上只要修改两个文件就可以了,非常简单。
1.好的,我们先看算法的实现流程,实现流程是在ex6.m这个文件中:
%% Initialization
clear ; close all; clc
%% =============== Part 1: Loading and Visualizing Data ================
% We start the exercise by first loading and visualizing the dataset.
% The following code will load the dataset into your environment and plot
% the data.
%
fprintf('Loading and Visualizing Data ...\n')
% Load from ex6data1:
% You will have X, y in your environment
load('ex6data1.mat');
% Plot training data
plotData(X, y);
fprintf('Program paused. Press enter to continue.\n');
pause;
%% ==================== Part 2: Training Linear SVM ====================
% The following code will train a line