日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【机器学习】逻辑回归优化技巧总结(全)

發布時間:2025/3/12 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【机器学习】逻辑回归优化技巧总结(全) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

邏輯回歸由于其簡單高效、易于解釋,是工業應用最為廣泛的模型之一,比如用于金融風控領域的評分卡、互聯網的推薦系統。上文總結了邏輯回歸的原理及其實現【全面解析并實現邏輯回歸(Python)】。

本文從實際應用出發,以數據特征、優化算法、模型優化等方面,全面地歸納了邏輯回歸(LR)優化技巧。

一、LR的特征生成

邏輯回歸是簡單的廣義線性模型,模型的擬合能力很有限,無法學習到特征間交互的非線性信息:一個經典的示例是LR無法正確分類非線性的XOR數據,而通過引入非線性的特征(特征生成),可在更高維特征空間實現XOR線性可分,如下示例代碼:

#?生成xor數據 import?pandas?as?pd? xor_dataset?=?pd.DataFrame([[1,1,0],[1,0,1],[0,1,1],[0,0,0]],columns=['x0','x1','label']) x,y?=?xor_dataset[['x0','x1']],?xor_dataset['label'] xor_dataset.head()#?keras實現邏輯回歸 from?keras.layers?import?* from?keras.models?import?Sequential,?Model from?tensorflow?import?random np.random.seed(5)?#?固定隨機種子 random.set_seed(5) model?=?Sequential() model.add(Dense(1,?input_dim=3,?activation='sigmoid')) model.summary() model.compile(optimizer='adam',?loss='binary_crossentropy') xor_dataset['x2']?=?xor_dataset['x0']?*?xor_dataset['x1']?#?加入非線性特征 x,y?=?xor_dataset[['x0','x1','x2']],?xor_dataset['label'] model.fit(x,?y,?epochs=10000,verbose=False) print("正確標簽:",y.values) print("模型預測:",model.predict(x).round()) #?正確標簽:?[0 1 1 0]???模型預測:?[0 1 1 0]

業界常說“數據和特征決定了機器學習的上限,而模型和算法只是逼近這個上限而已”。由于LR是簡單模型,其特征質量基本決定了其最終效果(也就是簡單模型要比較折騰特征工程)。

LR常用特征生成(提取)的方式主要有3種:

  • 人工結合業務衍生特征:人工特征的好處是加工出的特征比較有業務解釋性,更貼近實際業務。缺點是很依賴業務知識,耗時。

  • 特征衍生工具:如通過featuretools暴力衍生特征(相關代碼可以參考【特征生成方法】),ft生成特征的常用方法有聚合(求平均值、最大值最小值)、轉換(特征間加減乘除)的方式。暴力衍生特征速度較快。缺點是更占用計算資源,容易產生一些噪音,而且不太適合要求特征解釋性的場景。(需要注意的:簡單地加減做線性加工特征的方法對于LR是沒必要的,模型可以自己表達)

  • 基于模型的方法:

如POLY2、引入隱向量的因子分解機(FM)可以看做是LR的基礎上,對所有特征進行了兩兩交叉,生成非線性的特征組合。

但FM等方法只能夠做二階的特征交叉,更為有效的是,利用GBDT自動進行篩選特征并生成特征組合。也就是提取GBDT子樹的特征劃分及組合路徑作為新的特征,再把該特征向量當作LR模型輸入,也就是推薦系統經典的GBDT +LR方法。(需要注意的,GBDT子樹深度太深的化,特征組合層次比較高,極大提高LR模型擬合能力的同時,也容易引入一些噪聲,導致模型過擬合)

如下GBDT+LR的代碼實現(基于癌細胞數據集),提取GBDT特征,并與原特征拼接:訓練并評估模型有著較優的分類效果:

