Python機器學習/LogisticRegression(邏輯回歸模型)(附源碼)


LogisticRegression(邏輯回歸)

 

邏輯回歸雖然名稱上帶回歸,但實際上它屬於監督學習中的分類算法。

1.算法基礎

LogisticRegression基本架構源自於Adline算法,只是在激勵函數的選擇上有所不同,Adline算法使用恆等函數作為激勵函數,而Logistic選用sigmoid函數作為激勵函數。

LogisticRegression算法的數學基礎是兩個函數:1)logit函數,2)極大似然函數;通過這兩個函數構建了LR算法的基本框架。

1.1 logit函數

在概率問題中,有個比較重要的指標,機率比 :

$\frac{p}{1-p}\\$

p代表二分類問題中正事件發生的概率。

在機率比的基礎上延申出logit函數:

$logit(p) = log(\frac{p}{1-p})\\$

這里可以看出,p作為正事件發生的概率,取值范圍為[0,1],logit(p)的取值范圍是負無窮到正無窮。

將logit(p)與凈輸入值z關聯,p作為數據數據正的概率,那么便有如下過程。

$logit(p) = z\\$

$log(\frac{p}{1-p})=z\\$

$\frac{p}{1-p} = e^{z}\\$

$\therefore p = \frac{1}{1+e^{-z}}\\$

$\frac{1}{1+e^{-z}}$被稱為sigmod函數,這也就是為什么LR算法中采用sigmod函數作為激勵函數的原因。

 1.2極大似然函數

極大似然是概率論中估計值的一種,用於數據相互獨立情況下最大概率出現的情況:

$L(w) = p(y|x;w) = \prod_{i=1}^{n}p(y^{(i)}|x^{(i)};w)\\$

$= \prod_{i=1}^{n}(\phi(z^{(i)}))^{y^{(i)}}(1-\phi(z^{(i)}))^{(1-y^{(i)})}\\$

對極大似然函數做對數處理會得到下面的公式:

$l(w) = \sum_{i=1}^{n} log(\phi(z^{(i)}))+(1-y^{(i)})log(1-\phi(z^{(i)}))\\$

將這個l(w)取負數得到的就是LR算法的損失函數。

 

2.算法框架

2.1凈輸入函數

 $z = w_{0}x_{0} + w_{1}x_{1} + ··· +w_{n}x_{n}={\sum_{j=0}^{n}}w_{j}x_{j}=w^{T}x\\$

其中x0的值為1,用來和函數的偏移量相乘;在實際程序中可以使用兩種方式實現凈輸入函數:

1)在訓練數據X中添加值全部為1的列,作為偏移量的乘子;

2)將參數W中的偏移量w0單獨提出來另算

用python實現,這里使用第二種方式

#凈輸入函數
def net_input(x,w):
    return np.dot(x,w[1:]) + w[0]

2.2激勵函數

Logistic Regression與Adline算法的區別在於激勵函數,Adline算法的激勵函數是恆等函數,Logistic函數的激勵函數時sigmoid函數。

$\phi (z) = \frac{1}{1+e^{-z}}\\$

2.3量化器

$ y=\left\{\begin{matrix}
1,\phi(z)\geq 0.5\\ 
-1,\phi(z)< 0.5
\end{matrix}\right. $

 使用python實現量化器:

#量化器
def quantization(z):
    return np.where(z >= 0.5,1,-1)

 

3.損失函數

Logistic Regression算法的損失函數是由最大似然函數推導出來的,代價函數J的公式如下:

$J(w) = \sum_{i}^{n} -log(\phi(z^{(i)}))-(1-y^{(i)})log(1-\phi(z^{(i)})\\$

推導過程如下:

根據1.2節中的內容可知,最大似然函數為:

$L(w) = p(y|x;w) = \prod_{i=1}^{n}p(y^{(i)}|x^{(i)};w) = \prod_{i=1}^{n}(\phi(z^{(i)}))^{y^{(i)}}(1-\phi(z^{(i)}))^{(1-y^{(i)})}\\$

通過對極大似然函數做對數處理,得到

$l(w) = \sum_{i=1}^{n} log(\phi(z^{(i)}))+(1-y^{(i)})log(1-\phi(z^{(i)}))\\$

將極大似然函數對數取負,即是LogsticRegression的損失函數。

而我們的目標函數即最小化這個損失函數,即:

$min(l(w))\\$

 

4.優化算法

 LR中的優化算法采用的是梯度下降法

$w:=w+\Delta w\\$

$\Delta w_{j} = -\eta \frac{\partial J}{\partial w_{j}} = \eta \sum_{i=1}^{n}(y^{(i)}-\phi(z^{(i)}))x_{j}^{(i)}\\$

 

5.正則化解決過擬合的問題

5.1正則化

過擬合是指一種現象:在訓練集上表現良好,但在測試集上卻性能不佳;一般導致過擬合的原因是因為算法過度擬合訓練集上的數據,導致失去了泛化特性。

正則化是解決特征之間共線性(特征相關度高)的一個很有效的技術手段,它可以過濾掉數據中的噪聲,最終防止過擬合。

最常用的正則化形式為L2正則化,可以寫作:

$\frac{\lambda }{2}\sum_{j=1}^{m}w_{j}^{2}\\$

5.2正則化使用

一般是在代價函數中加上正則化函數,例如LogisticRegression算法中加入正則化后的代價函數為:

$J(w) = [\sum_{i}^{n} -log(\phi(z^{(i)}))-(1-y^{(i)})log(1-\phi(z^{(i)})]+\frac{\lambda }{2}\sum_{j=1}^{m}w_{j}^{2}$

在scikit-learn庫中的LogisticRegression類的參數中,有個參數C,這個C表示的是正則化系數的倒數,即:

$C=\frac{1}{\lambda }$

 

6.使用scikit-learn庫中的LogisticRegression類實現鳶尾花進行分類

源代碼地址如下:

github地址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM