算法模型---邏輯迴歸學習

邏輯迴歸的特點

邏輯迴歸的用途

第一用來預測,第二尋找因變量的影響因素。

邏輯迴歸的適用範圍

數據類型

自變量可以是離散值,也可以是連續值;
因變量是二分類變量,也可以是多分類;(多分類使用softmax函數而不是sigmoid函數)
邏輯迴歸中的離散變量
數據不平衡問題:
訓練結果會偏袒大類:
來源:Logistic迴歸的非平衡數據問題及其解決方法
Logistic模型對非平衡數據的敏感性:測度、修正與比較
小類配平和大類配平

邏輯迴歸的優點

原理的相對簡單,可解釋性強等優點,它還可以作爲衆多集成算法以及深度學習的基本組成單位
Logistic迴歸分析報告結果解讀分析

邏輯迴歸的侷限性

邏輯迴歸模型的引入(從線性迴歸到Logistic迴歸)

廣義線性模型
這一家族中模型的形式基本一致,不同的是因變量不同

  • 如果是連續的,就是線性迴歸
  • 如果是二項分佈,就是logistic迴歸
  • 如果是poisson分佈,就是poisson迴歸
  • 如果負二項分佈,就是負二項迴歸

線性迴歸和Logistic迴歸都是廣義線性模型的特例。
假設有一個因變量yy和一組自變量x1,x2,x3,...,xnx_1, x_2, x_3, ... , x_n,其中yy爲連續變量,我們可以擬合一個線性方程:
y=w0+w1x1+w2x2+w3x3++wnxn(1) y =w_0 +w_1*x_1 +w_2*x_2 +w_3*x_3 +\cdots+w_n*x_n-----(1)
並通過最小二乘法估計各個ww係數的值。
如果yy爲二分類變量,只能取值0或1,那麼線性迴歸方程就會遇到困難: 方程右側是一個連續的值,取值爲負無窮到正無窮,而左側只能取值[0,1],無法對應。爲了繼續使用線性迴歸的思想,統計學家想到了一個變換方法,就是將方程右邊的取值變換爲[0,1]。最後選中了sigmoid函數:s(x)=11+exs(x)=\frac{1}{1+e^{-x}},sigmoid函數曲線如下:
這裏寫圖片描述
Sigmoid函數在兩側能很快收斂至0和1,此特性很適合邏輯迴歸的需要,將方程(1)右側代入sigmoid函數有

y=11+e(w0+w1x1+w2x2+w3x3+...+wnxn)(2) y=\frac{1}{1+e^{-(w_0 +w_1*x_1 +w_2*x_2 +w_3*x_3 +...+w_n*x_n)}}----(2)
按照(2)式,對於任意取值的x,因變量y的取值範圍都爲(0~1);但是在分類模型中,y的取值只能是1或0;如果令y=py=p,我們還需要做一些規定,比如當p0.5p\geq 0.5時,y的取值爲1;當p<0.5p< 0.5時,y的取值爲0;當我們通過一定的方法,得到一組合適的參數w0w1w2w3...wnw_0 、w_1、w_2、w_3、...、w_n,那麼只要樣本代入(2)式,根據計算出來p值的大小就可以對的樣本的類別進行判定;此時結果p就相當於y取1的概率,與此對應的,y取0的概率爲1p1-p。sigmoid函數好處在於在x=0的兩側能很快收斂至0和1,保證能夠匹配大部分樣本的類別。
那麼如何來求解這樣一組參數呢?
參數的最優解應該要滿足這樣的要求:最優參數應該讓儘可能多的樣本在給定的屬性值下其類別儘可能呈現其本來的樣子;也就是對於全體樣本,在給定的屬性值和類別取值下,通過(2)式計算得到的類別取值的聯合概率應該最大。
這裏我們就引出了邏輯迴歸模型參數求解的目標函數。

補充知識:

優勢Ω\Omega
優勢,是事件發生與不發生概率之比,用符號Ω\Omega來表示。
Ω=p1p=e(w0+w1x1+w2x2+w3x3+...+wnxn) \Omega=\frac{p}{1-p}=e^{(w_0 +w_1*x_1 +w_2*x_2 +w_3*x_3 +...+w_n*x_n)}
Ω\Omegapp的單調函數,保證了Ω\Omega和p增長的一致性,ΩΩ的取捨範圍是(0,+)(0,+\infty)
如果再對Ω\Omega取對數,則有
lnΩ=lnp1p=w0+w1x1+w2x2+w3x3+...+wnxn ln\Omega=ln\frac{p}{1-p}=w_0 +w_1*x_1 +w_2*x_2 +w_3*x_3 +...+w_n*x_n
logitlogit變換
上述兩步變換稱爲logitlogit變換,lnΩln\Omega稱爲logitPlogitPlogitPlogitP的取捨範圍(,+)(-\infty,+\infty),與一般線性迴歸模型吻合,同時與p之間保值單調一致性。這樣我們完成了從一般線性迴歸到邏輯迴歸的轉換。
logitlogit變換在後面的參數求解中還會用到,可以簡化推導過程。

