由圖我們可以看出,在處理二分類問題(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回歸算法表現的還不錯,至少有五歲小朋友的一筆畫智商了^_^...
新聞熱點
疑難解答