zoukankan      html  css  js  c++  java
  • 机器学习:logistic回归

    逻辑回归是一个形式是Y=1/(1+E(-X))的函数,它的特点是:

    1, 当X>0,随着X增大,Y很快的接近1;

    2,当x<0,随着X的减小,Y很快的接近0;

    3,当X=0时,Y=1/2。

    由于逻辑回归的这种特性(在0-1之间连续),它被用来判断一个学习算法是否正确。

    除了正确和不正确的结果之外,使用逻辑回归的好处在于,它还能告诉你,你离正确的结果还差多少,从而引导你向正确的方向前进。因此它常常和梯度上升的算法结合起来。下面的代码体现了这样的例子:

    输入参数1是100行,2列的矩阵;

    输入参数2是100行,1列的矩阵,取值都是0或1;

    def gradAscent(dataMatIn, classLabels):
       # ❶(以下两行)转换为NumPy矩阵数据类型
        dataMatrix = mat(dataMatIn)
        labelMat = mat(classLabels).transpose()
        m,n = shape(dataMatrix)
        alpha = 0.001
        maxCycles = 500
        weights = ones((n,1)) 初始化成(1,1)
        for k in range(maxCycles):
            #❷(以下三行)矩阵相乘
            h = sigmoid(dataMatrix*weights)矩阵相乘,得到100行,1列的矩阵,利用逻辑回归把它变成100行1列的矩阵,每个值介于0到1之间,h是对label的一个估计
            error = (labelMat - h)估计与实际值之间差距为error,error也是一个100行1列的矩阵;
            weights = weights + alpha * dataMatrix.transpose()* error后面3项乘的结果是1行2列的矩阵,代表了估算的结果与实际结果是超了还是低了,从而修改weights。
        return weights

    由于每次迭代都会导致weights朝labelMat的方向靠近,因此经过500次的循环,最终能得到较好的结果,能很好的确定weights的两个参数。

    当然上述代码存在一个问题,它每次循环都要扫描dataMatrix中所有的行,这对大型的数据是不可容忍的,因此,有了另外一种随机梯度上升的算法。它每次只看一行数据,看它的估算与结果的距离,根据距离调整weights。

    这个算法仍然存在问题,因为它受每个训练数据影响是一样的,所以可以通过设置,让后面的实例对数据的影响逐渐变小,从而确保学习的快速收连。

    如何处理缺失数据是机器学习中的重要课题,它也严重影响逻辑回归的准确性。

    ----

    总之,如果只是要判断一个学习算法是否准确,有无数种方法,为什么一定要选择逻辑回归这个奇怪的函数。我的理解是,逻辑回归函数它能反映出一种方向,能够把“是否正确”转变成“有多么正确或者多么错误”,正因为这个转变,可以让机器不断的向正确的方向前进,最终实现准确的预测。

  • 相关阅读:
    华为交换机配置和NTP服务器同步时间
    华为交换机常用查询命令
    Linux在线添加新磁盘
    华为交换机堆叠配置
    Linux-Centos安装nginx–解压版安装
    Linux修改为国内yum源
    pipenv的使用
    使用阿里云语音合成产品,从页面获取它的voice参数列表数据
    使用【Sonatype Nexus Repository Manager】搭建内部NPM源
    Vue3.0 项目中使用事件总线
  • 原文地址:https://www.cnblogs.com/alphablox/p/5415055.html
Copyright © 2011-2022 走看看