邏輯迴歸模型的參數估計

yy是0-1型變量,(x1,x2,,xp)(x_1,x_2,\dots,x_p)是與yy相關的確定性變量即特徵變量;n組觀測數據,記爲(xi1,xi2,,xip;yi)(i=1,2,,n)(x_{i1},x_{i2},\dots,x_{ip};y_i)(i=1,2,\dots,n),其中yiy_i是取值爲0或1的隨機變量。
yiy_i是均值爲pip_i的0-1分佈,概率函數爲P(yi=1)=piP(y_i=1)=p_iP(yi=0)=1piP(y_i=0)=1-p_i,我們可以將概率函數合寫爲P(yi)=piyi(1pi)1yi;i=1,2,,n;yi=0,1P(y_i)=p_i^{y_i}(1-p_i)^{1-y_i};i=1,2,\dots,n;y_i=0,1;於是(y1,y2,,yn)(y_1,y_2,\dots,y_n)的似然函數可以寫作
L=i=1np(yi)=i=1npiyi(1pi)1yi(3) L=\prod_{i=1}^{n} p(y_i)=\prod_{i=1}^{n}p_i^{y_i}(1-p_i)^{1-y_i}----(3)
(3)式中pi=11+e(w0+w1xi1++wpxip)p_i=\frac{1}{1+e^{-(w_0+w_1x_{i1}+\dots+w_p x_{ip})}},我們的目標就是求取一組參數w0w1wpw_0 、w_1 、\dots、w_p,使的似然函數L最大。
爲了計算方便,對LL取對數(爲什麼要取對數呢?因爲取對數後,乘法就變成了加法,後面利用梯度下降法時可更好的求偏導,且未改變原似然函數的單調性,如果lnL取到最大值則L也能取到最大值。)
lnL=ln(i=1npiyi(1pi)1yi)=ln(i=1npiyi)+ln(i=1n(1pi)1yi)=i=1nyilnpi+i=1n(1yi)ln(1pi)=i=1nln(1pi)+i=1nyilnpi1pi \begin{matrix} lnL&=&ln(\prod_{i=1}^{n}p_i^{y_i}(1-p_i)^{1-y_i})\\ &=&ln(\prod_{i=1}^{n}p_i^{y_i})+ln(\prod_{i=1}^{n}(1-p_i)^{1-y_i})\\ &=&\sum_{i=1}^{n}y_i lnp_i+\sum_{i=1}^{n}(1-y_i) ln(1-p_i)\\ &=&\sum_{i=1}^{n}ln(1-p_i) +\sum_{i=1}^{n}y_iln\frac{p_i}{1-p_i}\\ \end{matrix}
pi=11+e(w0+w1xi1++wpxip)p_i=\frac{1}{1+e^{-(w_0+w_1x_{i1}+\dots+w_p x_{ip})}}lnΩ=lnp1p=w0+w1x1+w2x2+w3x3+...+wnxnln\Omega=ln\frac{p}{1-p}=w_0 +w_1*x_1 +w_2*x_2 +w_3*x_3 +...+w_n*x_n代入到上式,可以得到
lnL=i=1nln(1+e(w0+w1xi1++wpxip))+i=1nyi(w0+w1xi1++wpxip)=i=1n[yi(w0+w1xi1++wpxip)ln(1+e(w0+w1xi1++wpxip))] \begin{matrix} lnL&=&-\sum_{i=1}^{n}ln(1+e^{(w_0+w_1x_{i1}+\dots+w_p x_{ip})}) + \sum_{i=1}^{n} y_i (w_0+w_1x_{i1}+\dots+w_p x_{ip})\\ &=&\sum_{i=1}^{n} \left[y_i (w_0+w_1x_{i1}+\dots+w_p x_{ip})-ln(1+e^{(w_0+w_1x_{i1}+\dots+w_p x_{ip})}) \right]\\ \end{matrix}
w=(w0,w1,,wp)T,xi=(1,xi1,,xip)T,xi1ww=(w_0,w_1,\dots,w_p)^T,x_i=(1,x_{i1},\dots,x_{ip})^T,x_i中添加了1是爲了與w相匹配
lnLlnL可寫成如下形式:
lnL=i=1n[yi(w0+w1xi1++wpxip)ln(1+e(w0+w1xi1++wpxip))]=i=1n[yiwTxiln(1+ewTxi)] \begin{matrix} lnL&=&\sum_{i=1}^{n} \left[y_i (w_0+w_1x_{i1}+\dots+w_p x_{ip})-ln(1+e^{(w_0+w_1x_{i1}+\dots+w_p x_{ip})}) \right]\\ &=&\sum_{i=1}^{n} \left[ y_i w^T x_i-ln(1+e^{w^T x_i})\right]\\ \end{matrix}
如何選取一組參數w0w1wpw_0 、w_1 、\dots、w_p使得上式最大,這是一個最優化問題。考慮到參數數量的不確定,即參數數量很大,此時直接求解方程組的解變的很困難,或者根本就求不出精確的參數。於是,可以採用梯度下降法和牛頓法等最優化算法。

