You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
151 lines
4.0 KiB
Matlab
151 lines
4.0 KiB
Matlab
%% 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);
|
|
|
|
fprintf('Program paused. Press enter to continue.\n');
|
|
pause;
|
|
|
|
%% ==================== 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 = 1;
|
|
model = svmTrain(X, y, C, @linearKernel, 1e-3, 20);
|
|
visualizeBoundaryLinear(X, y, model);
|
|
|
|
fprintf('Program paused. Press enter to continue.\n');
|
|
pause;
|
|
|
|
%% =============== 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 = 0.5 :' ...
|
|
'\n\t%f\n(this value should be about 0.324652)\n'], sim);
|
|
|
|
fprintf('Program paused. Press enter to continue.\n');
|
|
pause;
|
|
|
|
%% =============== 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);
|
|
|
|
fprintf('Program paused. Press enter to continue.\n');
|
|
pause;
|
|
|
|
%% ========== 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');
|
|
|
|
% Load from ex6data2:
|
|
% You will have X, y in your environment
|
|
load('ex6data2.mat');
|
|
|
|
% 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);
|
|
|
|
fprintf('Program paused. Press enter to continue.\n');
|
|
pause;
|
|
|
|
%% =============== 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);
|
|
|
|
fprintf('Program paused. Press enter to continue.\n');
|
|
pause;
|
|
|
|
%% ========== 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.
|
|
%
|
|
|
|
% Load from ex6data3:
|
|
% You will have X, y in your environment
|
|
load('ex6data3.mat');
|
|
|
|
% Try different SVM Parameters here
|
|
[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);
|
|
|
|
fprintf('Program paused. Press enter to continue.\n');
|
|
pause;
|
|
|