1. 程式人生 > >ML模型2:邏輯迴歸

ML模型2:邏輯迴歸

一些迴歸演算法可以用來處理分類問題,以及一些分類演算法可以進行迴歸預測,邏輯迴歸就屬於前者。邏輯迴歸一般通過估計一個概率值,來表示一個樣本屬於某一類的概率。假如一個樣本屬於某一類的概率大於50%,那麼就判該樣本屬於這一類。

優點:計算代價不高,易於理解和實現。

缺點:容易欠擬合,分類精度可能不高。

1. 實現分類

邏輯迴歸對樣本概率的估計類似線性迴歸,也是計算出樣本的一系列權重,然後將該權重線性加和之後輸入到sigmoid函式中,進而計算出一個概率值。 p^=hθ(x)=σ(θTx)=σ(xθ) \hat{p}=h_{\theta}(x)=\sigma(\theta^T \cdot x)=\sigma(x\theta)

其中 θ\theta 即為權重,σ\sigma 即為sigmoid函式,如下: σ(t)=11+et \sigma(t)=\frac{1}{1+e^{-t}} sigmoid函式圖象: image sigmoid函式將 θTx\theta^Tx 的值域從 R\bf{R} 對映到 (0, 1),從而表示發生事件的概率值,所以我們可以根據計算出來的概率值來進行對樣本進行分類: y^={0p^<0.5,1p^0.5. \hat{y}=\begin{cases}0 \quad \hat{p}<0.5,\\1 \quad \hat{p}\geq 0.5.\end{cases}

2. 損失函式

我們既然是通過sigmoid函式的值來進行概率預測的,那麼我們的目標就應該是找出一組權重引數θ,能夠對於正樣本使得sigmoid函式有一個高的輸出值,而對於負樣本有一個低的輸出。 我們可以通過計算損失函式來逐步達到這一的目標。對於單個樣本來說,損失函式如下公式。與線性迴歸的平方誤差不同,此處使用的是對數損失(Q1. 為什麼?): c(θ)={log(p^)y=1,log(1p^)y=0. c(\theta)=\begin{cases}-\log(\hat{p}) \quad\quad\ \ \ y=1,\\-\log(1-\hat{p}) \quad y=0.\end{cases}

對整個資料集損失函式如下: J(θ)=1mi=1m[y(i)log(p^(i))+(1y(i))log(1p^(i))] J(\theta)=-\frac{1}{m}\sum_{i=1}^{m}[y^{(i)}\log(\hat{p}^{(i)})+(1-y^{(i)})log(1-\hat{p}^{(i)})] 對以上損失函式並不像最小二乘法般有封閉解,但由於函式是凸函式,可以使用梯度下降的方法尋找最優值。

3. 極大似然估計

概率公式 hθ(x)h_{\theta}(x) 上面已經給出,對任意一個樣本有 {P(y=1x;θ)=hθ(x)P(y=0x;θ)=1hθ(x) \begin{cases}P(y=1|x;\theta)=h_{\theta}(x)\\ P(y=0|x;\theta)=1-h_{\theta}(x)\end{cases} 對以上公式整合得: P(yx;θ)=hθ(x)y(1hθ(x))1yP(y|x;\theta)=h_{\theta}(x)^y(1-h_{\theta}(x))^{1-y} 對所有樣本,發生的概率為 L(θ)=i=1mP(y(i)x(i);θ)=i=1mhθ(x(i))y(i)(1hθ(x(i)))1y(i) L(\theta) =\prod_{i=1}^{m} P(y^{(i)}|x^{(i)};\theta) =\prod_{i=1}^{m} h_{\theta}(x^{(i)})^{y^{(i)}}(1-h_{\theta}(x^{(i)}))^{1-y^{(i)}} 對數似然 l(θ)=logL(θ)=i=1m(y(i)loghθ(x(i))+(1y(i))log(1hθ(x(i))) l(\theta)=\log L(\theta) =\sum_{i=1}^{m} (y^{(i)} \log h_{\theta}(x^{(i)})+(1-y^{(i)}) \log (1-h_{\theta}(x^{(i)})) 引入 J(θ)=1ml(θ)J(\theta)=-\frac{1}{m}l(\theta) 作為損失函式,與上面得到的損失函式一致。 下面使用梯度下降求解。

4. 梯度下降求解

雖然損失函式看起來複雜,但得益於sigmoid函式,是其梯度計算後結果十分簡單。 不難證明,對sigmoid函式求導得: σ(t)=σ(t)(1σ(t))\sigma'(t)=\sigma(t)(1-\sigma(t))J(θ)J(\theta) 求梯度,得: 在這裡插入圖片描述 引數更新: θj:=θjα1mi=1m(hθ(x(i))y(i))xj(i) \theta_j:=\theta_j-\alpha\frac{1}{m} \sum_{i=1}^{m} (h_{\theta}(x^{(i)})-y^{(i)})x_j^{(i)} 向量化表示: θ:=θα1mxT(11+exθy) \theta:=\theta-\alpha\frac{1}{m} x^T(\frac{1}{1+e^{-x\theta}}-y)

5. 多分類問題softmax

softmax其實是Logistic的推廣到多類別分類應用中,不需建立多個二分類分類器來實現多類別分類。softmax分類器的思想很簡單,對於一個新的樣本,softmax迴歸模型對於每一類都先計算出一個分數,然後通過softmax函式得出一個概率值,根據最終的概率值來確定屬於哪一類。

通過下公式來計算並歸一化之後就是輸出的概率值: p^k=σ(θkTx)=exp(θkTx)j=1Kexp(θjTx) \hat{p}_k=\sigma(\theta_k^Tx)=\frac{\exp(\theta_k^Tx)}{\sum_{j=1}^K\exp(\theta_j^Tx)} 計算出每一個分類的概率值後,從得到的各個概率值中選擇最大的一個概率類別,即為預測類別 y^=argmax(p^k)\hat{y}=argmax(\hat{p}_k)

類似邏輯迴歸,我們可以通過損失函式求得最優解: J(Θ)=1mi=1mk=1Kyk(i)log(exp(θkTx(i))j=1Kexp(θjTx(i)))) J(\Theta)=-\frac{1}{m}\sum_{i=1}^{m}\sum_{k=1}^{K} y_k^{(i)}\log{(\frac{\exp(\theta_k^Tx^{(i)})}{\sum_{j=1}^K\exp(\theta_j^Tx^{(i)}))}})