机器学习笔记——logistics梯度上升算法的改进

本文介绍了对机器学习中的梯度上升算法进行优化,特别是针对随机梯度上升算法的改进,包括随机样本选取以减少周期性波动,以及动态调整学习率α以加速收敛。通过不同循环次数的实验,最终实现稳定且高效的分类效果,并对训练集外数据进行了验证。
摘要由CSDN通过智能技术生成

机器学习笔记——logistics梯度上升算法的改进

参考书籍

参考书籍:人民邮电出版社——图灵程序设计丛书《机器学习实战》

在上一篇文章:机器学习笔记——logistics的python实现中涉及到了梯度上升算法,但是在上文的实现过程当中,在每一次迭代中都需要涉及到整个样本矩阵的计算,当样本和特征数量的极大时,就需要大量的复杂计算,下面介绍一个随机梯度上升算法

随机梯度上升算法

随机梯度上升算法和原方法不同的地方在于,这种方法遍历每个样本,根据每个样本的计算误差来修正系数,多次遍历样本也可以达到目的。同时这种方法不需要每次进行矩阵运算,只需要进行数值计算,下面是这种方法的代码:

def stoc_grad_Acent(featureData,classLabel,num=200):
    """
    随机梯度上升算法,一般而言,num设置的越大,精度越高
    """
    featureData = np.mat(featureData)
    classLabel = np.mat(classLabel)
    m,n = featureData.shape
    weights = np.ones((n,1))
    alpha = 0.01
    # 这里设置几个参数用于后面的参数敏感性分析
    parameter0 = []
    parameter1 = []
    parameter2 = []
    # 多次循环样本来进行参数修正
    for jj in range(num):
        for ii in range(m):
            parameter0.append(weights[0,0])
            parameter1.append(weights[1,0])
            parameter2.append(weights[2,0])
            # 随机梯度上升算法
            test = sigmod(featureData[ii,:]*weights)
            test_error = classLabel[0,ii] - test
            weights = weights + alpha*test_error[0,0]*featureData[ii,:].transpose()
        
    return weights,parameter0,parameter1,parameter2

得到的分类结果如下所示:
在这里插入图片描述
这里进行了20轮(num=20)的循环,从分类结果中肯并不理想,但是不能直接认定这种分类方式有误,这里对参数进行敏感性分析,观察在循环过程中参数的变化,代码如下:

def parameter_sensitive_test(parameter0,parameter1,parameter2,filename='parameter_analyze.png'):
    """
    参数敏感性分析
    """
    x = list(np.arange(0
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值