使用梯度上升法(梯度下降法)求解邏輯迴歸模型的參數

lnLlnL取到最大值,即J(w)=lnL(w)J(w)=- lnL(w)取到最小值.
如果採用梯度下降法求最小值,則ββ的更新過程應當如下:
w=wαJ(w)w=wα(lnL(w))w w = w -\alpha \frac{\partial J(w)}{\partial w}= w -\alpha \frac{\partial (-lnL(w))}{\partial w}
下面計算梯度部分。
(lnL(w))w=(i=1n[yiwTxiln(1+ewTxi)])w=(i=1n[ln(1+ewTxi)yiwTxi])w=i=1n(ewTxi1+ewTxiyi)(wTxi)w=i=1n(11+ewTxiyi)(wTxi)w=i=1n(11+ewTxiyi)(w0+w1xi1++wpxip)w \begin{matrix} \frac{\partial (-lnL(w))}{\partial w}&=&\frac{\partial (-\sum_{i=1}^{n} \left[ y_iw^T x_i-ln(1+e^{w^T x_i})\right])}{\partial w}\\ &=&\frac{\partial (\sum_{i=1}^{n} \left[ ln(1+e^{w^T x_i}) - y_i w^T x_i\right])}{\partial w}\\ &=&\sum_{i=1}^{n}(\frac{e^{w^T x_i}}{1+e^{w^T x_i}}-y_i)\frac{\partial{(w^T x_i)}}{\partial{ w}}\\ &=&\sum_{i=1}^{n}(\frac{1}{1+e^{-w^T x_i}}-y_i)\frac{\partial{(w^T x_i)}}{\partial{w}}\\ &=&\sum_{i=1}^{n}(\frac{1}{1+e^{-w^T x_i}}-y_i)\frac{\partial{(w_0+w_1x_{i1}+\dots+w_p x_{ip})}}{\partial{w}}\\ \end{matrix}
不防令11+ewTxiyi=ei\frac{1}{1+e^{-w^T x_i}}-y_i=e_i,注意看,其實eie_i正好就是樣本i的預測誤差)則上式可化簡爲
(lnL(w))w=i=1nei(wTxi)w=i=1nei(w0+w1xi1++wpxip)w \begin{matrix} \frac{\partial (-lnL(w))}{\partial w} &=&\sum_{i=1}^n e_i \frac{\partial (w^Tx_i)}{\partial w}\\ &=&\sum_{i=1}^n e_i \frac{\partial (w_0+w_1x_{i1}+\cdots+w_p x_{ip})}{\partial w}\\ \end{matrix}
先計算(lnL(w))w\frac{\partial (-lnL(w))}{\partial w}各分量
(lnL(w))w0=i=1nei(w0+w1xi1++wpxip)w0=i=1nei1(lnL(w))w1=i=1nei(w0+w1xi1++wpxip)w1=i=1neixi1==(lnL(w))wp=i=1nei(w0+w1xi1++wpxip)wp=i=1neixip \begin{matrix} \frac{\partial (-lnL(w))}{\partial w_0}&=&\sum_{i=1}^n e_i \frac{\partial (w_0+w_1x_{i1}+\cdots+w_p x_{ip})}{\partial w_0}&=&\sum_{i=1}^n e_i *1\\ \frac{\partial (-lnL(w))}{\partial w_1}&=&\sum_{i=1}^n e_i \frac{\partial (w_0+w_1x_{i1}+\cdots+w_p x_{ip})}{\partial w_1}&=&\sum_{i=1}^n e_i *x_{i1}\\ \cdots&=&\cdots&=&\cdots\\ \frac{\partial (-lnL(w))}{\partial w_p}&=&\sum_{i=1}^n e_i \frac{\partial (w_0+w_1x_{i1}+\cdots+w_p x_{ip})}{\partial w_p}&=&\sum_{i=1}^n e_i *x_{ip}\\ \end{matrix}
(lnL(w))w\frac{\partial (-lnL(w))}{\partial w}可寫成
(lnL(w))w=[i=1nei1i=1neixi1i=1neixip]=[e1+ex++ene1x11+e2x21++enxn1e1x1p+e2x2p++enxnp]=[1+x11+x12++x1p1+x21+x22++x2p1+xn1+xn2++xnp]T[e1en] \begin{matrix} \frac{\partial (-lnL(w))}{\partial w} &=& \left[ \begin{matrix} \sum_{i=1}^n e_i *1\\ \sum_{i=1}^n e_i *x_{i1}\\ \cdots\\ \sum_{i=1}^n e_i *x_{ip}\\ \end{matrix}\right]\\ &=& \left[ \begin{matrix} e_1+e_x+\cdots+e_n\\ e_1x_{11}+e_2x_{21}+\cdots+e_nx_{n1}\\ \cdots\\ e_1x_{1p}+e_2x_{2p}+\cdots+e_nx_{np}\\ \end{matrix}\right]\\ &=& \left[ \begin{matrix} 1+x_{11}+x_{12}+\cdots+x_{1p}\\ 1+x_{21}+x_{22}+\cdots+x_{2p}\\ \cdots\\ 1+x_{n1}+x_{n2}+\cdots+x_{np}\\ \end{matrix}\right]^T* \left[ \begin{matrix} e_1\\ \cdots\\ e_n\\ \end{matrix}\right]\\ \end{matrix}

