1. 程式人生 > >Logistic迴歸之梯度上升優化演算法(一)

Logistic迴歸之梯度上升優化演算法(一)

Logistic迴歸之梯度上升優化演算法

一、Logistic迴歸

首先我們需要了解什麼是Logistic迴歸。Logistic迴歸是一種分類演算法,一般用於二分類問題,例如預測明天是否下雨,當然也可以用於多分類問題。本文主要是討論二分類問題。二分類問題即輸出結果一般只有兩個情況,我們可以理解為函式的輸出為0或1。具有這種性質的函式我們已經接觸過,該函式成為海微塞德階躍函式(Heaviside step function),或者直接稱為單位階躍函式。然而該函式在跳躍點上從0瞬間跳躍到1,這個瞬間跳躍過程很難處理。所以使用Sigmoid函式,Sigmoid函式計算公式如下:

                                                                              \large g\left ( z \right )=\frac{1}{1+e^{-z}}

                                                           \large z = w_0x_0+w_1x_1+w_2x_2+\cdot \cdot \cdot +w_nx_n

                                                                                    \large z = W^{T}X

Z是函式的輸入,將兩個數值向量對應元素相乘然後全部加起來得到z值。向量x是分類器的輸入資料,向量w也就是我們要找到的最佳引數(係數),從而使得分類器儘可能精確。圖中上部分是沒有w的的輸入,圖中下部分是有w的輸入。使得Sigmoid函式看起來像一個階躍函式。

 二、梯度上升法

為了尋找最佳引數w,需要用到最優化理論的一些知識。首先介紹梯度上升的最優化方法。梯度上升法基於的思想是:要找到某函式的最大值,最好的方法是沿著該函式的梯度方向探尋。如果梯度記為\large \bigtriangledown,則函式\large f(x,y)d的梯度由下表示:

這個梯度意味著要沿x的方向移動,沿y方向移動。其中,函式f(x,y)必須要在待計算的點上有定義並且可微。其實和我們高中求導求極值是一個意思。梯度演算法的迭代公式如下:

其中\large \alpha為步長,也就是學習速率,控制更新的幅度。我們以函式\large f(x) = -x^{^{2}}+4x為例。比如從(0,0)開始,迭代路徑就是1→2→3→4→...→n,直到求出的x為函式極大值的近似值,停止迭代,python3程式碼如下:

'''
函式說明:梯度上升演算法測試函式
求函式f(x) = -x^2 + 4x的極大值
Parameters:
    無
Returens:
    無
'''
def Gradient_Ascent_test():
    def f_prime(x_old):
        return -2 * x_old +4    #f(x)的導數
    x_old = -1                  #初始值,給一個小魚x_new的值
    x_new = 0                   #梯度上升演算法初始值,即從(0,0)開始
    alpha = 0.01                #步長,也就是學習速率,控制更新的幅度
    presision = 0.00000001      #精度,也就是更新閾值
    while abs(x_old - x_new) >presision:
        x_old = x_new
        x_new = x_old + alpha * f_prime(x_old)  #上面提到的公式
    print(x_new)                                #列印最終求解的x
if __name__ == '__main__':
    Gradient_Ascent_test()