機器學習之SVM:支持向量機

機器學習之SVM:支持向量機

  • 簡述
  • 包含的文件
  • 支持向量機
  • 垃圾郵件分類

簡述

  • 用支持向量機實現垃圾郵件分類
  • 數據下載:https://github.com/peedeep/Coursera/tree/master/ex6

包含的文件

ex6.m:前半部分練習的Octave/MATLAB腳本

ex6data1.mat:樣本數據集1

ex6data2.mat:樣本數據集2

ex6data3.mat:樣本數據集3

svmTrain.msvm訓練函數

svmPredict.msvm預測函數

plotData.m:數據畫在二維圖上

visualizeBoundaryLinear.m:畫線性邊界

visualizeBoundary.m:畫非線性邊界

linearKernel.m:線性核函數的svm

gaussianKernel.m :高斯核的svm

dataset3Params.m:數據集3的參數

ex6_spam.m:後半部分練習的Octave/MATLAB腳本

spamTrain.mat:垃圾郵件訓練集

spamTest.mat:垃圾郵件測試集

emailSample1.txt:郵件樣本1

emailSample2.txt:郵件樣本2

spamSample1.txt:垃圾郵件樣本1

spamSample2.txt:垃圾郵件樣本2

vocab.txt:詞彙表

getVocabList.m:加載詞彙表

porterStemmer.m:提取函數

readFile.m:從文件中讀取字符串

processEmail.m:處理郵件

emailFeatures.m:郵件特徵提取

支持向量機

1、樣本數據集1

ex6data1.mat數據集的數據是一組可以被線性分割的數據,如下圖:

%% =============== Part 1: Loading and Visualizing 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;
機器學習之SVM:支持向量機

注意,左上角有一個正類樣本+,已經用紅圈圈起來。該出界樣本會影響SVM決策邊界。

下面將對SVM使用不同的C參數值,較大的C參數表示SVM嘗試對所有示例進行正確分類。 C的作用類似於1/λ,其中λ是我們先前用於邏輯迴歸的正則化參數。

C=1

機器學習之SVM:支持向量機

C=100

機器學習之SVM:支持向量機

2、高斯核的SVM

使用SVM做非線性分類器,需要用高斯核處理線性不可分的數據集。

  • 高斯核

為了用svm找到非線性的決策邊界,需要首先需要實現一個高斯核,高斯核函數是測量一對樣本的距離的函數:

機器學習之SVM:支持向量機

function sim = gaussianKernel(x1, x2, sigma)
x1 = x1(:);
x2 = x2(:);
sim = 0;
sim = exp(-(x1 - x2)' * (x1 - x2) / (2 * sigma * sigma));
end
  • 樣本數據集2
機器學習之SVM:支持向量機

從上圖可以觀察到線性決策邊界無法分離正負樣本。通過使用高斯核的svm可以學習出一個非線性決策邊界。

機器學習之SVM:支持向量機

上圖

  • 樣本數據集3
機器學習之SVM:支持向量機

接下來使用高斯核的SVM

機器學習之SVM:支持向量機

垃圾郵件分類

1、處理郵件

  • 詞彙表

2、從郵件中提取特徵

3、訓練

SVM進行垃圾郵件分類

4、垃圾郵件預測

5、試試自己的郵件

6、建立自己的數據集

"


分享到:


相關文章: