機器學習:logistic迴歸

邏輯迴歸是一個形式是Y=1/(1+E(-X))的函數,它的特色是:算法

1, 當X>0,隨着X增大,Y很快的接近1;機器學習

2,當x<0,隨着X的減少,Y很快的接近0;函數

3,當X=0時,Y=1/2。學習

因爲邏輯迴歸的這種特性(在0-1之間連續),它被用來判斷一個學習算法是否正確。spa

除了正確和不正確的結果以外,使用邏輯迴歸的好處在於,它還能告訴你,你離正確的結果還差多少,從而引導你向正確的方向前進。所以它經常和梯度上升的算法結合起來。下面的代碼體現了這樣的例子:ci

輸入參數1是100行,2列的矩陣; table

輸入參數2是100行,1列的矩陣,取值都是0或1; class

def gradAscent(dataMatIn, classLabels):
   # ❶(如下兩行)轉換爲NumPy矩陣數據類型
    dataMatrix = mat(dataMatIn)
    labelMat = mat(classLabels).transpose()
    m,n = shape(dataMatrix)
    alpha = 0.001
    maxCycles = 500
    weights = ones((n,1)) 初始化成(1,1)
    for k in range(maxCycles):
        #❷(如下三行)矩陣相乘
        h = sigmoid(dataMatrix*weights)矩陣相乘,獲得100行,1列的矩陣,利用邏輯迴歸把它變成100行1列的矩陣,每一個值介於0到1之間,h是對label的一個估計
        error = (labelMat - h)估計與實際值之間差距爲error,error也是一個100行1列的矩陣;
        weights = weights + alpha * dataMatrix.transpose()* error後面3項乘的結果是1行2列的矩陣,表明了估算的結果與實際結果是超了仍是低了,從而修改weights。
    return weights循環

因爲每次迭代都會致使weights朝labelMat的方向靠近,所以通過500次的循環,最終能獲得較好的結果,能很好的肯定weights的兩個參數。數據類型

固然上述代碼存在一個問題,它每次循環都要掃描dataMatrix中全部的行,這對大型的數據是不可容忍的,所以,有了另一種隨機梯度上升的算法。它每次只看一行數據,看它的估算與結果的距離,根據距離調整weights。

這個算法仍然存在問題,由於它受每一個訓練數據影響是同樣的,因此能夠經過設置,讓後面的實例對數據的影響逐漸變小,從而確保學習的快速收連。

如何處理缺失數據是機器學習中的重要課題,它也嚴重影響邏輯迴歸的準確性。

----

總之,若是隻是要判斷一個學習算法是否準確,有無數種方法,爲何必定要選擇邏輯迴歸這個奇怪的函數。個人理解是,邏輯迴歸函數它能反映出一種方向,可以把「是否正確」轉變成「有多麼正確或者多麼錯誤」,正由於這個轉變,可讓機器不斷的向正確的方向前進,最終實現準確的預測。

相關文章
相關標籤/搜索