[1,x11,x12, ,x1p1,x21,x22, ,x2p1,xn1,xn2, ,xnp]=X\left[ \begin{matrix} 1,x_{11},x_{12},\cdots,x_{1p}\\ 1,x_{21},x_{22},\cdots,x_{2p}\\ \cdots\\ 1,x_{n1},x_{n2},\cdots,x_{np}\\ \end{matrix}\right] =X
[e1en]=E \left[ \begin{matrix} e_1\\ \cdots\\ e_n\\ \end{matrix}\right]=E

(lnL(w))w=XTE \frac{\partial (-lnL(w))}{\partial w}=X^TE
實際上的計算應該不需要這麼麻煩,但大學時學的偏微分和矩陣運算都忘光了。就採用這種笨一點的方法
則參數更新公式可寫成
w=wαXTE w=w-\alpha X^TE\\
到此我們就將梯度下降法求解最優參數的更新公式推導出來了。初始化的時候,我們可以先令所有參數都爲1,然後逐步迭代優化。迭代足夠的次數或者前後再次更新變化很小,就可以停止迭代。

分界面的求解

通過定一個閾值,比如p0=0.5p_0=0.5,然後pp0p\geq p_0是一類,則p<p0p< p_0是另一類;
pi=11+e(w0+w1xi1++wpxip)0.5p_i=\frac{1}{1+e^{-(w_0+w_1 x_{i1}+⋯+w_p x_{ip} ) }} \geq 0.5是一類,pi=11+e(w0+w1xi1++wpxip)<0.5p_i=\frac{1}{1+e^{-(w_0+w_1 x_{i1}+⋯+w_p x_{ip} ) }} < 0.5是另一類;
或者換一種表達
w0+w1xi1++wpxip>0w_0+w_1 x_i1+⋯+w_p x_ip>0是一類,w0+w1xi1++wpxip<0w_0+w_1 x_{i1}+⋯+w_p x_{ip}<0是另一類;在原數據空間,w0+w1xi1++wpxipw_0+w_1 x_{i1}+⋯+w_p x_{ip}就是分界面。

類別預測

將測試數據代入方程
pi=11+e(w0+w1xi1++wpxip)p_i=\frac{1}{1+e^{-(w_0+w_1 x_{i1}+⋯+w_p x_{ip} ) }},並確定一個閾值,如果定閾值爲0.5,則在二分類模型中,pi>0.5p_i>0.5即爲1,小於0.5即爲0

邏輯迴歸用於多分類

來源:https://blog.csdn.net/szu_hadooper/article/details/78619001
普通的logistic迴歸只能針對二分類(Binary Classification)問題,要想實現多個類別的分類,我們必須要改進logistic迴歸,讓其適應多分類問題。
關於這種改進,有兩種方式可以做到。

第一種方式

是直接根據每個類別,都建立一個二分類器,帶有這個類別的樣本標記爲1,帶有其他類別的樣本標記爲0。假如我們有個類別,最後我們就得到了個針對不同標記的普通的logistic分類器。
假如給定數據集XRm×nX\in R^{m\times n},它們的標記YRkY\in R^k,即這些樣本有個不同的類別。

我們挑選出標記爲c(ck)c(c\leq k)的樣本,將挑選出來的帶有標記的樣本的標記置爲1,將剩下的不帶有標記的樣本的標記置爲0。然後就用這些數據訓練出一個分類器,我們得到hc(x)h_c(x)(表示針對標記的logistic分類函數)。

按照上面的步驟,我們可以得到k個不同的分類器。針對一個測試樣本,我們需要找到這個分類函數輸出值最大的那一個,即爲測試樣本的標記:
arg maxchc(x),c=1,2, ,k arg~max_c h_c(x),c=1,2,\cdots,k

第二種方式

是修改logistic迴歸的損失函數,讓其適應多分類問題。這個損失函數不再籠統地只考慮二分類非1就0的損失,而是具體考慮每個樣本標記的損失。這種方法叫做softmax迴歸,即logistic迴歸的多分類版本。
參考:Softmax函數與交叉熵

Softmax函數

在Logistic regression二分類問題中,我們可以使用sigmoid函數將輸入Wx+bWx+b映射到(0,1)區間中,從而得到屬於某個類別的概率。將這個問題進行泛化,推廣到多分類問題中,我們可以使用softmax函數,對輸出的值歸一化爲概率值。
這裏假設在進入softmax函數之前,已經有模型輸出C值,其中C是要預測的類別數,模型可以是全連接網絡的輸出a,其輸出個數爲C,即輸出爲a1,a2,...,aCa_1,a_2,...,a_C
所以對每個樣本,它屬於類別ii的概率爲:
yi=eaik=1Ceak     i1...C y_i=\frac{e^{a_i}}{∑^C_{k=1}e^{a_k}}~~~~~ ∀_i∈1...C
通過上式可以保證i=1Cyi=1∑^C_{i=1} y_i=1,即屬於各個類別的概率和爲1。
Softmax函數求導

