在上一篇文章《机器学习笔记(9)——深入理解逻辑回归算法及其Python实现》中,详细学习了逻辑回归算法的分类原理和使用梯度下降法来最小化损失函数的数学推导过程,从而拟合出分类函数的参数θ。
1. 随机梯度下降
还记得参数θ的迭代公式吗:
可以看出,每次迭代更新参数θ都需要遍历整个数据集,计算复杂度取决于样本的个数和样本的特征值数,真实情况下,往往样本数不只100个,特征值也不只2个,那么计算的复杂度会相当高。因此考虑用随机梯度下降算法——一次只用一个样本来更新参数。
随机梯度下降算法的Python代码如下:
# -*- coding: cp936 -*-
import matplotlib.pyplot as plt
from numpy import *
plt.rcParams['axes.unicode_minus'] = False
# 加载数据集,返回样本属性值矩阵和类别向量
def loadDataSet():
dataMat = []
labelMat = []
fr = open(r'D:\Projects\PyProject\Logistic\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
# sigmoid函数
def sigmoid(inX):
return 1.0 / (1 + exp(-inX))
# 随机梯度上升算法
def stocGradAscent0(dataMatrix, classLabels):
m, n = shape(dataMatrix)
alpha = 0.01
weights = ones(n)
for i in range(m):
h = sigmoid(sum(dataMatrix[i] * weights))
error = (h - classLabels[i])
weigh