對(duì)數(shù)幾率回歸(logistic 回歸)

寫在前面:強(qiáng)烈推薦閱讀此文提到的思考問題。

相關(guān)定義

對(duì)數(shù)幾率分布

設(shè)X是連續(xù)隨機(jī)變量,X服從對(duì)數(shù)幾率分布是X具有以下分布函數(shù)和密度函數(shù)(分布函數(shù)的導(dǎo)數(shù)):

F(x)=P(X\leq x)=\frac{1}{1+e^{-(x-\mu)/\gamma}}

f(x)=F^‘(x)=\frac{e^{-(x-\mu)/\gamma}}{\gamma(1+e^{-(x-\mu)/\gamma})^2}

其中,\gamma稱為形狀參數(shù),值越小,在臨界點(diǎn)附近增長的越快。

下圖(來自《統(tǒng)計(jì)學(xué)習(xí)方法》-李航)為密度函數(shù)和分布函數(shù)的示意圖:

logistic_2.png

條件概率

來源:https://blog.csdn.net/u014722627/article/details/70332459

對(duì)于一組隨機(jī)變量,其中某些變量取特定值時(shí),其余變量的分布稱為條件概率分布。

假設(shè)數(shù)據(jù)集共有N個(gè)樣本,記第i個(gè)樣本輸入(m維向量)和樣本標(biāo)簽分別為x_i=[x_{i1},x_{i2},\cdots,x_{im}]^T,y_i \in\{0,1\},條件概率與參數(shù)w有關(guān),正確分類的條件概率可以寫為 P(y=y_i|x=x_i;w),簡寫為 P(y_i|x_i;w)

正確分類概率:

P(y_i|x_i;w)=\begin{cases} P(y=1|x_i;w), y_i=1\\P(y=0|x_i;w)=1-P(y=1|x_i,w), y_i=0\end{cases}\tag{s.1}

對(duì)正確分類概率取對(duì)數(shù)可以得到:

lnP(y_i|x_i;w)=\begin{cases} lnP(y=1|x_i;w), y_i=1\\lnP(y=0|x_i;w)=ln(1-P(y=1|x_i,w)), y_i=0\end{cases}\tag{s.2}

公式(s.2)等價(jià)于lnP(y_i|x_i;w)=\{y_i=1\}lnP(y=1|x_i;w)+\{y_i=0\}ln(1-P(y=1|x_i,w))

\{y_i=1\}稱為示例函數(shù),當(dāng)條件滿足時(shí)取1,條件不滿足時(shí)取 0.

在二分類問題中,y_i表示滿足\{y_i=1\}1-y_i表示滿足{y_i=0},因此可以寫為:

lnP(y_i|x_i;w)=y_ilnP(y=1|x_i;w)+(1-y_i)ln(1-P(y=1|x_i,w))

兩邊都取指數(shù),可以得到:

P(y_i|x_i;w)=P(y=1|x_i;w)^{y_i}(1-P(y=1|x_i,w))^{1-y_i}

極大似然估計(jì)法

參考:
https://baike.baidu.com/item/%E6%9E%81%E5%A4%A7%E4%BC%BC%E7%84%B6%E4%BC%B0%E8%AE%A1/3350286
https://wenku.baidu.com/view/0d9af6aa172ded630b1cb69a.html

極大似然估計(jì)法(the Principle of Maximum Likelihood )高斯費(fèi)希爾(R.A.Figher)先后提出,是被使用最廣泛的一種參數(shù)估計(jì)方法,該方法建立的依據(jù)是直觀的極大似然原理

重要前提

訓(xùn)練樣本的分布能夠代表樣本的真實(shí)分布(滿足VC邊界),每個(gè)樣本集的樣本都是獨(dú)立同分布(iid)的隨機(jī)變量,且有充分多的訓(xùn)練樣本。

極大似然原理

