逻辑回归的实现(LogicalRegression)
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函數
[python]view plaincopy
print?
defloadDataSet():
dataMat=[];labelMat=[]
fr=open('/Users/hakuri/Desktop/testSet.txt')
forlineinfr.readlines():
lineArr=line.strip().split()
dataMat.append([1.0,float(lineArr[0]),float(lineArr[1])])
labelMat.append(int(lineArr[2]))
returndataMat,labelMat
defsigmoid(inX):
return1.0/(1+exp(-inX))
返回回歸系數,對應于每個特征值,for循環實現了遞歸梯度上升算法。
[python]view plaincopy
print?
defgradAscent(dataMatIn,classLabels):
dataMatrix=mat(dataMatIn)#converttoNumPymatrix
labelMat=mat(classLabels).transpose()#converttoNumPymatrix
m,n=shape(dataMatrix)
alpha=0.001
maxCycles=500
weights=ones((n,1))
forkinrange(maxCycles):#heavyonmatrixoperations
h=sigmoid(dataMatrix*weights)#matrixmult
error=(labelMat-h)#vectorsubtraction
weights=weights+alpha*dataMatrix.transpose()*error#matrixmult
returnweights
結果,返回了特征值的回歸系數。我們的數據集有兩個特征值分別是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.代碼
下載地址(Logical Regression)
作者微信公眾號:凡人機器學習
長期分享機器學習實戰相關信息,感謝關注!
總結
以上是生活随笔為你收集整理的逻辑回归的实现(LogicalRegression)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用UPUPW做服务器,通过thinkph
- 下一篇: vscode中使用百度脑图(mindma