人工智能中文网
  • 主页
  • 线代考研视频
  • 线性代数
  • Python机器学习与算法
  • 大数据与机器学习
  • Python基础入门教程
  • 人工智能中文网
    教程目录
    阅读:

    逻辑回归算法,LR算法(python实现)

    < 上一篇:没有了 下一篇:梯度下降法 >
    分类算法是典型的监督学习,其训练样本中包含样本的特征和标签信息。在二分类中,标签为离散值,如{+1,-1},分别表示正类和负类。分类算法通过对训练样本的学习,得到从样本特征到样本的标签之间的映射关系,也被称为假设函数,之后可利用该假设函数对新数据进行分类。

    逻辑回归算法(LR 算法,Logistic Regression 算法)是一种被广泛使用的分类算法,通过训练数据中的正负样本,学习样本特征到样本标签之间的假设函数,Logistic Regression 算法是典型的线性分类器,由于算法的复杂度低、容易实现等特点,在工业界得到了广泛的应用,如:利用 Logistic Regression 算法实现广告的点击率预估。

    Logistic Regression模型

    线性可分VS线性不可分

    对于一个分类问题,通常可以分为线性可分线性不可分两种。如果一个分类问题可以使用线性判别函数正确分类,则称该问题为线性可分,如图 1 所示。


    图 1 线性可分

    否则为线性不可分问题,如图 2 所示。


    图 2 线性不可分

    Logistic Regression模型

    Logistic Regression 模型是广义线性模型的一种,属于线性的分类模型。对于图 1 所示的线性可分的问题,需要找到一条直线,能够将两个不同的类区分开,如图 1 所示,这条直线也称为超平面

    对于上述的超平面,可以使用如下的线性函数表示:


    其中 W 为权重,b 为偏置。若在多维的情况下,权重 W 和偏置 b 均为向量。在 Logistic Regression 算法中,通过对训练样本的学习,最终得到该超平面,将数据分成正负两个类别。此时,可以使用阈值函数,将样本映射到不同的类别中,常见的阈值函数有 Sigmoid 函数,其形式如下所示:


    Sigmoid 函数的图像如图 3 所示。


    图 3 Sigmoid函数

    从 Sigmoid 函数的图像可以看出,其函数的值域为(0,1),在 0 附近的变化比较明显。其导函数 f′(x)为:


    现在,让我们利用 Python 实现 Sigmoid 函数,为了能够使用 numpy 中的函数,我们首先需要导入 numpy:

    import numpy as np

    Sigmoid 函数的具体实现过程为:
    def sig(x):
        ''' Sigmoid 函数
        input: x(mat):feature * w
        output: sigmoid(x) (mat) :Sigmoid值
        return 1.0 / (1 + np.exp(-x))
    程序中,Sigmoid 函数的输出为 Simoid 值。对于输入向量 X,其属于正例的概率为:


    其中,σ 表示的是 Sigmoid 函数。那么,对于输入向量 X,其属于负例的概率为:


    对于 Logistic Regression 算法来说,需要求解的分隔超平面中的参数,即为权重矩阵 W  和偏置向量 b,那么,这些参数该如何求解呢?为了求解模型的两个参数,首先必须定义损失函数。

    损失函数

    对于上述的 Logistic Regression 算法,其属于类别 y 的概率为:


     
    要求上述问题中的参数 W 和 b,可以使用极大似然法对其进行估计。假设训练数据集有 m 个训练样本{(X(1),y(1) ),(X(2),y(2) ),…,(X (m),y(m) )},则其似然函数为:


    其中,假设函数 hW,b(X(i))为:


    对于似然函数的极大值的求解,通常使用 Log 似然函数,在 Logistic Regression 算法中,通常是将负的 Log 似然函数作为其损失函数,即 the negative log-likelihood (NLL)作为其损失函数,此时,需要计算的是 NLL 的极小值。损失函数 lW,b 为:


     
    此时,我们需要求解的问题为:

    为了求得损失函数 lW,b 的最小值,可以使用基于梯度的方法进行求解,该方法会在下节进行详细讲解。
    < 上一篇:没有了 下一篇:梯度下降法 >