[英]Logistic regression python solvers' definitions
我正在使用 sklearn 的邏輯回歸函數,並且想知道每個求解器實際上在幕后做什么來解決優化問題。
有人可以簡要描述一下“newton-cg”、“sag”、“lbfgs”和“liblinear”在做什么嗎?
好吧,我希望我參加聚會還不算太晚! 在挖掘大量信息之前,讓我先嘗試建立一些直覺(警告:這不是簡短的比較)
假設h(x)
接受輸入並為我們提供估計的輸出值。
這個假設可以是一個簡單的單變量線性方程,也可以是一個非常復雜和長的多元方程,與我們使用的算法類型有關(即線性回歸、邏輯回歸......等)。
我們的任務是找到最好的參數(又名 Thetas 或 Weights),使我們在預測輸出時誤差最小。 我們將此錯誤稱為成本或損失函數,顯然我們的目標是將其最小化以獲得最佳預測輸出!
還有一件事要記住,參數值與其對成本函數(即誤差)的影響之間的關系看起來像鍾形曲線(即二次曲線;記住這一點,因為它非常重要)。
因此,如果我們從該曲線的任何一點開始,如果我們繼續取我們停止的每個點的導數(即切線),我們將最終達到所謂的全局最優,如下圖所示:
如果我們在最小成本點(即全局最優)處取偏導數,我們會發現切線的斜率= 0 (然后我們知道我們達到了目標)。
這僅在我們有凸成本函數時才有效,但如果我們沒有,我們可能最終會陷入所謂的局部最優; 考慮這個非凸函數:
現在您應該對我們正在做的事情與術語之間的 hack 關系有了直覺: Deravative 、 Tangent Line 、 Cost Function 、 Hypothesis .. 等。
旁注:上述直覺也與梯度下降算法有關(見下文)。
線性近似:
給定一個函數f(x)
,我們可以找到它在x=a
處的切線。 切線L(x)的方程為: L(x)=f(a)+f′(a)(x−a)
。
看看下面的函數及其切線圖:
從這個圖中我們可以看到,在x=a
附近,切線和函數具有幾乎相同的圖。 有時我們會使用切線L(x)
作為函數f(x)
的近似值,靠近x=a
。 在這些情況下,我們稱切線為函數在x=a
處的線性近似。
二次近似:
與線性近似相同,但這次我們處理的是一條曲線,但我們無法通過使用切線找到接近0的點。
相反,我們使用拋物線(這是一條曲線,其中任何點與固定點或固定直線的距離相等),如下所示:
為了擬合一個好的拋物線,拋物線和二次函數應該具有相同的值,相同的一階導數和二階導數,......公式將是(只是出於好奇): Qa(x) = f(a) + f'(a)(xa) + f''(a)(xa)2/2
現在我們應該准備好進行詳細的比較了。
1. 牛頓法
回想 x 處梯度下降步驟的動機:我們最小化二次函數(即成本函數)。
牛頓方法在某種意義上使用了更好的二次函數最小化。 A 更好,因為它使用二次近似(即一階和二階偏導數)。
您可以將其想象為帶有 Hessian 的扭曲梯度下降( Hessian 是 nxn 階二階偏導數的方陣)。
此外,牛頓方法的幾何解釋是,在每次迭代中,通過一個圍繞xn
的二次函數來逼近f(x)
,然后朝着該二次函數的最大值/最小值邁出一步(在更高維度,這也可能是一個鞍點)。 請注意,如果f(x)
恰好是一個二次函數,則可以在一步中找到精確的極值。
缺點:
由於 Hessian 矩陣(即二階偏導數計算),它的計算成本很高。
它吸引了在多變量優化中很常見的鞍點(即它的偏導數不同意這個輸入應該是最大值還是最小值的點!)。
2. 有限內存 Broyden-Fletcher-Goldfarb-Shanno 算法:
簡而言之,它類似於牛頓法,但這里使用梯度評估(或近似梯度評估)指定的更新來近似Hessian 矩陣。 換句話說,使用對 Hessian 逆矩陣的估計。
有限內存一詞僅表示它僅存儲一些隱式表示近似值的向量。
如果我敢說,當數據集較小時,L-BFGS 與其他方法相比相對表現最好,尤其是它節省了大量內存,但也有一些“嚴重”的缺點,如果不加以保護,它可能不會收斂到任何東西.
旁注:自 0.22 版以來,此求解器已成為 sklearn LogisticRegression 中的默認求解器,取代了 LIBLINEAR。
3. 大型線性分類庫:
它是一種支持邏輯回歸和線性支持向量機的線性分類(線性分類器通過基於特征的線性組合的值即特征值做出分類決策來實現這一點)。
求解器使用坐標下降 (CD) 算法,通過沿坐標方向或坐標超平面連續執行近似最小化來解決優化問題。
LIBLINEAR
是 ICML 2008 大規模學習挑戰賽的獲勝者。 它應用自動參數選擇(又名 L1 正則化),當您有高維數據集時推薦使用(推薦用於解決大規模分類問題)
缺點:
如果函數的水平曲線不平滑,它可能會卡在非平穩點(即非最優)。
也不能並行運行。
它無法學習真正的多項(多類)模型; 相反,優化問題以“one-vs-rest”方式分解,因此針對所有類別訓練單獨的二元分類器。
旁注:根據 Scikit 文檔:“liblinear”求解器是 0.22 版本之前的歷史原因默認使用的求解器。 從那時起,默認使用的是有限內存 Broyden–Fletcher–Goldfarb–Shanno 算法。
4. 隨機平均梯度:
SAG 方法優化有限數量的平滑凸函數的總和。 與隨機梯度 (SG) 方法一樣,SAG 方法的迭代成本與總和中的項數無關。 然而,通過結合先前梯度值的記憶,SAG 方法實現了比黑盒 SG 方法更快的收斂速度。
對於大型數據集,當樣本數量和特征數量都很大時,它比其他求解器更快。
缺點:
它只支持 L2 懲罰。
它的內存成本為O(N)
,這對於大 N 來說可能不切實際(因為它會記住大約所有梯度的最近計算值)。
5.傳奇:
SAGA 求解器是 SAG 的一個變體,它也支持非平滑懲罰=l1選項(即 L1 正則化)。 因此,這是稀疏多項邏輯回歸的首選求解器,它也適用於非常大的數據集。
旁注:根據 Scikit 文檔:SAGA 求解器通常是最佳選擇。
下表摘自Scikit 文檔
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.