【機器學習演算法-python實現】邏輯迴歸的實現(LogicalRegression)
阿新 • • 發佈:2019-01-08
1.背景知識
在剛剛結束的天貓大資料s1比賽中,邏輯迴歸是大家都普遍使用且效果不錯的一種演算法。(1)迴歸
先來說說什麼是迴歸,比如說我們有兩類資料,各有50十個點組成,當我門把這些點畫出來,會有一條線區分這兩組資料,我們擬合出這個曲線(因為很有可能是非線性),就是迴歸。我們通過大量的資料找出這條線,並擬合出這條線的表示式,再有資料,我們就以這條線為區分來實現分類。下圖是我畫的一個數據集的兩組資料,中間有一條區分兩組資料的線。(2)sigmoid函式
我們看到了上圖中兩組資料的劃分,那麼我們怎麼來找出兩組資料的邊界表示式呢,這裡用到sigmoid函式。它的形狀大致是(如下),公式把資料集的特徵值設為x1,x2,x3......。我們要求出它們的迴歸係數。只要設z=w1*x1+w2*x2.....用sigmoid函數出理是防止資料從0到1發生跳變,因為目標函式是0到1,我們要把帶入x1,x2...多項式資料控制在這之間。
(3)梯度上升演算法
梯度上升是指找到函式增長的方向。公式。在具體實現的過程中,不停地迭代運算直到w的值幾乎不再變化為止。2.程式碼
資料集在工程中有。匯入資料集,並定義sigmoid函式def loadDataSet(): dataMat = []; labelMat = [] fr = open('/Users/hakuri/Desktop/testSet.txt') for line in fr.readlines(): lineArr = line.strip().split() dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])]) labelMat.append(int(lineArr[2])) return dataMat,labelMat def sigmoid(inX): return 1.0/(1+exp(-inX))
返回迴歸係數,對應於每個特徵值,for迴圈實現了遞迴梯度上升演算法。
def gradAscent(dataMatIn, classLabels): dataMatrix = mat(dataMatIn) #convert to NumPy matrix labelMat = mat(classLabels).transpose() #convert to NumPy matrix m,n = shape(dataMatrix) alpha = 0.001 maxCycles = 500 weights = ones((n,1)) for k in range(maxCycles): #heavy on matrix operations h = sigmoid(dataMatrix*weights) #matrix mult error = (labelMat - h) #vector subtraction weights = weights + alpha * dataMatrix.transpose()* error #matrix mult return weights
結果,返回了特徵值的迴歸係數。我們的資料集有兩個特徵值分別是x1,x2。我們又增設了了x0變數。得到的結果
[[ 4.12414349]
[ 0.48007329]
[-0.6168482 ]]
我們得出x1和x2的關係(設x0=1),0=4.12414349+0.48007329*x1-0.6168482*x2畫出x1與x2的關係圖3.程式碼
作者微信公眾號:凡人機器學習
長期分享機器學習實戰相關資訊,感謝關注!