逻辑回归分类《机器学习实战》读书笔记(数据分析学习DAY6)

昨天和今天学完了逻辑回归。
逻辑回归和之前学习的几个机器学习方法有本质区别,第一次引入的最优化算法,逻辑回归中使用的是梯度算法,即使函数向变化(大或小)最快的方向改变。在逻辑回归中,改变的目标是函数各变量的系数,目标找到最优系数/
w := w - a 损失函数梯度f(w)
为了得到梯度,我们需要了解逻辑回归的损失函数,并对每个w(每个系数) 求偏导

最后我们可以得到逻辑函数的损失函数的梯度为

1/mXTerror

即各数据与误差相乘构成的向量
由此可以得到最优化权重。

import numpy as np
def sigmoid(inX): #逻辑回归的核心函数
    return 1.0/(1+exp(inX))  #计算逻辑回归所得到的预测值

def gradAscent(dataMat, classLabels): #梯度上升算法训练得到最优weights
    dataMatrix = mat(dataMatIn)
    labelMat = mat(dataMatIn)
    m,n = shape(dataMatrix) #得到共有数据总量为m条,且有n个待估计变量
    alpha = 0.001#规定步长为0.001
    MaxCycles = 500#得到最大的优化次数
    weights = np.ones((n,1))#构建初始权重,初始权重全为1
    for k in range(maxCycles):#进行最大优化次数的循环
        h = sigmoid((dataMatrix * weight))#计算各变量使用当前权重的预测值
        error = (labelMat - h)#实际值减去预测值得到误差
        weights = weights + alpha * dataMatrix.transpose() * error#此函数由梯度上升算法得出
    return weight

此处为最基础的逻辑回归思想,即用固定的步长优化一定次数。
且在进行优化时考虑各个数据点。
此处带来一个问题,即大数据量的计算会给计算机带来很多压力。
因此,用随机梯度上升进行优化,即每次更新只考虑一个数据点

def stocGradAscent0(dataMatrix, classLabels):
    m,n = shape(dataMatrix)
    alpha = 0.01
    weights = np.ones(n)#生成原始权重,此处权重为横向量
    for i in range(m):
        h = sigmoid(sum(dataMatrix[i] * weights))#同向的两个向量相乘,对应位置相乘,计算完后需要求和
        error = classLabels[i] - h #点i 的预测值与实际值的误差
        weights =  weights + alpha* error*dataMatrix[i] #梯度上升算法更新权重
    return weights #随机梯度上升算法,仅用一个数据点进行更新权重

此回归又带来了新的问题,即一些不良的数据点可能会给更新过程带来波动。
且没有体现随机性。
对算法进一步改进

def stocGradAscent1(dataMatrix, classLabels, numIter = 150):
    m,n = shape(dataMatrix)
    weight = np.ones(n)
    for j in range(numIter):
        dataIndex = range(m)
        for i in range(m):
            alpha = 4/(1+j+i)+0.01 #改变步长,减少波动
            randIndex = int(random.uniform(0, len(dataIndex))) #随机生成参考数据点,减少周期性波动
            h = sigmoid(sum(dataMatrix[i] * weights))
            error = classLabels[i] - h 
            weights =  weights + alpha* error*dataMatrix[i] 
    return weights 

总结:
首次接触最优算法,让我感受到了机器学习背后的根本还是数学。
对矩阵的处理能力不足可能会影响后续的学习,打算开始系统的复习线性代数的知识,并且做一定的扩展。

本文代码来源:
代码原出版书籍方已公开
https://www.manning.com/books/machine-learning-in-action

不作任何参考,仅为个人读书笔记,方便未来复习查看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值