在一次抽樣中,若得到觀測值 x_1,\cdots,x_n,則選擇\hat \theta(x_1,\cdots,x_n)作為\theta的估計(jì)值。使得當(dāng) \theta=\hat \theta(x_1,\cdots,x_n)時(shí),樣本出現(xiàn)的概率最大。即 利用已知的樣本結(jié)果,反推最有可能(最大概率,可以認(rèn)為實(shí)驗(yàn)一次就出現(xiàn)的結(jié)果概率最大)導(dǎo)致這樣結(jié)果的參數(shù)。

極大似然估計(jì)法(MLE)

若總體 X 為離散型

X 取值的概率分布律為:

P(X=x)=p(x,\theta)

其中,\theta為未知參數(shù),設(shè)(X_1,\cdots,X_n)是取自總體的樣本容量為 n 的樣本,這組樣本的一組觀測值為(x_1,\cdots,x_n),可以得到樣本X_1,\cdots,X_n 取到觀測值x_1,\cdots,x_n的概率為:

L(\theta)=L(x_1,\cdots,x_n;\theta)= \Pi_{i=1}^n p(x_i;\theta)

這一概率隨 \theta的取值而變化,稱L(\theta)為樣本的似然函數(shù)。

若總體X為連續(xù)型

X 的概率密度函數(shù)為f(x;\theta),其中,\theta為未知參數(shù),設(shè)(X_1,\cdots,X_n)是取自總體的樣本容量為 n 的樣本,這組樣本的一組觀測值為(x_1,\cdots,x_n),可以得到樣本X_1,\cdots,X_n 落到點(diǎn)x_1,\cdots,x_n的臨邊(邊長分別為dx_1,\cdots,dx_n的n維立方體)內(nèi)的概率近似為\Pi_{i=1}^n f(x_i;\theta)dx_i,則函數(shù):

L(\theta)=\Pi_{i=1}^n f(x_i;\theta)dx_i

這一概率隨 \theta的取值而變化,稱L(\theta)為樣本的似然函數(shù)。

極大似然估計(jì)值
如果 L(x_1,\cdots,x_n;\hat\theta)=max L(x_1,\cdots,x_n;\theta),則\hat \theta 為參數(shù)\theta的極大似然估計(jì)值。

形式變換

由于 LlnL有相同的極大值點(diǎn),連乘操作很容易由于數(shù)據(jù)量較大導(dǎo)致數(shù)據(jù)溢出,因此可以考慮對(duì)似然函數(shù)求對(duì)數(shù),由原來的乘法操作轉(zhuǎn)換為加法操作。

求解步驟

  1. 寫出似然函數(shù),L(x_1,x_2,\cdots,x_n;\theta_1,\theta_2,\cdots,\theta_k)

  2. 對(duì)似然函數(shù)取對(duì)數(shù),并整理;ln L(x_1,x_2,\cdots,x_n;\theta_1,\theta_2,\cdots,\theta_k)

  3. 對(duì)似然函數(shù)的對(duì)數(shù)對(duì) \theta_1,\theta_2,\cdots,\theta_n求導(dǎo),建立方程組:

    \frac{\partial lnL}{\partial \theta_i}=0,i=1,2,\cdots,k

  4. 求解方程組得到\hat\theta_i(i=1,2,\cdots,k)

類別不平衡

不平衡問題是指分類任務(wù)中不同類別的訓(xùn)練樣本數(shù)目相差很多的情況。

缺少 高階連續(xù)凸函數(shù)、梯度下降法、牛頓法的定義

模型推導(dǎo)

對(duì)數(shù)幾率回歸解決的是二分類問題。對(duì)于二分類問題,其輸出標(biāo)記為 y \in \{0,1\}

線性回歸模型產(chǎn)生的預(yù)測值為實(shí)值,因此,將實(shí)值轉(zhuǎn)換為 0/1 值即可通過線性回歸實(shí)現(xiàn)對(duì)數(shù)幾率回歸。

最理想的轉(zhuǎn)換方法為"單位階躍函數(shù)",即:預(yù)測值大于 0 則取 1 ,預(yù)測值小于 0 則 取 0,預(yù)測值等于 0 可以任意判別。

