邏輯斯蒂回歸(logistic regression,又稱“對數幾率回歸”)是經典的分類方法。雖然名字中包含回歸,但它被用來分類。
邏輯斯蒂分布
設 \(X\) 是隨機變量,\(X\) 服從邏輯斯蒂分布是指 \(X\) 的概率分布函數 \(F(x)\) 和概率密度函數 \(f(x)\) 為:
\[F(x) = P(X \le x) = \frac{1}{1+e^{-(x-\mu)/ \gamma}} \]
\[f(x) = F'(x) = \frac{e^{-(x-\mu)/ \gamma}}{\gamma(1+e^{-(x-\mu)/\gamma})^2} \]
其中,\(\mu\) 是位置參數,\(\gamma > 0\) 是形狀參數。密度函數 \(f(x)\) 和分布函數 \(F(x)\) 的圖形如下所示:

可以看到,分布函數 $F(x)$ 是一條 S 型曲線,該曲線在兩邊增長較緩,而中心增長較快。$\mu$ 控制着曲線的位置,$F(x)$ 關於 $(\mu, \frac{1}{2})$ 中心對稱,而 $\gamma$ 則控制曲線的形狀,$\gamma$ 越小,曲線在中心附近增長的越快。 ## 二項邏輯斯蒂回歸模型 **二項邏輯斯蒂回歸(binomial logistic regression model)**是一種**分類**模型,二項代表該模型被用來進行二類分類。二項邏輯斯蒂回歸由條件概率 $P(Y|X)$ 表示,其中隨機變量 $X$ 的取值為實數,隨機變量 $Y$ 的取值為 0 或 1 。通過訓練數據(監督學習)來估計模型的參數,從而確定模型。 ### 二項邏輯斯蒂回歸的定義 二項邏輯斯蒂回歸是如下的條件概率分布:
\[P(Y=1|X) = \frac{exp(w \cdot x +b)}{1+exp(w \cdot x +b)} \tag{1} \]
\[P(Y=0|X) = \frac{1}{1+exp(w \cdot x + b)} \tag{2} \]
其中, \(x \in \mathbb{R}^n\) 是一個 n 維向量,為輸入,\(w \in \mathbb{R}^n\) 和 \(b \in \mathbb{R}\) 為參數,\(w\) 被稱為權值向量, \(b\) 被稱為偏置,\(w \cdot x\) 為兩者的內積。
對於給定的輸入實例 \(x\), 可以根據(1)(2)兩式計算出兩個概率 \(P(Y=1|X)\) 和 \(P(Y=0|X)\),比較兩個概率的大小,將實例 \(x\) 分到概率較大的那一類。
有時,為了方便,可以對 \(w\) 和 \(x\) 進行擴充,擴充后 \(w= (w^1,w^2,...,w^n,b)\),\(x=(x^1,x^2,...,x^n,1)\),這樣\(w \cdot x\) 就相當於擴充前的 \(w \cdot x+ b\),所以式(1)(2)可以改寫為:
\[P(Y=1|X) = \frac{exp(w \cdot x)}{1+exp(w \cdot x)} \tag{3} \]
\[P(Y=0|X) = \frac{1}{1+exp(w \cdot x )} \tag{4} \]
可以看到,當線性函數 \(w \cdot x\) 的值越接近於正無窮,概率值就越接近於 1 ;線性函數值越接近於負無窮,概率就越接近於 0 ,這與前面 \(F(x)\) 的圖像一致,所以該模型就是邏輯斯蒂回歸模型。
模型的參數估計
給定訓練集 \(T=\{(x_1,y_1),(x_2,y_2),...,(x_n,y_n)\}\),其中\(x_i \in \mathbb{R}^n\),\(y_i \in \{0,1\}\),可以使用極大似然估計法來估計模型的參數 \(w\),從而得到邏輯斯蒂回歸模型。步驟如下:
假設:
\[P(Y=1|x)=\pi(x), \quad P(Y=0|x)=1-\pi(x) \]
似然函數為:
\[\prod_{i=1}^N[\pi(x_i)]^{y_i}[1-\pi(x_i)]^{1-y_i} \]
對數似然函數為:

對 $L(w)$ 求極大值,就得到了 $w$ 的估計值。 這樣,問題就變成了求以對數似然函數為目標函數的最優化問題,邏輯斯蒂回歸學習通常使用梯度下降法和擬牛頓法。 假設估計的參數值為 $\hat w$,則學到的二項邏輯斯蒂回歸模型為:
\[P(Y=1|X) = \frac{exp(\hat w \cdot x)}{1+exp(\hat w \cdot x)} \]
\[P(Y=0|X) = \frac{1}{1+exp(\hat w \cdot x )} \]
多項邏輯斯蒂回歸
可以將二項邏輯斯蒂回歸推廣到多項邏輯斯蒂回歸。假設隨機變量 \(Y\) 的取值集合為 \(\{0, 1, ..., K\}\),則多項邏輯斯蒂回歸的模型就是:

其中,$x \in \mathbb{R}^{n+1}$,$w_k \in \mathbb{R}^{n+1}$。 同樣可以使用極大似然估計來估計模型中的參數。 ## 邏輯斯蒂回歸的實現 這里使用python庫`scikit-learn`來實現邏輯斯蒂回歸,使用的方法為`sklearn.linear_model.SGDClassifier`,該方法使用梯度下降來實現邏輯斯蒂回歸,函數的使用方法和參數含義可以參考[文檔](http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier)。 訓練數據如下: ``` 1,0,0,1,0 1,0,0,2,0 1,1,0,2,1 1,1,1,1,1 1,0,0,1,0 2,0,0,1,0 2,1,1,2,0 2,1,1,2,1 2,0,1,3,1 2,0,1,3,1 3,0,1,3,1 3,0,1,2,1 3,1,0,2,1 3,1,0,3,1 3,0,0,1,0 ``` 數據來自貸款信息,每一行代表一個實例(貸款人)。數據共分為5列,前4列為屬性值,分別是年齡(1青年,2中年,3老年)、是否有房子(0沒房子,1有房子)、是否有工作(0沒工作,1有工作)和信用值(1,2,3分別是信用一般,好,非常好),最后一列為類別(0代表沒有貸款資格,1代表有貸款資格)。目標是訓練出一個邏輯斯蒂回歸模型,輸入新的實例,判斷該實例是否有貸款資格。將上面的數據保存到`data.txt`,代碼如下: ```python import numpy as np import pandas as pd from sklearn import linear_model
df = pd.read_csv("D:\data.txt", header=None)
屬性值
xdata = df.loc[:,:3]
類別
ydata = df.loc[:,4]
clf = linear_model.SGDClassifier(loss="log", max_iter=1000) #log代表logistic
clf.fit(xdata, ydata)
青年人、沒工作、有房子、信用好
clf.predict(np.array([1,0,1,1]).reshape(1,-1))
輸出:
array([0], dtype=int64)
`0`代表該申請人沒有貸款資格。
除了這個方法外,還可以使用[sklearn.linear_model.LogisticRegression](http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html)以及[sklearn.linear_model.LogisticRegressionCV](http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegressionCV.html#sklearn.linear_model.LogisticRegressionCV)來實現邏輯斯蒂回歸。
## 總結
邏輯斯蒂回歸模型是一種經典的分類模型,它根據條件概率的取值來對實例進行分類。可以使用極大似然估計來估計模型中的參數 $w$ 。
## 參考
1、李航《統計學習方法》