Machine Learning Online Class
Exercise 6 | Support Vector Machines
Instructions
------------
This file contains code that helps you get started on the
exercise. You will need to complete the following functions:
gaussianKernel.m
dataset3Params.m
processEmail.m
emailFeatures.m
For this exercise, you will not need to change any code in this file,
or any other files other than those mentioned above.
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);
==================== Part 2: Training Linear SVM ====================
The following code will train a linear SVM on the dataset and plot the
decision boundary learned.
% Load from ex6data1:
% You will have X, y in your environment
load('ex6data1.mat');
fprintf('\nTraining Linear SVM ...\n')
% You should try to change the C value below and see how the decision
% boundary varies (e.g., try C = 1000)
C = 100;
model = svmTrain(X, y, C, @linearKernel, 1e-3, 20);
visualizeBoundaryLinear(X, y, model);
=============== Part 3: Implementing Gaussian Kernel ===============
You will now implement the Gaussian kernel to use
with the SVM. You should complete the code in gaussianKernel.m
fprintf('\nEvaluating the Gaussian Kernel ...\n')
x1 = [1 2 1];
x2 = [0 4 -1];
sigma = 2;
sim = gaussianKernel(x1, x2, sigma);
fprintf(['Gaussian Kernel between x1 = [1; 2; 1], x2 = [0; 4; -1], sigma = %f :' ...
'\n\t%f\n(for sigma = 2, this value should be about 0.324652)\n'], sigma, sim);
=============== Part 4: Visualizing Dataset 2 ================
The following code will load the next dataset into your environment and
plot the data.
fprintf('Loading and Visualizing Data ...\n')
% Load from ex6data2:
% You will have X, y in your environment
load('ex6data2.mat');
% Plot training data
plotData(X, y);
========== Part 5: Training SVM with RBF Kernel (Dataset 2) ==========
After you have implemented the kernel, we can now use it to train the
SVM classifier.
fprintf('\nTraining SVM with RBF Kernel (this may take 1 to 2 minutes) ...\n');
% SVM Parameters
C = 1;
sigma = 0.1;
% We set the tolerance and max_passes lower here so that the code will run
% faster. However, in practice, you will want to run the training to
% convergence.
model= svmTrain(X, y, C, @(x1, x2) gaussianKernel(x1, x2, sigma));
visualizeBoundary(X, y, model);
=============== Part 6: Visualizing Dataset 3 ================
The following code will load the next dataset into your environment and
plot the data.
fprintf('Loading and Visualizing Data ...\n')
% Load from ex6data3:
% You will have X, y in your environment
load('ex6data3.mat');
% Plot training data
plotData(X, y);
========== Part 7: Training SVM with RBF Kernel (Dataset 3) ==========
% This is a different dataset that you can use to experiment with. Try
% different values of C and sigma here.
%
% Try different SVM Parameters here
% 选择误差最小的C和sigma
[C, sigma] = dataset3Params(X, y, Xval, yval);
% Train the SVM
model= svmTrain(X, y, C, @(x1, x2) gaussianKernel(x1, x2, sigma));
visualizeBoundary(X, y, model);