![屏幕快照 2018-09-08 下午8.32.20.png](https://upload-images.jianshu.io/upload_images/3735998-8837149850838f27.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

但是由于“單位階躍函數(shù)”不連續(xù),因此選擇近似“單位階躍函數(shù)”的對(duì)數(shù)幾率函數(shù)進(jìn)行“替代”,對(duì)數(shù)幾率函數(shù)連續(xù)并且單調(diào)可微,其表達(dá)式為:

y=\frac{1}{1+e^{-z}} \tag{1.1}

z=w^Tx+b代入,可以得到:

y=\frac{1}{1+e^{-(w^Tx+b)}} \tag{1.2}

式(1.2)可以整理為:

ln \frac{y}{1-y}=w^T+b \tag{1.3}

式(1.3)即為對(duì)數(shù)幾率回歸模型,其中,\frac{y}{1-y}稱為“幾率”,其中,y表示樣本x作為正例的可能性,1-y表示樣本 x 作為反例的可能性。對(duì)“幾率”取對(duì)數(shù),稱為“對(duì)數(shù)幾率”(log odds,也稱作 logit ),即式(1.3)等號(hào)左側(cè)的部分。

因此,式(1.3)中可以看做使用線性回歸模型的預(yù)測結(jié)果逼近真實(shí)標(biāo)記的“對(duì)數(shù)幾率”。

由于式(1.3) y 表示樣本 x 作為正例的可能性,1-y 表示樣本 x 作為反例的可能性。如果將 y 看做后驗(yàn)概率估計(jì) P(y=1|x),則有:

ln \frac{P(y=1|x)}{P(y=0|x)}=w^T+b \tag{1.4}

為了便于討論,另\beta=(w;b)\hat x=(x;1),那么,w^Tx+b = \beta^T \hat x,結(jié)合 p(y=1|\hat x)+p(y=0|\hat x)=1,我們可以得到:

P(y=1|x)=\frac{e^{\beta^T\hat x}}{1+e^{\beta^T\hat x}} \tag{1.5}

P(y=0|x)=\frac{1}{1+e^{\beta^T\hat x}} \tag{1.6}

這里我們采用“極大似然法”來估計(jì)\beta值。

給定數(shù)據(jù)集 {(x_i,y_i)}_{i=1}^m,我們的目標(biāo)是最大化“對(duì)數(shù)似然”:

l(\beta)=lnL(\beta)=ln \Pi_{i=1}^n p(y_i| x_i;\beta)=\sum_{i=1}^n ln p(y_i| x_i;\beta) \tag{1.7}

即令每一個(gè)樣本屬于真實(shí)樣本的概率越大越好。

式(1.7)可以進(jìn)一步寫為:

\begin{split}l(\beta)&=\sum_{i=1}^nlnp(y_i|x_i;\beta)\\&=\sum_{i=1}^n\{y_iln[P(y=1|x_i;\beta)]+(1-y_i)ln[1-p(y=1|x_i;\beta)]\} \\&=\sum_{i=1}^n\{y_i\{ln[p(y=1|x_i;\beta)]-ln[1-p(y=1|x_i;\beta)]\}+ln[1-p(y=1|x_i;\beta)]\}\\&=\sum_{i=1}^n\{y_iln\frac{p(y=1|x_i;\beta)}{1-p(y=1|x_i;\beta)} +ln[1-p(y=1|x_i;\beta)]\}\\&=\sum_{i=1}^n\{y_iln(e^{\beta^T\hat x})+ln\frac{1}{1+e^{\beta^T\hat x}}\}\\&=\sum_{i=1}^n\{y_i\beta^T\hat x-ln(1+e^{\beta^T\hat x}) \}\end{split}\tag{1.8}

因此,我們的目標(biāo)可以寫為:

\beta^*=argmax [l(\beta)] = argmin [-l(\beta)] = argmin[\sum_{i=1}^N(-y_i\beta^T\hat x+ln(1+e^{\beta^T\hat x}))]\tag{1.9}

式(1.9)即為對(duì)數(shù)幾率回歸的目標(biāo)函數(shù),我們對(duì)該目標(biāo)函數(shù)進(jìn)行求解即可得到最優(yōu)參數(shù)。

由于式(1.9)是關(guān)于 \beta 的高階可導(dǎo)連續(xù)凸函數(shù),根據(jù)凸優(yōu)化理論,經(jīng)典的數(shù)值優(yōu)化算法如梯度下降法,牛頓法都可以對(duì)其進(jìn)行求導(dǎo)。

softmax 回歸

來源:http://deeplearning.stanford.edu/wiki/index.php/Softmax%E5%9B%9E%E5%BD%92

參考:https://www.cnblogs.com/Deep-Learning/p/7073744.html

logistic回歸模型 softmax回歸模型
解決問題 二分類問題 多分類問題
類別 y^{(i)}\in{\{0,1\}} y^{(i)}\in{\{1,2,...,k\}} 注意:從1開始

logistic回歸模型是 softmax回歸模型 k=2 的特例。

對(duì)于給定的測試輸入 x,假設(shè)函數(shù)針對(duì)每個(gè)類別 j 估算的概率為 p(y=j|x)。即 我們假設(shè) 函數(shù)輸出一個(gè) k 維向量(和為 1 ) 表示這 k 個(gè)估計(jì)的概率。用公式表示為:

屏幕快照 2018-09-08 下午8.32.20.png

其中,\theta_1, \theta_2 ,..., \theta_k \in \mathtt{R}^{n+1}\frac{1}{\sum_{j=1}^{k}e^{\theta_{j=1}^T}x^{(i)}}為歸一化系數(shù)。

softmax的代價(jià)函數(shù)為:

屏幕快照 2018-09-08 下午8.43.25.png

其中:

屏幕快照 2018-09-08 下午8.46.32.png

該代價(jià)的函數(shù)的特點(diǎn)為有一個(gè)"冗余"的數(shù)據(jù)集,為了解決 softmax 回歸參數(shù)冗余帶來的數(shù)值問題,我們添加一個(gè)權(quán)重衰減項(xiàng)目 \frac{\lambda}{2}\sum_{i=1}^{k}\sum_{j=1}^n\theta_{ij}^2來修改代價(jià)函數(shù),這個(gè)衰減項(xiàng)可以懲罰過大的參數(shù),現(xiàn)在代價(jià)函數(shù)變?yōu)椋?/p>

