機器學習之SVM:支持向量機
- 簡述
- 包含的文件
- 支持向量機
- 垃圾郵件分類
簡述
- 用支持向量機實現垃圾郵件分類
- 數據下載:https://github.com/peedeep/Coursera/tree/master/ex6
包含的文件
ex6.m:前半部分練習的Octave/MATLAB腳本
ex6data1.mat:樣本數據集1
ex6data2.mat:樣本數據集2
ex6data3.mat:樣本數據集3
svmTrain.m:svm訓練函數
svmPredict.m:svm預測函數
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:支持向量機](http://p2.ttnews.xyz/loading.gif)
注意,左上角有一個正類樣本+,已經用紅圈圈起來。該出界樣本會影響SVM決策邊界。
下面將對SVM使用不同的C參數值,較大的C參數表示SVM嘗試對所有示例進行正確分類。 C的作用類似於1/λ,其中λ是我們先前用於邏輯迴歸的正則化參數。
當C=1:
![機器學習之SVM:支持向量機](http://p2.ttnews.xyz/loading.gif)
當C=100:
2、高斯核的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可以學習出一個非線性決策邊界。
上圖
- 樣本數據集3
接下來使用高斯核的SVM
垃圾郵件分類
1、處理郵件
- 詞彙表
2、從郵件中提取特徵
3、訓練
SVM進行垃圾郵件分類4、垃圾郵件預測
5、試試自己的郵件
6、建立自己的數據集
閱讀更多 無名開發者 的文章