softmax 迴歸

損失函數:對數似然函數
機器學習裏面,對模型的訓練都是對Loss function進行優化,在分類問題中,我們一般使用最大似然估計(Maximum likelihood estimation)來構造損失函數。對於輸入的xx,其對應的類標籤爲tt,我們的目標是找到這樣的θθ使得p(tx)p(t|x)最大。在二分類的問題中,我們有:
p(tx)=(y)t(1y)1tp(t|x)=(y)^t(1−y)^{1−t}
其中,y=f(x)y=f(x)是模型預測的概率值,tt是樣本對應的類標籤。
將問題泛化爲更一般的情況,多分類問題:
p(tx)=i=1CP(tix)ti=i=1Cyitip(t|x)=∏_{i=1}^CP(t_i|x)^{t_i}=∏_{i=1}^Cy^{t_i}_i
其中tit_i是樣本m屬於類別i的概率,yiy_i是模型對樣本m預測爲屬於類別i的概率。
由於連乘可能導致最終結果接近0的問題,一般對似然函數取對數的負數,變成最小化對數似然函數。
lCE=log p(tx)=logi=1Cyiti=i=iCtilog(yi)l_{CE}=−log~ p(t|x)=−log∏_{i=1}^C y^{t_i}_i=−∑_{i=i}^C t_ilog(y_i)
損失函數求導
對單個樣本來說,loss function lCEl_{CE}對輸入aja_j的導數爲:
lCEaj=i=1Ctilog(yi)aj=i=1Ctilog(yi)aj=i=1Cti1yiyiaj \frac{∂l_{CE}}{∂_{a_j}}=−∑_{i=1}^C \frac{∂t_ilog(y_i)}{∂a_j}=−∑_{i=1}^C t_i\frac{∂log(y_i)}{∂a_j}=−∑_{i=1}^C t_i\frac{1}{y_i}\frac{∂ y_i}{∂a_j}
上面對yiaj\frac{∂ y_i}{∂a_j}求導結果已經算出:
i=ji=j時:yiaj=yi(1yj)\frac{∂ y_i}{∂a_j}=y_i(1−y_j)
iji≠j時:yiaj=yiyj\frac{∂ y_i}{∂a_j}=−y_iy_j

所以,將求導結果代入上式:
i=1Cti1yiyiaj=tiyiyiajijCtiyiyiaj=tjyiyi(1yj)ijCtiyi(yiyj)=tj+tjyj+ijCtiyj=tj+i=1Ctiyj=tj+yji=1Cti=tj+yj \begin{matrix} −∑_{i=1}^C t_i\frac{1}{y_i}\frac{∂ y_i}{∂a_j} &=&-\frac{t_i}{y_i}\frac{∂ y_i}{∂a_j}−∑_{i\neq j}^C \frac{t_i}{y_i}\frac{∂ y_i}{∂a_j}\\ &=&-\frac{t_j}{y_i}y_i(1−y_j)−∑_{i\neq j}^C \frac{t_i}{y_i}(−y_iy_j)\\ &=&-t_j+t_jy_j+∑_{i\neq j}^C t_iy_j\\ &=&-t_j+∑_{i=1}^C t_iy_j\\ &=&-t_j+y_j∑_{i=1}^C t_i\\ &=&-t_j+y_j\\ \end{matrix}
這個就量參數的更新公式,其實與BPNN中的是一樣的。

也可參考:Deep Learning 學習隨記(三)Softmax regression

邏輯迴歸用於迴歸模型

邏輯迴歸主要用於分類,稍加改造也可以用於迴歸模型,但只適用於極特殊的分佈函數,感覺沒什麼應用價值。
但可以從下面的角度來應用:
正如在前面在類別判斷中計算取1的概率一樣 pi=11+e(w0+w1xi1++wpxip)p_i=\frac{1}{1+e^{-(w_0+w_1 x_{i1}+⋯+w_p x_{ip} ) }} ,這個函數是非線性的,越靠近1相互之間越難以區分。如果直接用上式作迴歸結果,在類似於信用評分這樣的場景就不好用。但w0+w1xi1++wpxipw_0+w_1 x_{i1}+⋯+w_p x_{ip}卻是線性的,個人以爲可以利用邏輯迴歸獲得各變量的權重,而w0+w1xi1++wpxipw_0+w_1 x_{i1}+⋯+w_p x_{ip}就是相應的綜合評分。爲了將評分結果約束到一定範圍,可以在建模型之前對變量取值進行類似歸一化的處理再建模;也可以先建模,再利用w0+w1xi1++wpxipw_0+w_1 x_{i1}+⋯+w_p x_{ip}對歷史數據預測結果來進行約束,比如除以歷史預測結果的最大值,這樣就將結果約束到[-1,1]之間,但是我們知道,這樣的話可能會出現新的預測結果大於1或小於-1的情況。如果大於1,說明是極好的,不防就令所有大於1的結果爲1.這樣整個下來就相當於一個線性預測的效果。

