该代码基本上参考了zouxy09的专栏中的逻辑回归代码,他对于ML一些经典的算法都写得很不错,读后受益匪浅。
直接上代码:
#-*- coding:utf8 -*-
'''
逻辑回归1.0
Author:Stephen
2016.10.6
'''
from numpy import *
import matplotlib.pyplot as plt
import time
def sigmoid(inX):
return 1.0 / (1 + exp(-inX))
# input: train_x is a mat datatype, each row stands for one sample
# train_y is mat datatype too, each row is the corresponding label
# opts is optimize option include step and maximum number of iterations
def trainLogRegres(train_x, train_y, opts):
'训练逻辑分类器'
startTime = time.time() # calculate training time
numSamples, numFeatures = shape(train_x)
weights = ones((numFeatures, 1))
alpha = opts['alpha']
maxIter = opts['maxIter']
# optimize through gradient descent algorilthm
for k in range(maxIter):
if opts['optimizeType'] == 'GradDescent': # 梯度下降 梯度上升算法计算最佳回归系数
output = sigmoid(train_x * weights)
error = train_y - output
weights = weights + alpha * train_x.transpose() * error
elif opts['optimizeType'] == 'StoGradDescent': # 随机梯度下降
for i in range(numSamples):
output = sigmoid(train_x[i, :] * weights)
error = train_y[i