看了許多文獻,以及最近的項目經驗,終於真正地搞懂了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