屏幕快照 2018-09-08 下午8.54.37.png

對(duì)于\J(\theta)的最小化問題,目前還沒有閉式解法。因此,使用迭代的優(yōu)化算法(例如梯度下降法,或 L-BFGS)。經(jīng)過求導(dǎo),可以得到梯度公式如下:

屏幕快照 2018-09-08 下午8.55.29.png

softmax 回歸 vs k個(gè)二元分類器

如果類別之間相互排斥,使用 softmax 回歸。

如果類別之間并不相互排斥,使用 k 個(gè)二元分類器。

類別不平衡的基本處理方法

基本策略--再縮放:

\frac{y^{'}}{1-y^{'}}=\frac{y}{1-y}*\frac{m^-}{m^+}

這里的 m^+ 表示訓(xùn)練集的正例數(shù)量,m^-表示訓(xùn)練集的反例數(shù)量,\frac{m^-}{m^+}表示觀測幾率。

但是我們從訓(xùn)練集的觀測幾率推斷真實(shí)幾率,現(xiàn)在技術(shù)上大體有三類做法:

  1. 直接對(duì)訓(xùn)練集里的反類樣例進(jìn)行“欠采樣”,即去除一些反例使正、反例數(shù)目接近,再學(xué)習(xí);代表算法 EasyEnsemble;
  2. 對(duì)訓(xùn)練集里的正類樣例進(jìn)行‘過采樣’,即增加一些正例使正、反例數(shù)目接近,再學(xué)習(xí);代表算法 SMOTE;
  3. 直接基于原始訓(xùn)練集進(jìn)行學(xué)習(xí),在用訓(xùn)練好的分類器進(jìn)行預(yù)測時(shí),將再縮放公式嵌入決策過程,稱為“閾值移動(dòng)”

sklearn 相關(guān)參數(shù)

