機器學習筆記之Logistic迴歸演算法

birdlove1987發表於2017-02-08
Logistic迴歸演算法:
優點:計算代價不高,易於理解和實現。
缺點:容易欠擬合,分類精度可能不高。
適用資料型別:數值型和標稱型。

演算法原理:logistic迴歸是一種廣義線性迴歸(generalized linear model),因此與多重線性迴歸分析有很多相同之處。它們的模型形式基本上相同,都具有 w'x+b,其中w和b是待求引數,其區別在於他們的因變數不同,多重線性迴歸直接將w'x+b作為因變數,即y =w'x+b,而logistic迴歸則通過函式L將w'x+b對應一個隱狀態p,p =L(w'x+b),然後根據p 與1-p的大小決定因變數的值。如果L是logistic函式,就是logistic迴歸,如果L是多項式函式就是多項式迴歸。
ps:因為Logistic的幾何形狀很像一個“S”型,所以又叫 sigmoid曲線(S型曲線)

演算法流程:
收集資料:採用任意方法收集資料。
準備資料:由於需要進行距離計算,因此要求資料型別為數值型。
分析資料:採用任意方法對資料進行分析。
訓練演算法:大部分時間將用於訓練,訓練的目的是為了找到最佳的分類迴歸係數。
測試演算法:一旦訓練完成,分類也計算的很快。
使用演算法:對實際資料進行預測。

Logistic函式:
    
它的幾何形狀:

             


    由圖我們可以看出,在處理二分類問題(0,1)時,x=0,f(x) = 0.5,但函式自變數趨近於正無窮時,函式逼近於1。反之,當函式自變數趨近於負無窮時,函式逼近於0。所以對於任意一個輸入值,我們總能得出一個在(0,1)之間的輸出結果,但輸出結果大於0.5時,我們認為輸出結果為1,反之為0。因此Logistic迴歸也可以被看成是一種概率估計。

    函式確定之後我們在看一下它的輸入情況,我們可以將對條件輸入記作: 

                       

   如果採用向量的寫法可以記作:

                

   其中向量x是輸入資料,w為輸入資料的係數。

所以其實Logistic的訓練過程,其實也就是求最優迴歸係數的過程。


這裡我們就需要一個優化演算法了,也變引出了——梯度下降(上升)演算法

       梯度下降(上升)法是一個最優化演算法,通常也稱為最速下降(上升)法。最速下降(上升)法是求解無約束優化問題最簡單和最古老的方法之一,雖然現在已經不具有實用性,但是許多有效演算法都是以它為基礎進行改進和修正而得到的。最速下降(上升)法是用負(正)梯度方向為搜尋方向的,最速下降(上升)法越接近目標值,步長越小,前進越慢。


下面便是梯度下降(上升)演算法的經典圖示了:


                        


梯度下降(上升)演算法的計算公式:


Logistic函式程式碼:


def sigmoid(inX):
    return 1.0/(1+exp(-inX))


梯度上升演算法程式碼:(因為我們後面需要分類的問題是沿著梯度上升方向尋找的,所以這裡使用梯度上升演算法)


def gradAscent(dataMatIn, classLabels):
    dataMatrix = mat(dataMatIn)             
    labelMat = mat(classLabels).transpose() 
    m,n = shape(dataMatrix)
    alpha = 0.001
    maxCycles = 500
    weights = ones((n,1))
    for k in range(maxCycles):             
        h = sigmoid(dataMatrix*weights)   
        error = (labelMat - h)              
        weights = weights + alpha * dataMatrix.transpose()* error  #梯度上升演算法部分
    return weights


下面我們需要一些測試資料:


圖中紅色方塊代表一種型別的資料,綠色圓圈代表另一種型別的資料。

我們嘗試使用Logistic迴歸演算法,將這兩組資料在這個二維面上劃分出來(對於人來說這個工作相當簡單。。。)


嗯,看來Logistic迴歸演算法表現的還不錯,至少有五歲小朋友的一筆畫智商了^_^...







相關文章