1. 程式人生 > >機器學習之核函式邏輯迴歸(機器學習技法)

機器學習之核函式邏輯迴歸(機器學習技法)

從軟間隔SVM到正則化

從引數ξ談起

在軟間隔支援向量機中引數ξ代表某一個資料點相對於邊界犯錯的程度,如下圖:

在資料點沒有違反邊界時ξ的值為0,在違反邊界時的值就會大於0。所以總的來說ξ的值等於max(1 - y(WZ + b) , 0)。所以我們把問題合併如下:

這樣這個問題就變成了一個沒有條件的問題。

與L2正則化的關係

上述簡化後的問題與L2的正則化極其相似:

它們的目標都是最小化W²與一個錯誤衡量的和。在軟間隔的SVM中用來做正則化的是W,我們希望有小的W這樣就會有LargeMargin。在L2中我們也是希望W有較小的維度這樣就不至於模型複雜度過高。

為什麼不以正則化的角度出發去推導軟間隔SVM?

①在這個簡化問題上,沒有一次的約束條件所以我們很難想象去用二次規劃工具去解決。當然也就不會用到關於對偶與核函式的方法。

②在這個簡化問題上,max()函式在某些點上不可微分很難最小化。

總的來說如果以正則化的角度出發去推導軟間隔SVM會使得問題非常難解。

關聯的目的

寫到這裡我們知道了SVM就像是一個正則化的模型我們總結如下:


無論是SVM的LargeMargin還是L2的限制(事實上是維度上的限制)都會得到更少的超平面減少了模型過擬合的危險。軟間隔是我們估算錯誤的一種方式。

我們之所以將SVM看成是一個正則化的模型是因為我們希望SVM以一種新的角度去做更多的事情(比如說迴歸問題,etc.)。

軟間隔SVM的錯誤衡量

與二元分類的錯誤衡量的關係

軟間隔SVM在衡量一個資料的犯錯誤情況時就是在看這個資料點的違反邊界的情況也就是ξ的值,它等於max(1 - y(WZ + b) , 0)

。以ys(s為得分函式)的值作為橫軸,犯錯誤的情況為縱軸。分別畫出SVM錯誤與0|1錯誤的錯誤衡量如下圖:

圖中的折葉式曲線為SVM的錯誤衡量曲線,我們能夠明顯看出SVM的錯誤衡量曲線是0/1錯誤函式的上限(準確的來說是凸的上限)。

與LogisticRegression錯誤衡量的聯絡

將LogisticRegression的錯誤函式作一個放縮的動作放到上圖的座標系中得到:

圖中橘色的曲線就是LogisticRegression的錯誤衡量曲線。從直觀上感覺它與SVM的錯誤衡量曲線很相似。它們都有以下特徵:

從+∞與-∞兩個極端的情況來看LogisticRegression的錯誤與SVM的錯誤幾乎一樣,從這種角度來開SVM就像是在做L2正則化的LogisticRegression。(一個是最大的邊距,一個是W的降維處理)

用線性模型做二元分類

①PLA演算法直接去衡量在一筆資料上是否犯錯進而去優化模型,但是它要求資料是線性可分的。即使是pocket也是一個NP-Hard問題。

②SVM是通過二次規劃區優化模型的,比叫簡單而且也有理論上的保障。但是在做二元分類的問題上它只得到一個上限。

③L2正則化的LogisticRegression通過梯度下降法(或者是隨機梯度下降法)來優化模型,比叫簡單也有正則化的保證。但是在做二元分類的問題上它只得到一個上限。

小節:我們解決了一個L2正則化的LogisticRegression就幾乎解決了一個SVM的問題。

SVM做軟間隔二元分類

簡單的組合

既然SVM與LogisticRegression有很大的相似性,我們試著將SVM與LogisticRegression結合起來去做軟性的二元分類。

方法一:得到SVM的結果然後對映到S型函式上,這種方法表現的還不錯但是沒有體現出LogisticRegression最優化時極大似然估計的特徵。

方法二:得到SVM的結果,以這個結果為起點去做LogisticRegression,但是這樣的做法與直接去做一個LogisticRegression沒有什麼區別。因為後面的效果將前面的SVM的功勞覆蓋了。

二者兼顧的組合

①我們先用SVM得到W與b的值。

②將這個值進行一些放縮,並對映到S型函式上。如下圖所示:

整體來看先用SVM做出了大體上的結果又用LogisticRegression進行了微調。從形勢上看,整個式子與LogisticRegression最優化時的結構很相似(如下圖),其中B的值是做一些十分微小的微調。在這裡更把SVM的前置操作當做是對資料X的一種特殊轉換。

理論上來說:

①A的值應該大於0,如果小於0的話證明在一開始的時候我們的SVM在亂做。

②B的值約等於0,在SVM做好之後不應該有太大的調整。

將上述的式子更加具體化得到下圖:

