熱線電話:13121318867

登錄
首頁精彩閱讀機器學習之支持向量機(SVM)
機器學習之支持向量機(SVM)
2018-08-13
收藏

機器學習支持向量機(SVM)

支持向量機算法在深度學習沒有火起來的2012年前,在機器學習算法中可謂是霸主地位,其思想是在二分類或者多分類任務中,將類別分開的超平面可能有很多種,那么哪一種的分類效果是最好的呢?這里引入了支撐向量的概念,我們總可以在幾個類別的分界面處找到類別的一些樣本點,以這些樣本點的中垂線為平面的這個分界面可以使得類別中的點都離分界面足夠遠,那么這個平面就是最理想的分割超平面。

注意:SVM顧名思義,該算法只用到了一些支撐樣本將兩類或者多類樣本分開的~~

SVM分為線性可分SVM,線性SVM和非線性SVM,后兩者用到了核函數。

一、SVM中的數學:

1.凸優化

2.核函數

3.拉格朗日乘子法

二、SVM公式推導

基本定義(以二分類為例):

分割平面:特征空間轉換函數,簡單地,

目標值屬于{-1,1},通過sign(y(x))將樣本分類為1或者-1

1.線性可分SVM(樣本本身線性可分)

1.1 目標函數:遍歷所有的x,對離分割面最近的x中,找到一組w,b,使得離該線最近的x到該直線的距離最大

變形達到:

整理在得到最終的目標函數:

1.2 求解目標函數,引入拉格朗日乘子法和KKT條件:

上式分別對w,b求導為0,并代入原式中,變形為求解alpha的約束最優化問題:

最終得到的w,b以及超平面分別是:

2.線性支持SVM(樣本本身線性不可分)

2.1 引入松弛因子,目標函數和約束條件變為:

給定松弛因子,相當于引入了正則項,C->無窮大,相當于沒有懲罰,所有樣本眼分對,不容忍錯誤,容易overfitting,C->0,則過渡帶寬,容忍有錯誤,model范化能力好,能防止overfitting

2.2 求解目標函數,仍用拉格朗日乘子法,,最終的目標函數為:

求解最優的alpha,并求得w和b.

3.非線性SVM,引入核函數

3.1 思想:不可分的樣本,通過核函數映射到新的高維特征空間,使得樣本變得可分,常見的核函數有多項式,高斯和sigmoid核函數,公式如下:

一般地,在不知道更多信息的時候使用高斯核函數是最穩妥的,高斯函數(RBF,徑向基函數)是一個映射到無窮維的函數。

引入的代表了核函數映射到高維空間的胖瘦,其值大,則胖乎乎,其值小,則瘦兮兮~~

三、代碼實現SVM

import numpy as np
from sklearn.svm import SVR
from sklearn.grid_search import GridSearchCV    # 0.17 grid_search
import matplotlib.pyplot as plt
 
 
if __name__ == "__main__":
    N = 50
    np.random.seed(0)
    x = np.sort(np.random.uniform(0, 6, N), axis=0)
    y = 2*np.cos(x) + 0.1*np.random.randn(N)
    x = x.reshape(-1, 1)
 
    model = SVR(kernel='rbf')
    c = np.logspace(-2, 2, 10)
    gamma= np.logspace(-2, 2, 10)
    svr = GridSearchCV(model, param_grid={'C': c, 'gamma': gamma}, cv=5)
    svr.fit(x, y)
    print 'C和gamma的最優參數:\n', svr.best_params_
 
    x_test = np.linspace(x.min(), x.max(), 100).reshape(-1, 1)
    y_predict = svr.predict(x_test)
 
    sp = svr.best_estimator_.support_
    plt.figure(facecolor='w')
    plt.scatter(x[sp], y[sp], c='b', marker='o', label='Support Vectors')
    plt.plot(x_test, y_predict, 'r--',label='RBF Kernel')
    plt.plot(x, y, 'g-')
    plt.legend(loc='best')
    plt.title('SVR with grid_search C & gamma')
    plt.xlabel('X')
    plt.ylabel('Y')
    plt.grid(True)
    plt.tight_layout()
    plt.show()

運行代碼可以網格搜索到最優的Chegamma并得到SVM的結果可視化如下:

總結一下:

1.SVM中有兩個超參數需要調參,一個是C,一個是,在不知道這兩者怎么搭配最終的分類效果好,使用高斯函數(RBF)是最好的,可以用grid_search來找最優的一組值超參數,而不是隨便 調參

2. 某一種模型調參的能力是有限的,不會對分類結果有質的飛躍,當怎么調都調不好的話,就應該考慮換一種模型了

3. 調參不是主要的,特征選擇和數據的清洗對模型的結果影響更重要


數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