邏輯迴歸模型的檢驗(及自變量的選擇)

邏輯迴歸方程的顯著性檢驗的目的是檢驗所有自變量與logitP的線性關係是否顯著,是否可以選擇線性模型。原假設是假設各回歸係數同時爲0,自變量全體與logitP的線性關係不顯著。如果方程中的諸多自變量對logitP

的線性解釋有顯著意義,那麼必然會使迴歸方程對樣本的擬合得到顯著提高。可通過對數似然比測度擬合程度是否有所提高。

我們通常採用似然比檢驗統計量 ln(LLxi)2−ln(\frac{L}{L_{x_i}})^2
也可稱爲似然比卡方,其中LL表示引入變量 xix_i前回歸方程的似然函數值,LxiL_{x_i}表示引入變量 xix_i後迴歸方程的似然函數值。似然比檢驗統計量越大表明引入變量 xix_i越有意義。如果似然比卡方觀測值的概率pp值小於給定的顯著性水平,不接受原假設,即認爲自變量全體與logitPlogitP之間的線性關係顯著。反之,線性關係不顯著。
另外可參考:
怎樣用SPSS做二項Logistic迴歸分析?結果如何解釋?

Wald檢驗:
似然比檢驗
比分檢驗
spss二分類的logistic迴歸的操作和分析方法
利用R語言+邏輯迴歸實現自動化運營

迴歸係數的顯著性檢驗

邏輯迴歸係數的顯著性檢驗是檢驗方程中各變量與logitPlogitP之間是否具有線性關係。原假設是假設變量xix_ilogitPlogitP之間的線性關係不顯著,即wi=0w_i=0

邏輯迴歸模型的評估方法

來源:2016年07月14日 18:09:35
TPFN組合
正確率
TP、FP、FN、TN

  • 誤檢率: fp rate = sum(fp) / (sum(fp) + sum(tn))
  • 查準率: precision rate = sum(tp) / (sum(tp) + sum(fp))
  • 查全率: recall rate = sum(tp) / (sum(tp) + sum(fn))
  • 漏檢率:miss rate = sum(fn) / (sum(tp) + sum(fn))

ROC曲線、AUC
ROC曲線的橫座標爲false positive rate(FPR),縱座標爲 true positive rate(TPR)
Kappa statics
Kappa值,即內部一致性係數(inter-rater,coefficient of internal consistency),是作爲評價判斷的一致性程度的重要指標。取值在0~1之間。Kappa≥0.75兩者一致性較好;0.75>Kappa≥0.4兩者一致性一般;Kappa<0.4兩者一致性較差。
第一個圖上,所顯示的Kappa值有0.9356,那就算很好了。
Mean absolute error 和 Root mean squared error
平均絕對誤差和均方根誤差,用來衡量分類器預測值和實際結果的差異,越小越好。

Relative absolute error 和 Root relative squared error
相對絕對誤差和相對均方根誤差,有時絕對誤差不能體現誤差的真實大小,而相對誤差通過體現誤差佔真值的比重來反映誤差大小。

邏輯迴歸的正則化

當模型的參數過多時,很容易遇到過擬合的問題。而正則化是結構風險最小化的一種實現方式,通過在經驗風險上加一個正則化項,來懲罰過大的參數來防止過擬合。

  • 正則化是符合奧卡姆剃刀(Occam’s razor)原理 的:在所有可能選擇的模型中,能夠很好地解釋已知數據並且十分簡單的纔是最好的模型。

我們來看一下underfitting,fitting跟overfitting的情況:
此處輸入圖片的描述
顯然,最右這張圖overfitting了,原因可能是能影響結果的參數太多了。典型的做法在優化目標中加入正則項,通過懲罰過大的參數來防止過擬合:
J(w)=&gt;J(w)+λwp J(w)=&gt;J(w)+λ||w||_p
p=1或者2,表示L1 範數和 L2範數,這兩者還是有不同效果的。

L1範數: 是指向量中各個元素絕對值之和,也有個美稱叫“稀疏規則算子”(Lasso regularization)。那麼,參數稀疏 有什麼好處呢?

一個關鍵原因在於它能實現 特徵的自動選擇。一般來說,大部分特徵 xix_i和輸出 $y_i $之間並沒有多大關係。在最小化目標函數的時候考慮到這些額外的特徵 xix_i,雖然可以獲得更小的訓練誤差,但在預測新的樣本時,這些沒用的信息反而會干擾了對正確 yiy_i 的預測。稀疏規則化算子的引入就是爲了完成特徵自動選擇的光榮使命,它會學習地去掉這些沒有信息的特徵,也就是把這些特徵對應的權重置爲0。

