機器學習(Coursera)(三、邏輯迴歸)

機器學習(Coursera)(三、邏輯迴歸)

標籤(空格分隔): 機器學習 邏輯迴歸


邏輯迴歸

分類問題

例如腫瘤診斷,電子郵件分類,是否存在欺詐等問題中,應用的是分類的特性。嘗試預測某一個樣本應該分在哪一類裏。

將因變量分爲正向類1(positive)和負向類0(negative),則因變量y{0,1}
因此腫瘤二分類可以用y=0 or 1 表示良性和惡性。
1腫瘤分類.png-182kB

分類問題不能用線性迴歸,因爲線性迴歸存在當x輸入較大y也就很大的問題。並且如圖如果有一個樣本點在很右側,那麼線性迴歸就會收到很大的影響,導致誤差很大。
這時候就需要一個類似階梯函數的假設函數來進行分類,也就是邏輯迴歸。適用於標籤y爲離散點的情況。

假說表示

分類中只需要輸出0/1,不需要預測連續的值,所以:
2假設函數表示.png-14.2kB

引入一個新的模型hθ(x)=g(θTX) ,其中X 表示特徵向量,g 表示邏輯函數(logistic function)通常用sigmoid函數
g(z)=11+ez
3sigmoid.png-48.7kB

hθ(x) 的作用是對於給定的輸入變量,根據選擇的參數計算輸出變量=1的可能性(estimated probablity),即hθ(x)=P(y=1|x;θ)
給定樣本X,計算hθ(x) 對應爲上述的概率。

判定邊界

決策邊界(decision boundary)。
4決策邊界.png-104kB

5決策邊界2.png-298.9kB

決策邊界,就是我們學習後得到的分類的一條邊界線或這超平面。使這個超平面可以通過我們的樣本特徵進行劃線分類。

代價函數cost function

邏輯迴歸的代價函數和線性迴歸的代價函數不相同。如果按照線性迴歸的代價函數那麼會導致costfunction非凸。所以要重新定義。

J(θ)=1mi=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]

這樣構建的特點:當實際y=1時且hθ(x) 也爲1時,誤差爲0,當hθ(x) 爲0時誤差很大代價很大。當y=0時類似。

6logistic分開cost.png-32.7kB
也就是在不同的實際分類下,選取不同的函數,但是寫爲同一個函數。

有了代價函數後,就可以用梯度下降法求是代價函數最小的參數了。同樣也是對參數θ 求偏導。
7logistic梯度下降.png-35.6kB

推導過程:

8推導過程.png-123.3kB

得到的結果,與線性迴歸很相似。但是由於假設函數h不同導致推到過程完全不同,意義也不同。

多分類

分爲一對多進行。在分某一類時,把其他多個類看爲一類,這樣就簡化成了多個二分類,得到了多個假設函數hθ(i)(x)=p(y=i|x,θ) 。當使用分類時,需要對多個假設函數分別計算對應概率,然後取概率最高的那個分類。

正則化

過擬合問題

什麼是過擬合(overfit)和欠擬合(underfit)?
如果我們有很多的特徵,我們通過學習可以對訓練樣本有很好的擬合,但是可能不會推廣到新的數據。
欠擬合:不能很好的適應我們的訓練集。
過擬合:過分強調描述訓練集的特徵,而丟失了算法的本質,不能預測新數據。
在多項式中x次數越高,對訓練集擬合的越好,但相應的預測能力可能就變差了。

正則化函數

預測假設函數(模型):hθ(x)=θ0+θ1x1+θ2x2+θ3x32+θ4x42
這個模型中,高次項的存在可能導致了過擬合,所以如果能讓高次項的係數近似等於0的話,就會減少過擬合,得到好的擬合效果。
修改代價函數,對θ3,θ4 做一些懲罰,使之對代價函數的影響減少。
J(θ)=12m[i=1m(hθ(x(i))y(i))+λi=1nθj2]
其中λ 被稱爲正則化參數(Regularization Parameter)。按慣例不對θ0 懲罰。這裏是對n個參量進行懲罰,對應的是n個特徵。

1過擬合.png-53.1kB

那爲什麼增加一項λ 可以使θ 減小?
因爲如果零λ 很大的話,爲了使costfunction儘可能小,那麼所有的θ 都會在一定程度上減小。
但若λ 太大,則所有值都趨近於0,只能得到一條直線。

正則化線性迴歸

  • 梯度下降:增加了正則項,但是對於θ0 不懲罰所以對j=0單獨處理。
    2正則化線性迴歸梯度下降.png-46.8kB
  • 正規方程:同樣可以用之前的推導公式進行推導。
    2正則化線性迴歸正規方程.png-36.4kB

正則化邏輯迴歸

模型:
3正則化邏輯迴歸模型.png-69.5kB

加入正則項後代價函數:
J(θ)=1mi=1m[y(i)log(hθ(x))(1y(i))log(1hθ(x(i)))]+λ2mj=1nθj2

import numpy as np
def costReg(theta, X, y, learningRate):
    theta = np.matrix(theta)
    X = np.matrix(X)
    y = np.matrix(y)
    first = np.multiply(-y, np.log(sigmoid(X*theta)
    second = np.multiply(1-y, np.log(1-sigmoid(X*theta.T)))
    reg = (learningRate/2*len(X))*np.sum(np.power(theta[:, 1:theta.shape[1], 2]))
    return np.sum(first, second)/(len(X)) + reg

4邏輯迴歸梯度下降.png-37.5kB

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