SGDClassifier和LR,SVM的區別

Candy_GL發表於2018-09-25

看了許多文獻,以及最近的專案經驗,終於真正地搞懂了LR。

以前總聽大家說,看你對機器學習搞得透徹不透徹,就看你邏輯迴歸理解得怎麼樣;自己是統計出身的我,一直很有自信,以為無非就是個極大似然估計,求那個似然函式的極大值而已。然而實際上,這個之中也有很多的說法在裡面,比如,求引數的方法。

在邏輯迴歸中,我們極大似然估計的引數是可以通過“極大化該引數值”得到的,然而得到引數之後,並不代表我們就完成了,因為成千上萬的樣本,我們的引數要“收斂”才是一個穩定的model。

那麼問題來了,怎樣更新我的引數,讓其收斂呢? 
有兩種方式:在sklearn的LogisticRegression裡,是通過每次增加負樣本權重【】的方式,讓樣本“重新排列”,之後得到了一個新的theta,直到兩次樣本基本上都不怎麼變。 
在sklearn裡,還有一個分類器,之前一直沒搞懂,感覺跟logistic迴歸的結果啊,目的啊都是一樣的啊,那麼它出現的意義是什麼? 
後來我重新讀了一遍,發現LR那裡面的引數沒有學習率,衰減率,等等。

讓我突然意識到這個LR的引數好像不是通過梯度下降求的。

後面這個SGDClassification,裡面有learning rate,有decay等等,後來發現,是通過真正的梯度下降來求參的。【名稱也就是“隨機梯度下降”】

然後,看見許多人都說,在大規模資料下,基本上都要用到梯度下降的方法

【以下轉自“機器學習演算法一覽,應用建議與解決思路 ”】

3.3 關於大資料樣本集和高維特徵空間

我們在小樣本的toy dataset上,怎麼搗鼓都有好的方法。但是當資料量和特徵樣本空間膨脹非常厲害時,很多東西就沒有那麼好使了,至少是一個很耗時的過程。舉個例子說,我們現在重新生成一份資料集,但是這次,我們生成更多的資料,更高的特徵維度,而分類的類別也提高到5。 
3.3.1 大資料情形下的模型選擇與學習曲線

在上面提到的那樣一份資料上,我們用LinearSVC可能就會有點慢了,我們注意到機器學習演算法使用圖譜推薦我們使用SGDClassifier。其實本質上說,這個模型也是一個線性核函式的模型,不同的地方是,它使用了隨機梯度下降做訓練,所以每次並沒有使用全部的樣本,收斂速度會快很多。再多提一點,SGDClassifier對於特徵的幅度非常敏感,也就是說,我們在把資料灌給它之前,應該先對特徵做幅度調整,當然,用sklearn的StandardScaler可以很方便地完成這一點。

SGDClassifier每次只使用一部分(mini-batch)做訓練,在這種情況下,我們使用交叉驗證(cross-validation)並不是很合適,我們會使用相對應的progressive validation:簡單解釋一下,estimator每次只會拿下一個待訓練batch在本次做評估,然後訓練完之後,再在這個batch上做一次評估,看看是否有優化。 
【轉載結束】

然後,在VW中,實際上也就是優化了一個SGD,因為VW裡的引數基本上都是各種學習率。

所以說,我理解,VW實際上就是一個優化了的,通過梯度下降的方法來解決各種求解loss function的分類器。

如果loss function是hinge loss 那麼就是SVM

如果是log 那就是LR

如果是square 平方誤差,那麼就是線性迴歸

如果是quantile,那麼就是求解中位數的線性迴歸

如果是0-1損失 就是說“計數缺失了多少”,那麼【在vw後面加binary】

【以下轉自知乎】 
1.資料集很大還是優先考慮 SGD regressor。 
尤其特別大資料集,SGD外,幾乎別無他法。跑不動。 
2.不是特別特別大的, 
先試試嶺迴歸或linear kernal的SVR。 
3.不管用,換RBF kernal或者Ensemble regressor。 
4.如果有important features要先feature selection,則適用Lasso,ElasticNet。同樣是指非特大資料集。 

作者:Fu Tiffany 
連結:https://www.zhihu.com/question/21704547/answer/74404131
來源:知乎 
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

總結

用自己語言總結一下,可能不全面,有機會再補充: 
1. LR有兩種求引數的方法,一種是梯度下降,一種是改變正負樣本權重。梯度下降的時候,把特徵歸一化會有利於梯度的下降【參見知乎:為什麼 feature scaling 會使 gradient descent 的收斂更好?https://www.zhihu.com/question/37129350】扁平的梯度下降的方向不是真正速率最快的方向。 
2. FTRL用的就是隨機梯度下降SGD(OGD)的方法,它不同點在於每個特徵都是獨立隨機下降的。而且會根據某個特徵出現的比例來載入權重的。因此會導致某幾個特徵出現的值很大,影響評分。【因為負樣本的存在】 
3. LR輸出的是樣本的概率 
4. BFGS用的是擬牛頓的辦法,模仿了逆hessian矩陣。避免了儲存逆hessian矩陣。 
5. LR和SVM的區別:SVM尋求的是一個超平面,因此並不是每個樣本都對其平面有影響;LR是每個樣本點對超平面都有影響。SVM是無法輸出概率的,得到的也是距離超平面的一個距離的函式。【libsvm也是一個距離的測度,求解的時候也是轉換成lr再求解的】 
6. SVM必須中心化,因為這是跟“距離”有關的,不正規化之後會出問題 
7. LR的損失函式是log loss SVM的損失函式是hinge LOSS

--------------------- 本文來自 tianbwin2995 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/tianbwin2995/article/details/51853869?utm_source=copy 

相關文章