當SVM計算完畢的時候我們將X這個多維的轉換為一個一維的數字我們對這個數字做放縮和平移的動作,在第二階段我們只是在解決一個單一維度的兩個變數的邏輯迴歸問題。

總的來說這個模型的解決如下:

這個模型的結果與只有SVM做出來的結果略有不同因為有B做微調的動作。由於只有兩個變數我們除了用(隨機)梯度下降法之外我們還可以使用其他的方法來得到最優解。

小節:我們用SVM的方式得到了LogisticRegression在Z空間(特徵轉換空間)的解。

核函式邏輯迴歸

核函式背後的關鍵

在做SVM的時候核函式是計算一堆Z的內積的方法,而在最終的模型中也能夠使用核函式的原因是最優的W的解能夠寫成一堆Z的線性組合稱之為representer theorem)如下圖:

而在我們以前學過的演算法中也出現過最優的W的解能夠寫成一堆Z的線性組合如下:


①SVM中的係數α是從對偶問題的結果中來。

②PLA中的係數α是來自我們訓練的過程裡每個Z到底參與了多少錯誤修正的過程來得到的。

③LogisticRegression中的係數α來自於在梯度下降的時候梯度告訴我們走的情況。

我們想要將核函式的方法應用到上述這些情景中來更加方便的解決在Z空間(特徵轉換)的問題。

representer theorem

至於什麼時候能夠使用representer theorem 這個理論,在數學上給出了這樣的結果:如果現在解決的是一個L2正則化的線性模型的問題,它的最佳化W的可以使用一堆Z的線性組合來表示,如下圖:

representer theorem 的證明

①將最佳的W(這裡用W*來表示)分解成與Z空間平行的部分W||,和與Z空間垂直的部分W⊥。我們有一個假設:如果W*能夠用Z來完全表示的話那麼W⊥的值肯定為0。

②我們使用反證法,既如果W⊥不為0則有下面的情況:

最重要的是在計算W*的內積的時候會有W*的內積>W||的內積,這樣W||就成為了最優解這顯然與我們的假設矛盾,所以W⊥不為0這個假設不成立。這就是representer theorem為什麼可行我們得到最強烈的資訊就是凡是進行L2正則化的線性問題我們都能將核函式的技巧用到上面。

核函式邏輯迴歸

我們將用核函式的方法來解決一個L2正則化的邏輯迴歸如下圖:

我們直接將W*表示成β的形式帶到我們最佳化的問題中,然後就得到一個關於β的無條件的最佳化問題。這時我們可以用梯度下降法或隨機梯度下降法來得到問題的最優解。

核函式邏輯迴歸的全新角度

再仔細觀察核函式邏輯迴歸之後會發現它可以是一個關於β的線性模型:

其中kernel函式既充當了轉換的角色有充當了正則化的角色,這種角度同樣適用於SVM演演算法。需要注意的是:SVM的解α大多都是0,核函式邏輯迴歸的解β大多都不是0這樣我們會付出計算上的代價。

相關推薦

機器學習函式邏輯迴歸機器學習技法

從軟間隔SVM到正則化從引數ξ談起在軟間隔支援向量機中引數ξ代表某一個資料點相對於邊界犯錯的程度,如下圖:在資料點沒有違反邊界時ξ的值為0,在違反邊界時的值就會大於0。所以總的來說ξ的值等於max(1 - y(WZ + b) , 0)。所以我們把問題合併如下:這樣這個問題就變

機器學習支援向量機迴歸機器學習技法

核函式山脊迴歸Represent Theorem表達理論就是指如果一個模型是帶有L2正則化的線性模型,那麼它在最佳化的時候的權重引數值W*將能夠用Z空間的資料的線性組合來表示。它的推論就是L2的正則化線性模型能夠核函式化如下圖所示:現在我們的目標就是用核函式的方式去解決迴歸問

機器學習函式

參考資料 核函式定義 參考資料 書籍推薦: 《Learning with Kernels: Support Vector Machines, Regularization, Optimization, and Beyond 》購

機器學習SVM與邏輯迴歸的聯絡和區別

  通常說的SVM與邏輯迴歸的聯絡一般指的是軟間隔的SVM與邏輯迴歸之間的關係,硬間隔的SVM應該是與感知機模型的區別和聯絡。而且工程中也不能要求所有的點都正確分類,訓練資料中噪聲的存在使得完全正確分類很可能造成過擬合。   軟間隔SVM與邏輯迴歸的聯絡   要說軟間隔SVM與聯絡就要看軟間隔SVM的緣由。

機器學習單變數線性迴歸Linear Regression with One Variable

1. 模型表達(Model Representation) 我們的第一個學習演算法是線性迴歸演算法,讓我們通過一個例子來開始。這個例子用來預測住房價格,我們使用一個數據集,該資料集包含俄勒岡州波特蘭市的住房價格。在這裡,我要根據不同房屋尺寸所售出的價格,畫出我的資料集: 我們來看這個資料集,如果你有一個朋

機器學習實戰》學習筆記七:Logistics迴歸梯度上升法

