邏輯回歸的實現(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 plain  copy
 
 print?
  1. def loadDataSet():  
  2.     dataMat = []; labelMat = []  
  3.     fr = open('/Users/hakuri/Desktop/testSet.txt')  
  4.     for line in fr.readlines():  
  5.         lineArr = line.strip().split()  
  6.         dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])  
  7.         labelMat.append(int(lineArr[2]))  
  8.     return dataMat,labelMat  
  9.   
  10. def sigmoid(inX):  
  11.     return 1.0/(1+exp(-inX))  


返回回歸系數,對應於每個特征值,for循環實現了遞歸梯度上升算法。
[python]  view plain  copy
 
 print?
  1. def gradAscent(dataMatIn, classLabels):  
  2.     dataMatrix = mat(dataMatIn)             #convert to NumPy matrix  
  3.     labelMat = mat(classLabels).transpose() #convert to NumPy matrix  
  4.       
  5.     m,n = shape(dataMatrix)  
  6.     alpha = 0.001  
  7.     maxCycles = 500  
  8.     weights = ones((n,1))  
  9.       
  10.     for k in range(maxCycles):              #heavy on matrix operations  
  11.         h = sigmoid(dataMatrix*weights)     #matrix mult  
  12.         error = (labelMat - h)              #vector subtraction  
  13.         weights = weights + alpha * dataMatrix.transpose()* error #matrix mult  
  14.     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.代碼

 
 
 

作者微信公眾號:凡人機器學習

長期分享機器學習實戰相關信息,感謝關注!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM