Logistic迴歸演算法(梯度上升)
阿新 • • 發佈:2019-01-05
Logistic迴歸演算法是一個最優化演算法,迴歸就是擬合的過程。Logistic迴歸的思想就是利用現有資料對分類邊界建立線性迴歸公式,今天我們用這個演算法來解決二值分類問題。
這裡介紹一個名叫Sigmoid的公式,這個函式是一種階躍函式,(詳細含義可以去問度娘)利用這個函式我們可以預測二值分類問題,為了使用Logistic迴歸分類器,我們需要在每一個特徵值上乘以一個迴歸係數,然後把所有的值加起來,代入到Sigmoid函式中當它的值大於0.5的資料被分到1類,小於0.5的被分到0類。這裡最佳迴歸係數可以有多種方法確定,這裡先介紹一種利用梯度上升優化演算法求解迴歸係數。testSet.txt下載(提取碼:0dc4)
第一個函式還是初始化資料,dataMat是屬性資料集,在dataMat的第一列都設定為1主要是為了方便計算。labelMat儲存的是標籤資料。第二個函式即是Sigmoid函式公式。第三個函式是最主要的函式,用於計算最佳迴歸係數。首先將儲存特徵值的列表轉換成矩陣形式。以便進行計算,將標籤資料轉換成列向量。alpha是向目標移動的步長,maxCycles是迭代次數,我們可以改變這兩個值來確定最佳的迴歸係數。for迴圈裡的前兩句是計算真是類別與預測類別的差值,接下來按照差值的方向調整迴歸係數。from numpy import * def loadDataSet(): dataMat = []; labelMat = [] fr = open('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)) 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