##?GBDT?+LR?,公眾號閱讀原文,可訪問Github源碼 from?sklearn.preprocessing?import?OneHotEncoder from?sklearn.ensemble?import?GradientBoostingClassifiergbdt?=?GradientBoostingClassifier(n_estimators=50,?random_state=10,?subsample=0.8,?max_depth=6,min_samples_split=20) gbdt.fit(x_train,?y_train)?#?GBDT?訓練集訓練train_new_feature?=?gbdt.apply(x)?#?返回數據在訓練好的模型里每棵樹中所處的葉子節點的位置 print(train_new_feature.shape) train_new_feature?=?train_new_feature.reshape(-1,?50) display(train_new_feature) print(train_new_feature.shape)enc?=?OneHotEncoder() enc.fit(train_new_feature) train_new_feature2?=?np.array(enc.transform(train_new_feature).toarray())??#?onehot表示print(train_new_feature2.shape) train_new_feature2

二、特征離散化及編碼表示

LR對于連續性的數值特征的輸入,通常需要對特征做下max-min歸一化(x =x-min/(max-min),轉換輸出為在 0-1之間的數,這樣可以加速模型計算及訓練收斂。但其實在工業界,很少直接將連續值作為邏輯回歸模型的特征輸入,而是先將連續特征離散化(常用的有等寬、等頻、卡方分箱、決策樹分箱等方式,而分箱的差異也直接影響著模型效果),然后做(Onehot、WOE)編碼再輸入模型。

之所以這樣做,我們回到模型的原理,邏輯回歸是廣義線性模型,模型無非就是對特征線性的加權求和,在通過sigmoid歸一化為概率。這樣的特征表達是很有限的。以年齡這個特征在識別是否存款為例。在lr中,年齡作為一個特征對應一個權重w控制,輸出值 = sigmoid(...+age * w+..),可見年齡數值大小在模型參數w的作用下只能呈線性表達。

但是對于年齡這個特征來說,不同的年齡值,對模型預測是否會存款,應該不是線性關系,比如0-18歲可能對于存款是負相關,19-55對于存款可能就正相關。這意味著不同的特征值,需要不同模型參數來更好地表達。也就是通過對特征進行離散化,比如年齡可以離散化以及啞編碼(onehot)轉換成4個特征(if_age<18, if_18<age<30,if_30<age<55,if_55<age )輸入lr模型,就可以用4個模型參數分別控制這4個離散特征的表達:sigmoid(...+age1 * w1+age2 * w2..),這明顯可以增加模型的非線性表達,提高了擬合能力

在風控領域,特征離散后更常用特征表示(編碼)還不是onehot,而是WOE編碼。woe編碼是通過對當前分箱中正負樣本的比值Pyi與所有樣本中正負樣本比值Pni的差異(如上式),計算出各個分箱的woe值,作為該分箱的數值表示。

經過分箱、woe編碼后的特征很像是決策樹的決策過程,以年齡特征為例:if age >18 and age<22 ?then ?return - 0.57(年齡數值轉為對應WOE值); if age >44 ?then ?return 1.66;...;將這樣的分箱及編碼(對應樹的特征劃分、葉子節點值)輸入LR,很類似于決策樹與LR的模型融合,而提高了模型的非線性表達。

總結下離散化編碼的優點:

  • 邏輯回歸的擬合能力有限,當變量離散化為N個后,每個變量有單獨的權重,相當于為模型引入了非線性,能夠提升模型擬合能力的同時,也有更好的解釋性。而且離散化后可以方便地進行特征交叉,由M+N個變量變為M*N個變量,可以進一步提升表達能力。

  • 離散化后的特征對異常數據有較強的魯棒性:比如一個特征是年齡>44是1,否則0。如果特征沒有離散化,一個異常數據“年齡200歲”輸入會給模型造成很大的干擾,而將其離散后歸到相應的分箱影響就有限。

  • 離散化后模型會更穩定,且不容易受到噪聲影響,減少過擬合風險:比如對用戶年齡離散化,18-22作為一個區間,不會因為一個用戶年齡長了一歲就變成一個完全不同樣本。

三、特征選擇

特征選擇用于篩選出顯著特征、摒棄非顯著特征。可以降低運算開銷,減少干擾噪聲,降低過擬合風險,提升模型效果。對于邏輯回歸常用如下三種選擇方法:

過濾法:利用缺失率、單值率、方差、pearson相關系數、VIF、IV值、PSI、P值等指標對特征進行篩選;(相關介紹及代碼可見:【特征選擇】)

嵌入法:使用帶L1正則項的邏輯回歸,有特征選擇(稀疏解)的效果;

包裝法:使用逐步邏輯回歸,雙向搜索選擇特征。

其中,過濾法提到的VIF是共線性指標,其原理是分別嘗試以各個特征作為標簽,用其他特征去學習擬合,得到線性回歸模型擬合效果的R^2值,算出各個特征的VIF。特征的VIF為1,即無法用其他特征擬合出當前特征,特征之間完全沒有共線性(工程上常用VIF<10作為閾值)共線性對于廣義線性模型主要影響了特征實際的顯著性及權重參數(比如,該特征業務上應該正相關,而權重值卻是負的),也會消弱模型解釋性以及模型訓練的穩定性。

四、模型層面的優化

4.1 截距項

通過設置截距項(偏置項)b可以提高邏輯回歸的擬合能力。截距項可以簡單理解為模型多了一個參數b(也可以看作是新增一列常數項特征對應的參數w0),這樣的模型復雜度更高,有更好的擬合效果。

如果沒有截距項b呢?我們知道邏輯回歸的決策邊界是線性的(即決策邊界為W * X + b),如果沒有截距項(即W * X),決策邊界就限制在必須是通過坐標圓點的,這樣的限制很有可能導致模型收斂慢、精度差,擬合不好數據,即容易欠擬合。

4.2 正則化策略

通過設定正則項可以減少模型的過擬合風險,常用的正則策略有L1,L2正則化:

  • L2 參數正則化 (也稱為嶺回歸、Tikhonov 正則) 通常被稱為權重衰減 (weight decay),是通過向?標函數添加?個正則項 ?(θ) ,使權重更加接近原點,模型更為簡單。從貝葉斯角度,L2的約束項可以視為模型參數引入先驗的高斯分布約束(參見《Lazy Sparse Stochastic Gradient Descent for Regularized》 ?)。如下為目標函數J再加上L2正則式:對帶L2目標函數的模型參數更新權重,?學習率:

從上式可以看出,加?權重衰減后會導致學習規則的修改,即在每步執?梯度更新前先收縮權重 (乘以 1 ? ?α ),有權重衰減的效果。

  • L1 正則化(Lasso回歸)是通過向?標函數添加?個參數懲罰項 ?(θ),為各個參數的絕對值之和。從貝葉斯角度,L1的約束項也可以視為模型參數引入拉普拉斯分布約束。如下為目標函數J再加上L1正則式:

對帶L1目標函數的模型參數更新權重(其中 sgn(x) 為符號函數,取參數的正負號):可見,在-αsgn(w)項的作用下, ?w各元素每步更新后的權重向量都會平穩地向0靠攏,w的部分元素容易為0,造成稀疏性。

總結下L1,L2正則項:

L1,L2都是限制解空間,減少模型容量的方法,以到達減少過擬合的效果。L2范式約束具有產生平滑解的效果,沒有稀疏解的能力,即參數并不會出現很多零。假設我們的決策結果與兩個特征有關,L2正則傾向于綜合兩者的影響,給影響大的特征賦予高的權重;而L1正則傾向于選擇影響較大的參數,而盡可能舍棄掉影響較小的那個(有稀疏解效果)。在實際應用中 L2正則表現往往會優于 L1正則,但 L1正則會壓縮模型,降低計算量。

4.3 多分類任務

當邏輯回歸應用于二分類任務時有兩種主要思路,

  • 沿用Sigmoid激活函數的二分類思路,把多分類變成多個二分類組合有兩種實現方式:OVR(one-vs-rest)的思想就是用一個類別去與其他匯總的類別進行二分類, 進行多次這樣的分類, 選擇概率值最大的那個類別;OVO(One vs One)每個分類器只挑兩個類別做二分類, 得出屬于哪一類,最后把所有分類器的結果放在一起, 選擇最多的那個類別,如下圖:

  • 另外一種,將Sigmoid激活函數換成softmax函數,相應的模型也可以叫做多元邏輯回歸(Multinomial Logistic Regression),即可適用于多分類的場景。softmax函數簡單來說就是將多個神經元(神經元數目為類別數)輸出的結果映射到對于總輸出的占比(范圍0~1,占比可以理解成概率值),我們通過選擇概率最大輸出類別作為預測類別。

如下softmax函數及對應的多分類目標函數:softmax回歸中,一般是假設多個類別是互斥的,樣本在softmax中的概率公式中計算后得到的是樣本屬于各個類別的值,各個類別的概率之和一定為1,而采用logistic回歸OVR進行多分類時,得到的是值是樣本相對于其余類別而言屬于該類別的概率,一個樣本在多個分類器上計算后得到的結果不一定為1。因而當分類的目標類別是互斥時(例如分辨貓、豬、狗圖片),常采用softmax回歸進行預測,而分類目標類別不是很互斥時(例如分辨流行音樂、搖滾、華語),可以采用邏輯回歸建立多個二分類器(也可考慮下多標簽分類)。

4.4 學習目標

邏輯回歸使用最小化交叉熵損失作為目標函數,

為什么不能用MSE均方誤差?簡單來說,有以下幾點:

  • MSE 損失函數的背景假設是數據誤差遵循高斯分布,而二分類問題并不符合這個假設 。

  • 交叉熵的損失函數只關注真實類別對應預測誤差的差異。而MSE無差別地關注全部類別上預測概率和真實類別的誤差,除了增大正確的分類,還會讓錯誤的分類數值變得平均。

  • MSE 函數對于sigmoid二分類問題來說是非凸的,且求導的時候都會有對sigmoid的求導連乘運算,導數值可能很小而導致收斂變慢,不能保證將損失函數極小化。但mse也不是完全不能用于分類,對于分類軟標簽就可以考慮MSE。

4.5 優化算法

最大似然下的邏輯回歸沒有解析解,我們常用梯度下降之類的算法迭代優化得到局部較優的參數解。

如果是Keras等神經網絡庫建模,梯度下降算法類有SGD、Momentum、Adam等優化算法可選。對于大多數任務而言,通常可以直接先試下Adam,然后可以繼續在具體任務上驗證不同優化算法效果。

如果用的是scikitl-learn庫建模,優化算法主要有liblinear(坐標下降)、newton-cg(擬牛頓法), lbfgs(擬牛頓法)和sag(隨機平均梯度下降)。liblinear支持L1和L2,只支持OvR做多分類;“lbfgs”, “sag” “newton-cg”只支持L2,支持OvR和MvM做多分類;當數據量特別大,優先sag!

4.6 模型評估

優化模型閾值(cutoff點) :當評估指標是分類Precision、Recall等指標時,可以通過優化模型閾值(默認0.5)提高分類效果。常用可以根據不同劃分閾值下的presion與recall曲線(P-R曲線),做出權衡,選擇合適的模型閾值。

4.7 可解釋性

邏輯回歸模型很大的優勢就是可解釋性,上節提到通過離散化編碼(如Onehot)可以提高擬合效果及解釋性,如下特征離散后Onehot編碼:決策過程也就是對特征分箱Xn及其模型權重Wn的加權求和,然后sigmoid轉為概率,而通過模型權重值的大小就可以知道各特征對于決策的實際影響程度,比如特征"年齡在[18,30]"對應學到權重值W為-0.8,也就是呈現負相關。

- END -

文章首發公眾號“算法進階”,文末閱讀原文可訪問文章相關代碼



往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載黃海廣老師《機器學習課程》視頻課黃海廣老師《機器學習課程》711頁完整版課件

本站qq群955171419,加入微信群請掃碼:

總結

以上是生活随笔為你收集整理的【机器学习】逻辑回归优化技巧总结(全)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。