原文:http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression

sklearn.linear_model.LogisticRegression

Logistic Regression(又稱為 logit, MaxEnt) 分類器。

對(duì)于多分類的情況,如果 “multi_class” 選項(xiàng)設(shè)置為‘ovr’,訓(xùn)練算法將使用 one-vs-rest(OvR)策略;如果 “multi_class” 選項(xiàng)設(shè)為 ‘multinormial’,則使用交叉熵?fù)p失(cross-entropy loss)(目前,只有‘lbfgs’、'sag' 和 'newton-cg' 算法支持“multinormial”)。

這個(gè)類使用 'liblinear' 庫、'newton-cg' 、‘lbfgs’、'sag' 求解器實(shí)現(xiàn)了正則化 logistic 回歸。既可以處理密集輸入也可以處理稀疏輸入。程序使用 64 位浮點(diǎn)型 C-ordered 序列或 CSR 矩陣以獲得最佳性能,任何其他格式的輸入都將轉(zhuǎn)化為這種格式(并復(fù)制)。

'newton-cg' 、‘lbfgs’、'sag' 求解器只支持原始公式的 L2 正則化。 'liblinear' 求解器支持 L1 和 L2 正則化,并且只為 L2 懲罰提供對(duì)偶公式的求解。

更多內(nèi)容見 用戶指南

參數(shù) 意義 備注
penalty str,'l1' 或'l2'
用于指定正則化函數(shù),'newton-cg' 、‘lbfgs’、'sag' 僅支持 l2
0.19版本新增加了支持 l1 懲罰的SAGA 求解器
dual bool,默認(rèn) False
對(duì)偶或原始公式。對(duì)偶公式只用于使用 liblinear 求解器的 l2 懲罰。
當(dāng)n_samples>n_features (樣本較多)時(shí)最好設(shè)置 dual = False
tol float,默認(rèn) 1e-4
停止迭代的最小誤差。
C float,默認(rèn) 1.0
正則項(xiàng)系數(shù)的倒數(shù),與支持向量機(jī)相似,值越小正則化影響越大。
必須為正浮點(diǎn)數(shù)
fit_intercept bool,默認(rèn) True
決策函數(shù)是否需要添加常數(shù)( 偏差或截距)。
intercept_scaling float,默認(rèn) 1
只有使用 liblinear 算法并且 fit_intercept 設(shè)為True 時(shí)才有用,在這種情況下,x變?yōu)閇x,self.intercept_scaling],即將值為 intercept_scaling 的“合成”特性添加到實(shí)例向量中,截距變?yōu)?intercept_scaling*synthetic_feature_weight。
合成特性權(quán)重與其它特性一樣受 l1/l2 正則化影響。為了減少正則化對(duì)合成特性權(quán)重(以及截距)的影響,需要增大intercept_scaling。
class_weight dict 或者 'balanced',默認(rèn)為 None。
{class_label:weight}格式的類別權(quán)重。如果沒有給定,所有類別的權(quán)重都為1。
"balanced"模式使用 y 值自動(dòng)校正權(quán)重,使其為輸入數(shù)據(jù)出現(xiàn)頻率的倒數(shù),即 n_samples/(n_classes * np.bincount(y))。
如果指定了 sample_weight 則這些權(quán)重將與 sample_weight 相乘。
random_state int, RandomState 實(shí)例或 None,可選,默認(rèn):None
偽隨機(jī)數(shù)發(fā)生器打亂數(shù)據(jù)時(shí)使用的種子(seed) 。如果為 int,random_state 表示隨機(jī)數(shù)發(fā)生器的 seed 。如果為 RandomState 實(shí)例,random_state 表示隨機(jī)數(shù)發(fā)生器。如果為 None,則使用 np.random 使用的RandomState 實(shí)例作為隨機(jī)數(shù)發(fā)生器。
用于 solver 為”sag“或 ”liblinear“的情況。
solver str , {‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’}默認(rèn):'liblinear'
求解優(yōu)化問題使用的算法。
小數(shù)據(jù)集使用”liblinear“是個(gè)不錯(cuò)的選擇,但是”sag“和”saga“對(duì)于較大的數(shù)據(jù)集速度更快
多分類問題只能使用”newton-cg“,"sag","saga"和”lbfgs“處理多分類損失,”liblinear“限于 one-versus-rest方案。
"newton-cg","lbfgs"和”seg"只支持 L2 正則,“l(fā)iblinear"和”saga“只支持 L1正則。
"sag"和"saga"快速卷積只有在特征規(guī)模大致相同時(shí)才能保證快速收斂。 可以使用sklearn.preprocessing的縮放器對(duì)數(shù)據(jù)進(jìn)行預(yù)處理。
max_iter int,默認(rèn) 100
只用于 newton-cg 、sag 和 lbfgs 算法。用于算法收斂的最大迭代次數(shù)。
multi_class str,{‘ovr’, ‘multinomial’,'auto'},默認(rèn): ‘ovr’
如果選擇'ovr',將對(duì)每個(gè)標(biāo)簽進(jìn)行二分類擬合。對(duì)于‘multinomial’,最小化損失為擬合整體概率分布的多分類損失(即使數(shù)據(jù)為二分類)。liblinear 算法不能使用 ‘multinomial’。
設(shè)置為'auth'時(shí),如果數(shù)據(jù)為二分類或者 solver='liblinear',選擇"ovr",其它情況使用’multinomial'
verbose int,默認(rèn):0
將 verbose 設(shè)置為正數(shù)來表示 liblinear 和 lbfgs 的冗余。
warm_start bool,默認(rèn) False
設(shè)置為 True 時(shí),使用上一次調(diào)用的解來作為擬合的初始值,否則,只釋放上次的解決方案。這項(xiàng)設(shè)置對(duì) liblinear 算法不起作用。
n_jobs int,默認(rèn) 1。
如果 multi_class='ovr'時(shí)并行計(jì)算類別時(shí)使用的處理器數(shù)量 。如果“solver"設(shè)置為 ”liblinear“,則無論是否設(shè)置了”multi_class“,這個(gè)參數(shù)都將被忽略。
除了 joblib.parallel_backend 之外 None 表示 1,如果值為 -1,則使用所有的處理器。詳細(xì)內(nèi)容見Glossary.

