1. 程式人生 > >【Machine Learning, Coursera】機器學習Week7 支援向量機的應用

【Machine Learning, Coursera】機器學習Week7 支援向量機的應用

SVMs in Practice

本節內容:
SVM的引數選擇、SVM解決多分類問題、實踐中logistic迴歸和SVM的選擇

相關機器學習概念:
線性核函式(Linear kernel)

1. Using SVM Packages

有許多軟體庫可以實現SVM,Ng常用的是liblinear和libsvm

要使用現成的軟體庫,需要我們自己選擇的有:
-引數C
-核函式(相似度函式)

如果特徵變數n很大而樣本量m很小,為了避免過擬合,可以選用線性核函式Llinear kernel)去擬合一個線性邊界。
線性核函式(Linear kernel)實質上就是不使用任何核函式:
θTx=θ0+θ1

x1+...+θnxn0\theta^T x=\theta_0+\theta_1x_1+...+\theta_nx_n ≥0,預測y=1y=1

如果特徵變數n很小而樣本量m很大,此時可以選用高斯核函式(Gaussian kernel)去擬合一個更復雜的非線性邊界。
高斯核函式(Gaussian kernel):
fi=exp(xl(i)22σ2)f_i=exp(-\frac{‖ x-l^{(i)} ‖^2}{2\sigma^2}), where l(i)=x(i)l^{(i)}=x^{(i)}

如果選用高斯核函式,我們還需要選擇σ\sigma.

如果使用Octave或者Matlab實現SVM,我們需要自己寫出核函式的程式碼。以高斯核函式為例:

function sim = gaussianKernel(x1, x2, sigma)
% Note: x1 and x2 are column vectors
%   sim = gaussianKernel(x1, x2) returns a gaussian kernel between x1 and x2
%   and returns the value in sim

sim = exp(-(x1-x2)'*(x1-x2)/(2*sigma.^2));

end

NOTE: 使用高斯核函式之前要對特徵變數進行歸一化處理

線性核函式和高斯核函式是最常用的兩種核函式,其他可能遇到的核函式包括:
多項式核函式(Polynomial kernel)
字串核函式(String kernel),卡方核函式(Chi-square kernel),直方圖交叉核函式(Histogram intersection kernel)

NOTE: 不是所有的相似度函式都是有效的核函式,它們必須滿足摩塞爾定理(Mercer’s Theorem),以保證優化結果不會發散。

\quad

2. Multi-class Classification

SVM多分類問題的兩種解決思路:
1、SVM包內建的多分類函式
2、一對多(one vs. all)
和logistic迴歸的多分類問題一樣,y{1,2,3,...,K}y∈\{1,2,3,...,K\},有θ(1),θ(2),...,θ(K)\theta^{(1)},\theta^{(2)},...,\theta^{(K)}。我們選擇使(θ(i))Tx(\theta^{(i)})^T x最大的類別ii.
在這裡插入圖片描述

3. Logistic Regression vs. SVMs

為了在有限的時間內得到最好的訓練效果,建議:

如果n相對m而言很大,使用logistic迴歸或者不帶核函式的SVM
如果n很小(如1~1,000),m大小適中(如10 ~ 50,000),使用高斯核函式的SVM
如果n很小,m很大(>50,000),人工選擇更多的特徵變數,使用logistic迴歸或者不帶核函式的SVM

NOTE: 一個好的神經網路可能可以得到更好的訓練效果,但訓練一個神經網路的時間成本可能會更高

NOTE: SVM的優化問題是凸優化問題,不用擔心區域性最優問題