L2範數: 它有兩個美稱,在迴歸裏面,有人把有它的迴歸叫“嶺迴歸”(Ridge Regression)重點內容,有人也叫它“權值衰減”(weight decay)。

它的強大之處就是它能 解決過擬合 問題。我們讓 L2 範數的規則項$ ||w||_2$ 最小,可以使得 w 的每個元素都很小,都接近於0,但與 L1範數不同,它不會讓它等於0,而是接近於0,這裏還是有很大區別的。而越小的參數說明模型越簡單,越簡單的模型則越不容易產生過擬合現象。咦,你爲啥說越小的參數表示的模型越簡單呢? 其實我也不知道,我也是猜,可能是因爲參數小,對結果的影響就小了吧。

爲了更直觀看出兩者的區別,我再放一張圖:
此處輸入圖片的描述
爲了簡單,上圖只考慮了w爲二維(w1w^1,w2w^2)的情況。彩色等高線是(w1w^1,w2w^2);而左邊黑色矩形 $||w||_1<C 和右邊的圓形 ||w||_2<C $是約束條件;相交的黑點就是最優解發生的地方。兩者的區別可以從圖中看出來,L1正則化(左圖)傾向於使參數變爲0,因此能產生稀疏解。而 L2 使 w 接近0;

  • 一句話總結就是:L1 會趨向於產生少量的特徵,而其他的特徵都是0,而 L2 會選擇更多的特徵,同時很多特徵都會接近於0。

並行邏輯迴歸

來源:
由邏輯迴歸問題的求解方法中可以看出,無論是梯度下降法、牛頓法、擬牛頓法,計算梯度都是其最基本的步驟,並且L-BFGS通過兩步循環計算牛頓方向的方法,避免了計算海森矩陣。因此邏輯迴歸的並行化最主要的就是對目標函數梯度計算的並行化。從公式(2)中可以看出(就是梯度下降法中梯度的計算公式),目標函數的梯度向量計算中只需要進行向量間的點乘和相加,可以很容易將每個迭代過程拆分成相互獨立的計算步驟,由不同的節點進行獨立計算,然後歸併計算結果。
將M個樣本的標籤構成一個M維的標籤向量,M個N維特徵向量構成一個MNM*N的樣本矩陣,如圖3所示。其中特徵矩陣每一行爲一個特徵向量(M行),列爲特徵維度(N列)。

並行邏輯迴歸
圖3 樣本標籤向量 & 樣本矩陣

如果將樣本矩陣按行劃分,將樣本特徵向量分佈到不同的計算節點,由各計算節點完成自己所負責樣本的點乘與求和計算(比如一個節點分到一個樣本,那麼它負責計算e1e1x11e1x1pe_1、e_1x_{11}、\dots、e_1x_{1p};同樣第二個節點負責計算e2e2x21e2x2pe_2、e_2x_{21}、\dots、e_2x_{2p};依此類推;每二步進行e1++en;e1x11+e2x21++enxn1;e_1+\dots+e_n;e_1x_{11}+e_2x_{21}+\dots+e_nx_{n1};\dots),然後將計算結果進行歸併,則實現了“按行並行的LR”。按行並行的LR解決了樣本數量的問題,但是實際情況中會存在針對高維特徵向量進行邏輯迴歸的場景(如廣告系統中的特徵維度高達上億),僅僅按行進行並行處理,無法滿足這類場景的需求,因此還需要按列將高維的特徵向量拆分成若干小的向量進行求解。

(1) 數據分割

假設所有計算節點排列成m行n列(m*n個計算節點),按行將樣本進行劃分,每個計算節點分配M/m個樣本特徵向量和分類標籤;按列對特徵向量進行切分,每個節點上的特徵向量分配N/n維特徵。如圖4所示,同一樣本的特徵對應節點的行號相同,不同樣本相同維度的特徵對應節點的列號相同。

並行邏輯迴歸
圖4 並行LR中的數據分割

一個樣本的特徵向量被拆分到同一行不同列的節點中,即:Xr,k=&lt;X(r,1),k&gt;,,&lt;X(r,c),k&gt;,,&lt;X(r,n),k&gt;X_{r,k}=&lt;X_{(r,1),k}&gt;,\dots,&lt;X_{(r,c),k}&gt;,\dots,&lt;X_{(r,n),k}&gt;

其中Xr,kX_{r,k}表示第r行的第k個向量,X(r,c),kX_{(r,c),k}表示Xr,kX_{r,k}在第c列節點上的分量。同樣的,用WcW_c表示特徵向量W在第c列節點上的分量,即:W=&lt;W1,,Wc,,Wn&gt;W=&lt;W_1,\dots,W_c,\dots,W_n&gt;

(2) 並行計算