屬性:

屬性 意義 備注
coef_ array,格式:(1,n_features) 或(n_classes,n_features)
決策函數(shù)中特征的系數(shù),二分類問題的 coef_ 格式為 (1,n_features)
intercept_ array,格式:(1,) 或(n_classes,)
決策函數(shù)的截距,如果 fit_intercept 設(shè)置為 False,截距為 0,二分類問題的 intercept_ 格式為(1,)
n_iter_ array,格式:(n_classes,)或 (1,)
所有類的實(shí)際迭代次數(shù)。對(duì)于二分類或多分類,只返回1個(gè)元素。 liblinear算法只返回所有類的迭代值的最大值。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • https://developers.google.com/machine-learning/crash-cour...
    iOSDevLog閱讀 2,689評(píng)論 1 11
  • ?六分一刻,醒的早。洗刷完畢,已經(jīng)整裝待發(fā),打開窗口,天陰有微風(fēng),跑步很不錯(cuò),回來吃個(gè)早餐洗個(gè)澡,然后去逛。然而,...
    長卿Aaron閱讀 159評(píng)論 0 0
  • 一 “你能聽說我?guī)拙湓拞幔烤蛶拙渚托小薄K粗鴷謾C(jī)屏幕亮起這樣一行字。 她合上書便回了過去,“怎么了?說來聽...
    魚念柒月閱讀 434評(píng)論 0 3
  • 我的臉上每天都會(huì)產(chǎn)生很多種表情,每一個(gè)表情背后都有不同感受,也代表著不同的心情。 ...
    吳卓逸閱讀 424評(píng)論 0 1
  • 你有你的向往, 我有我的信仰。 愛過,笑過,痛過, 傷過,碎過,路過。 你來、不增不減, 你走、不卑不泣。
    風(fēng)過如初閱讀 223評(píng)論 0 0