天天看點

svm 支援向量機 回歸 預測_機器學習:簡單了解支援向量機SVMSVM的原理離群值的處理

在介紹過貝葉斯之後,今天嘗試着給大家介紹支援向量機SVM。

在機器學習中,SVM試圖找到一個最佳的超平面,該平面可以最佳地分割來自不同類别的觀察結果。一個在N-1維的超平面可以分割Ñ維的特征空間。例如,二維特征空間中的超平面是一條線,而三維特征空間中的超平面是一個面。最佳超平面即不同特征空間中離該超平面最近的點的距離最大,這些最近的點就是所謂的支援向量。如下圖:一定了解:支援向量是離最佳超平面最近的點

svm 支援向量機 回歸 預測_機器學習:簡單了解支援向量機SVMSVM的原理離群值的處理

SVM的原理

根據前面提到的SVM定義,其實我們可以有無限多個可行的超平面。我們如何确定最佳選擇?讓我一步步來說明

  • 認識超平面

首先,我們需要了解什麼才是一個合格的超平面。在以下示例中,超平面C是唯一正确的,因為它成功地按其标記将觀察結果分開,超平面A和B卻失敗了。我們可以從數學上來看:

在二維空間中,一條線可以由一個斜率向量w(二維)和一個截距b來定義。類似地,在n維空間中,超平面可以由n維向量w和截距b定義。超平面上的任何資料點x都滿足

svm 支援向量機 回歸 預測_機器學習:簡單了解支援向量機SVMSVM的原理離群值的處理

如果一個超平面滿足以下2點,則為合格的超平面:

  • 對于來自一類的任何資料點x,它都滿足
svm 支援向量機 回歸 預測_機器學習:簡單了解支援向量機SVMSVM的原理離群值的處理
  • 對于來自另一個類的任何資料點x,它都滿足
svm 支援向量機 回歸 預測_機器學習:簡單了解支援向量機SVMSVM的原理離群值的處理
svm 支援向量機 回歸 預測_機器學習:簡單了解支援向量機SVMSVM的原理離群值的處理

隻有C為合格的超平面

w和b可能有無數種可能。是以,接下來我們探讨如何在可能的超平面中确定最佳的超平面

  • 确定最佳超平面

在以下執行個體中,ABC都是合格的超平面,但C才是最佳超平面,為什麼呢?因為C使正側最近的資料點與其自身之間的距離與負側最近的資料點與其自身之間的距離的和最大。此時正側的最近點可以構成一個平行于決策超平面的超平面,我們稱其為正超平面。另一方面,負側的最近點構成負超平面。正負超平面之間的垂直距離稱為餘量,其值等于上述兩個距離的總和。如果餘量最大化,則決策超平面是最佳的。

svm 支援向量機 回歸 預測_機器學習:簡單了解支援向量機SVMSVM的原理離群值的處理

C才是最佳超平面

下面顯示了使用兩個類别的樣本訓練的SVM模型的最大餘量(最佳)超平面和餘量。邊緣上的樣本(一個類别中的兩個黃星,另一類别中的一個藍點,如下所示)就是所謂的支援向量。

svm 支援向量機 回歸 預測_機器學習:簡單了解支援向量機SVMSVM的原理離群值的處理

正負超平面與支援向量

運用SVM的機器學習要做的呢就是去找到這個最佳超平面,具體過程設計到好多數學知識,這兒不展開(1是因為頭條寫公式太垃圾,2是我也不會,哈哈哈)

其實了解這麼多就差不多了,但是還有一種情況

svm 支援向量機 回歸 預測_機器學習:簡單了解支援向量機SVMSVM的原理離群值的處理

線性超平面不好分咋整?

想一想這個時候,如何處理如圖這個情況

接下來繼續

離群值的處理

對于含有離群值的資料這個時候其實是找不到最優超平面的,此時用SVM時我們允許分類錯誤,但是會盡量最小化引入的誤差。對于一個樣本X它的分類錯誤可以表示為:

svm 支援向量機 回歸 預測_機器學習:簡單了解支援向量機SVMSVM的原理離群值的處理

為了計算簡便對于一組m個樣本的訓練集:

svm 支援向量機 回歸 預測_機器學習:簡單了解支援向量機SVMSVM的原理離群值的處理

分類錯誤可以表示為

svm 支援向量機 回歸 預測_機器學習:簡單了解支援向量機SVMSVM的原理離群值的處理

别問我為什麼,我不知道

但要了解,其中參數C控制兩個名額(模型方差與偏倚)之間的權衡。

當選擇大值的C時,錯誤分類的懲罰會變得相對較高,這使得資料分割變得更加嚴格(盡可能分成标準的2類),模型易于過拟合。具有大C的SVM模型具有較低的偏差,但可能會有較大的方差。

相反,當C的值足夠小時,錯誤分類的影響變得相對較小,這允許更多錯誤分類的資料點,進而使得分割不太嚴格。C較小的SVM模型方差低,但可能會偏倚較大。

圖示如下:

svm 支援向量機 回歸 預測_機器學習:簡單了解支援向量機SVMSVM的原理離群值的處理

大C與小C的差別

參數C可以通過交叉驗證進行微調,之後講。

感謝大家耐心看完,發表這些東西的主要目的就是督促自己,希望大家關注評論指出不足,一起進步。内容我都會寫的很細,一個目的就是零基礎也能懂,因為自己就是什麼基礎沒有從零學Python的。

繼續閱讀