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