1 Logistics迴歸概念 迴歸是指將一對資料擬合為一條直線的過程,而Logistics迴歸則是將回歸用於分類,其主要思想為:根據現有的資料對分類邊界線建立迴歸公式,依次為依據進行分類,在這裡最關鍵的一步是尋找最佳的擬合引數,這一步將會用到一些最優化的方法

函式邏輯迴歸和SVR

核函式邏輯迴歸 兩個問題: (1)利用soft的svm的w去求邏輯迴歸模型。 (2)邏輯迴歸模型總使用核函式支援。 SVR (1)直接使用核函式替換並用分析法直接求出β,但是β每一項幾乎都是非0,計算量大。 (2)使用tube Regression方

【MachineLearning】 邏輯迴歸scikit-learn 實現

邏輯迴歸的類及預設引數: LogisticRegression(penalty='l2', dual=False, tol=0.0001, C=1.0, fit_intercept=True, in

深度學習路, 從邏輯迴歸開始, 手寫一個分類器.

要給同事講神經網路和tensorflow. 需要普及一些前導知識. 所以我準備了一個課件, 寫了下面這個不使用工具和庫,全手寫的分類器. . 個人感覺, 對於幫助理解機器學習的具體實現過程是很有幫助的. (僅僅為了演示原理,實現寫的比較粗糙,談不上效能.

c語言學習選擇結構程序設計第三天

c語言 選擇結構為了增加理解,寫的幾個小程序1:判斷三角形的成立以及輸出最大邊 練習前三種語句#include <stdio.h> int main() { int a,b,c; printf("請輸入三角形三邊長(邊為整數,不能輸入負數):"); scanf("%d%d%d", &a ,

深度學習經驗和訓練集訓練中英文樣本

深度學習之經驗和訓練集(訓練中英文樣本) 學習深度學習和在深度學習兩年多,積累了很多的學習資料,以及一些經驗吧。 學習目標是什麼?這個是一切深度學習需要明確的目標 *目前在這個方面,前人研究到什麼程度?遇到那些困哪? 本人研究的是中文自然語言的讀(機器以某人的

第5章 邏輯迴歸一 理論講解

5.1邏輯迴歸理論 5.1.1邏輯迴歸引言 邏輯迴歸是一個分類演算法,它可以處理二元分類以及多元分類。雖然它名字裡面有“迴歸”兩個字,卻不是一個迴歸演算法。那為什麼有“迴歸”這個誤導性的詞呢?個人認為,雖然邏輯迴歸是分類模型,但是它的原理裡面卻殘留著迴歸模型的影

web學習部落格小專案登入註冊模組

這個小專案採用的框架是struts2+spring3+hibernate3   將action與hibernate整合到spring中 剛入手時,還是沒有層次性,想到什麼就先寫什麼,寫完之後再回頭看時

強化學習三:雙臂賭博機Two-armed Bandit

本文是對Arthur Juliani在Medium平臺釋出的強化學習系列教程的個人中文翻譯,該翻譯是基於個人分享知識的目的進行的,歡迎交流!(This article is my personal translation for the tutorial wri

H5學習路-圖片上傳cropper、webuploader

好久沒有寫部落格了,感覺都不習慣了。一方面是因為工作佔用的時間過多,另一方面是自己有點懶,沒有堅持。好了,少扯這些沒用的東西,直入主題唄。 筆者目前在公司會接觸到H5的開發,也就是手機端app的開發,但是用的H5,而非原生的方式,主要是節省開發時間,不必針對a

多分類邏輯迴歸Multinomial Logistic Regression

前言 分類從結果的數量上可以簡單的劃分為: 二分類(Binary Classification) 多分類(Multinomial  Classification)。 其中二分類是最常見且使用最多的分類場景,解決二分類的演算法有很多,比如: 基本的K

#Java學習路——基礎階段二第六篇

string 類 結合 類型 絕對路徑 一起 java 對象 刪除文件夾 mkdir 我的學習階段是跟著CZBK黑馬的雙源課程,學習目標以及博客是為了審查自己的學習情況,畢竟看一遍,敲一遍,和自己歸納總結一遍有著很大的區別,在此期間我會參雜Java瘋狂講義(第四版)裏面的內

機器學習實踐十五—sklearn分類演算法-邏輯迴歸、精確率、召回率、ROC、AUC

邏輯迴歸雖然名字中帶有迴歸兩字,但它實際是一個分類演算法。 一、邏輯迴歸的應用場景 廣告點選率 是否為垃圾郵件 是否患病 金融詐騙 虛假賬號 看到上面的例子,我們可以發現其中的特點,那就是都屬於兩個類別之間的判斷。 邏輯迴歸就是

機器學習演算法與Python實踐邏輯迴歸Logistic Regression

#!/usr/bin/python # -*- coding:utf-8 -*- import numpy as np from numpy import * import matplotlib.pyplot as plt #處理資料函式 def loadDataSet():