觀察目標函數的梯度計算公式(公式(2)),其依賴於兩個計算結果:特徵權重向量WtW_t和特徵向量XjX_j的點乘,標量[δ(yiWtTXj)1]yi[\delta(y_iW_t^TX_j)-1]y_i和特徵向量XjX_j的相乘。可以將目標函數的梯度計算分成兩個並行化計算步驟和兩個結果歸併步驟:
① 各節點並行計算點乘,計算d(r,c),k,t=Wc,tTX(r,c),kRd_{(r,c),k,t}=W_{c,t}^{T}X_{(r,c),k}\in R,其中k=1,2,,M/mk=1,2,…,M/md(r,c),k,td_{(r,c),k,t}表示第t次迭代中節點(r,c)上的第k個特徵向量與特徵權重分量的點乘,Wc,tW_{c,t}爲第t次迭代中特徵權重向量在第c列節點上的分量。
② 對行號相同的節點歸併點乘結果:
並行邏輯迴歸
計算得到的點乘結果需要返回到該行所有計算節點中,如圖5所示。

並行邏輯迴歸
圖5 點乘結果歸併
③ 各節點獨立算標量與特徵向量相乘: 並行邏輯迴歸 $G_{(r,c),t}$可以理解爲由第r行節點上部分樣本計算出的目標函數梯度向量在第c列節點上的分量。

④ 對列號相同的節點進行歸併:
並行邏輯迴歸
Gc,tG_{c,t}就是目標函數的梯度向量GtG_t在第c列節點上的分量,對其進行歸併得到目標函數的梯度向量:
並行邏輯迴歸
這個過程如圖6所示。

並行邏輯迴歸
圖6 梯度計算結果歸併

綜合上述步驟,並行LR的計算流程如圖7所示。比較圖2和圖7,並行LR實際上就是在求解損失函數最優解的過程中,針對尋找損失函數下降方向中的梯度方向計算作了並行化處理,而在利用梯度確定下降方向的過程中也可以採用並行化(如L-BFGS中的兩步循環法求牛頓方向)。

並行邏輯迴歸
圖7 並行LR計算流程

實驗及結果

利用MPI,分別基於梯度下降法(MPI_GD)和L-BFGS(MPI_L-BFGS)實現並行LR,以Liblinear爲基準,比較三種方法的訓練效率。Liblinear是一個開源庫,其中包括了基於TRON的LR(Liblinear的開發者Chih-Jen Lin於1999年創建了TRON方法,並且在論文中展示單機情況下TRON比L-BFGS效率更高)。由於Liblinear並沒有實現並行化(事實上是可以加以改造的),實驗在單機上進行,MPI_GD和MPI_L-BFGS均採用10個進程。

實驗數據是200萬條訓練樣本,特徵向量的維度爲2000,正負樣本的比例爲3:7。採用十折交叉法比較MPI_GD、MPI_L-BFGS以及Liblinear的分類效果。結果如圖8所示,三者幾乎沒有區別。

並行邏輯迴歸
圖8 分類效果對比

將訓練數據由10萬逐漸增加到200萬,比較三種方法的訓練耗時,結果如圖9,MPI_GD由於收斂速度慢,儘管採用10個進程,單機上的表現依舊弱於Liblinear,基本上都需要30輪左右的迭代才能達到收斂;MPI_L-BFGS則只需要3~5輪迭代即可收斂(與Liblinear接近),雖然每輪迭代需要額外的開銷計算牛頓方向,其收斂速度也要遠遠快於MPI_GD,另外由於採用多進程並行處理,耗時也遠低於Liblinear。

並行邏輯迴歸
圖9 訓練耗時對比

使用spark建立邏輯迴歸(Logistic)模型幫Helen找男朋友

來源:https://blog.csdn.net/u013719780/article/details/52277616
作者使用得不太好,但可以參考一下,自己做改進。而且spark中邏輯迴歸實現了多分類算法

爲什麼邏輯迴歸比線性迴歸要好?

https://blog.csdn.net/cyh_24/article/details/50359055

邏輯迴歸與最大熵模型MaxEnt的關係?

簡單粗暴 的回答是:邏輯迴歸跟最大熵模型沒有本質區別。邏輯迴歸是最大熵對應類別爲二類時的特殊情況,也就是當邏輯迴歸類別擴展到多類別時,就是最大熵模型。

最大熵模型是約束條件下的熵最大化,可以通過拉格朗日乘子進行推導。可得到最大似然的形式。
而邏輯迴歸就是最大熵模型k=2的特性。

邏輯迴歸的python實現

邏輯迴歸使用心得

scikit-learn 邏輯迴歸類庫使用小結

邏輯迴歸應用之Kaggle泰坦尼克之災

來源:https://blog.csdn.net/han_xiaoyang/article/details/49797143
很詳細的一個案例,尤其是最後的邏輯迴歸系統優化部分有時間要練習一下,自己目前還沒有真正花心思去優化已經實現的模型。

其他參考資料:

深入解讀Logistic迴歸結果(一):迴歸係數,OR

邏輯迴歸的前世今生
Logistic Regression 的前世今生(理論篇)

《Logistic Regression 模型簡介》,來源:FIN ·2015-05-08 10:00
Python實現邏輯迴歸(Logistic Regression in Python)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章