乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      【機(jī)器學(xué)習(xí)】邏輯回歸優(yōu)化技巧總結(jié)(全)

       漢無為 2021-11-30

      邏輯回歸由于其簡單高效、易于解釋,是工業(yè)應(yīng)用最為廣泛的模型之一,比如用于金融風(fēng)控領(lǐng)域的評分卡、互聯(lián)網(wǎng)的推薦系統(tǒng)。上文總結(jié)了邏輯回歸的原理及其實(shí)現(xiàn)【全面解析并實(shí)現(xiàn)邏輯回歸(Python)】

      本文從實(shí)際應(yīng)用出發(fā),以數(shù)據(jù)特征、優(yōu)化算法、模型優(yōu)化等方面,全面地歸納了邏輯回歸(LR)優(yōu)化技巧。

      一、LR的特征生成

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

      圖片
      # 生成xor數(shù)據(jù)
      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實(shí)現(xiàn)邏輯回歸
      from keras.layers import *
      from keras.models import Sequential, Model
      from tensorflow import random
      np.random.seed(5) # 固定隨機(jī)種子
      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('正確標(biāo)簽:',y.values)
      print('模型預(yù)測:',model.predict(x).round())
      # 正確標(biāo)簽: [0 1 1 0]   模型預(yù)測: [0 1 1 0]

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

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

      • 人工結(jié)合業(yè)務(wù)衍生特征:人工特征的好處是加工出的特征比較有業(yè)務(wù)解釋性,更貼近實(shí)際業(yè)務(wù)。缺點(diǎn)是很依賴業(yè)務(wù)知識,耗時(shí)。

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

      • 基于模型的方法:

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

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

      圖片

      如下GBDT+LR的代碼實(shí)現(xiàn)(基于癌細(xì)胞數(shù)據(jù)集),提取GBDT特征,并與原特征拼接:圖片訓(xùn)練并評估模型有著較優(yōu)的分類效果:圖片

      ## GBDT +LR ,公眾號閱讀原文,可訪問Github源碼
      from sklearn.preprocessing import OneHotEncoder
      from sklearn.ensemble import GradientBoostingClassifier

      gbdt = GradientBoostingClassifier(n_estimators=50, random_state=10, subsample=0.8, max_depth=6,
                                        min_samples_split=20)
      gbdt.fit(x_train, y_train) # GBDT 訓(xùn)練集訓(xùn)練

      train_new_feature = gbdt.apply(x) # 返回?cái)?shù)據(jù)在訓(xùn)練好的模型里每棵樹中所處的葉子節(jié)點(diǎn)的位置
      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對于連續(xù)性的數(shù)值特征的輸入,通常需要對特征做下max-min歸一化(x =x-min/(max-min),轉(zhuǎn)換輸出為在 0-1之間的數(shù),這樣可以加速模型計(jì)算及訓(xùn)練收斂。但其實(shí)在工業(yè)界,很少直接將連續(xù)值作為邏輯回歸模型的特征輸入,而是先將連續(xù)特征離散化(常用的有等寬、等頻、卡方分箱、決策樹分箱等方式,而分箱的差異也直接影響著模型效果),然后做(Onehot、WOE)編碼再輸入模型。

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

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

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

      圖片

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

      總結(jié)下離散化編碼的優(yōu)點(diǎn):

      • 邏輯回歸的擬合能力有限,當(dāng)變量離散化為N個(gè)后,每個(gè)變量有單獨(dú)的權(quán)重,相當(dāng)于為模型引入了非線性,能夠提升模型擬合能力的同時(shí),也有更好的解釋性。而且離散化后可以方便地進(jìn)行特征交叉,由M+N個(gè)變量變?yōu)镸*N個(gè)變量,可以進(jìn)一步提升表達(dá)能力。
      • 離散化后的特征對異常數(shù)據(jù)有較強(qiáng)的魯棒性:比如一個(gè)特征是年齡>44是1,否則0。如果特征沒有離散化,一個(gè)異常數(shù)據(jù)“年齡200歲”輸入會給模型造成很大的干擾,而將其離散后歸到相應(yīng)的分箱影響就有限。
      • 離散化后模型會更穩(wěn)定,且不容易受到噪聲影響,減少過擬合風(fēng)險(xiǎn):比如對用戶年齡離散化,18-22作為一個(gè)區(qū)間,不會因?yàn)橐粋€(gè)用戶年齡長了一歲就變成一個(gè)完全不同樣本。

      三、特征選擇

      特征選擇用于篩選出顯著特征、摒棄非顯著特征??梢越档瓦\(yùn)算開銷,減少干擾噪聲,降低過擬合風(fēng)險(xiǎn),提升模型效果。對于邏輯回歸常用如下三種選擇方法:

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

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

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

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

      四、模型層面的優(yōu)化

      4.1 截距項(xiàng)

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

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

      4.2 正則化策略

      通過設(shè)定正則項(xiàng)可以減少模型的過擬合風(fēng)險(xiǎn),常用的正則策略有L1,L2正則化:

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

      從上式可以看出,加?權(quán)重衰減后會導(dǎo)致學(xué)習(xí)規(guī)則的修改,即在每步執(zhí)?梯度更新前先收縮權(quán)重 (乘以 1 ? ?α ),有權(quán)重衰減的效果。

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

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

      總結(jié)下L1,L2正則項(xiàng):

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

      4.3 多分類任務(wù)

      當(dāng)邏輯回歸應(yīng)用于二分類任務(wù)時(shí)有兩種主要思路,

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

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

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

      4.4 學(xué)習(xí)目標(biāo)

      邏輯回歸使用最小化交叉熵?fù)p失作為目標(biāo)函數(shù),圖片

      為什么不能用MSE均方誤差?圖片簡單來說,有以下幾點(diǎn):

      • MSE 損失函數(shù)的背景假設(shè)是數(shù)據(jù)誤差遵循高斯分布,而二分類問題并不符合這個(gè)假設(shè) 。
      • 交叉熵的損失函數(shù)只關(guān)注真實(shí)類別對應(yīng)預(yù)測誤差的差異。而MSE無差別地關(guān)注全部類別上預(yù)測概率和真實(shí)類別的誤差,除了增大正確的分類,還會讓錯(cuò)誤的分類數(shù)值變得平均。
      • MSE 函數(shù)對于sigmoid二分類問題來說是非凸的,且求導(dǎo)的時(shí)候都會有對sigmoid的求導(dǎo)連乘運(yùn)算,導(dǎo)數(shù)值可能很小而導(dǎo)致收斂變慢,不能保證將損失函數(shù)極小化。但mse也不是完全不能用于分類,對于分類軟標(biāo)簽就可以考慮MSE。

      4.5 優(yōu)化算法

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

      如果是Keras等神經(jīng)網(wǎng)絡(luò)庫建模,梯度下降算法類有SGD、Momentum、Adam等優(yōu)化算法可選。對于大多數(shù)任務(wù)而言,通??梢灾苯酉仍囅翧dam,然后可以繼續(xù)在具體任務(wù)上驗(yàn)證不同優(yōu)化算法效果。

      如果用的是scikitl-learn庫建模,優(yōu)化算法主要有l(wèi)iblinear(坐標(biāo)下降)、newton-cg(擬牛頓法), lbfgs(擬牛頓法)和sag(隨機(jī)平均梯度下降)。liblinear支持L1和L2,只支持OvR做多分類;“l(fā)bfgs”, “sag” “newton-cg”只支持L2,支持OvR和MvM做多分類;當(dāng)數(shù)據(jù)量特別大,優(yōu)先sag!

      4.6 模型評估

      優(yōu)化模型閾值(cutoff點(diǎn)) :當(dāng)評估指標(biāo)是分類Precision、Recall等指標(biāo)時(shí),可以通過優(yōu)化模型閾值(默認(rèn)0.5)提高分類效果。常用可以根據(jù)不同劃分閾值下的presion與recall曲線(P-R曲線),做出權(quán)衡,選擇合適的模型閾值。圖片

      4.7 可解釋性

      邏輯回歸模型很大的優(yōu)勢就是可解釋性,上節(jié)提到通過離散化編碼(如Onehot)可以提高擬合效果及解釋性,如下特征離散后Onehot編碼:圖片決策過程也就是對特征分箱Xn及其模型權(quán)重Wn的加權(quán)求和,然后sigmoid轉(zhuǎn)為概率,而通過模型權(quán)重值的大小就可以知道各特征對于決策的實(shí)際影響程度,比如特征'年齡在[18,30]'對應(yīng)學(xué)到權(quán)重值W為-0.8,也就是呈現(xiàn)負(fù)相關(guān)。

        本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多