美文网首页
逻辑回归

逻辑回归

作者: 小王子特洛伊 | 来源:发表于2019-07-10 07:42 被阅读0次

    机器学习中通常把分类问题叫做逻辑回归,比如垃圾邮件识别、线上交易欺诈识别、肿瘤识别等,通常预测出的结果有两种取值: y\in{ 0,1 },0 代表没有或是负类(Negative Class),1 代表有或是正类(Positive Class)。

    这是一个对肿瘤进行分类的例子,利用线性回归对训练数据集进行拟合得出假设函数(粉色),可以将输出的阈值设为 0.5,当假设函数的输出结果大于 0.5 时 y=1,小于 0.5 时 y = 0,阈值右边的点将被预测为正类(肿瘤),阈值左边的点将被预测为负类(非肿瘤),目前看来线性回归似乎能满足这个分类任务。那么,我们尝试加入一个离群点:

    可以看到,为了拟合这个点,假设函数有所变化(变为蓝色直线),而且阈值的位置也随之发生了变化,这将会造成两个恶性肿瘤被错误地预测为良性肿瘤。如此看来,使用线性回归进行分类任务不是一个好的选择。分类问题需要得到的 y 值是 0 或 1,所以我们需要将 y 值限制在 0~1 之间,恰好 sigmoid 函数就可以将一个任意实数 z 限制在 0~1 之间,Sigmoid Function 也被称为 Logistic Function:
    g(z)=\frac{1}{1+e^{-z}}

    我们将线性回归假设函数的结果 h_\theta(x)=\theta^Tx 输入到 sigmoid 函数 g(z) 中:
    h_\theta(x)=g(\theta^Tx)

    从而得出新的假设函数:
    h_\theta(x)=\frac{1}{1+e^{-\theta^Tx}}

    下图为 Sigmoid Function 的曲线:

    可以发现,当 z 无穷小时,g(z) 无限趋近于 0,当 z 无穷大时,g(z) 无限趋近于 1。g(z) 的值在 0~1 之间。通过拟合参数 \theta 得出假设函数 h_\theta(x),从而对数据进行预测。可以将 h_\theta(x) 理解为在给定 x\theta 的情况下,求 y = 1 的概率,即 h_\theta(x)=P(y=1|x;\theta)。比如,根据病人的肿瘤数据得出预测结果 h_\theta(x)=0.7,则表示这个病人有 70% 的概率是恶性肿瘤,30%的概率是良性肿瘤。也就是 y = 0 的概率等于 1 减去 y = 1 的概率,即 P(y=0|x;\theta)=1-P(y=0|x;\theta)

    决策边界

    假设 sigmoid 函数的阈值设为 0.5,如果 h_\theta(x)>=0.5(即z >= 0),那么 y = 1,如果 h_\theta(x)<0.5(即 z < 0),那么 y = 0。比如我们的数据集包括两个特征,分别为 x_1x_2,假设函数为h_\theta(x)=g(\theta_0+\theta_1x_1+\theta_2x_2),假设参数向量为\theta=\left[\begin{smallmatrix} -3\\1\\1 \end{smallmatrix}\right],并且阈值为 0.5,那么 h_\theta(x)=g(z)=g(-3+x_1+x_2),当 y > 0.5,即 z >= 0 时,y = 1,即 x_1+x_2>3,如下所示:

    右上角为 y = 1 的区域,左下角为 y = 0 的区域,直线取决于参数 \theta,我们可以将这条线称为决策边界(Decision Boundary)。x1+x2=3 对应的正好是h_\theta(x)=0.5的点。决策边界是假设函数的一个属性,这取决于它的参数 \theta。通过复杂的多项式可以画出复杂的决策边界,比如h_\theta(x)=g(\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_1^2+\theta_4x_2^2),通过增加高阶项可以使假设函数拟合复杂的数据,假设参数向量为 \theta=\left[\begin{smallmatrix} -1\\0\\0\\1\\1 \end{smallmatrix}\right],当 y = 1 时,-1+x_1^2+x_2^2>=0,即 x_1^2+x_2^2>=1,这是以原点为中心,1 为半径的圆。对于圆内的点,y = 0,而圆外的点,y = 1。

    如果有更复杂的多项式,即可拟合更复杂的决策边界。比如:h_\theta(x)=g(\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_1^2+\theta_4x_2^2x_2+\theta_5x_1^2x_2^2+\theta_6x_1^3x_2^2+\cdots)

    代价函数

    h(x)=\frac{1}{1+e^{-\theta^Tx}}

    我们知道了逻辑回归的假设函数,那么如何拟合参数 \theta 呢,先来看看线性回归的代价函数:
    J(\theta)=\frac{1}{m}\sum_{i=1}^m\frac{1}{2}(h_{\theta}(x^{(i)})-y^{(i)})^2

    可以理解为,线性回归中单个样本预测值与真实值的误差为:
    Cost(h_{\theta}(x),y)=\frac{1}{2}(h_{\theta}(x)-y)^2

    也就是说,代价函数是训练集所有样本预测值与真实值的平均误差,我们尝试将线性回归的代价函数用于逻辑回归,发现出现了严重的波动(左图):

    由于 Linear Function 是凸函数,是平滑的曲线(右图),则可以用梯度下降找到全局最小值,而 Logistic Function 是非凸函数,不是平滑的曲线(左图),则很难用梯度下降找到全局最小值,所以平方误差代价函数并不适合逻辑回归

    log代价函数

    Cost(h_\theta (x),y)= \begin{cases} -log(h_\theta(x))&\text{if $y$=1}\\ -log(1-h_\theta(x))& \text{if $y$ = 0 } \end{cases}

    h(x) 为样本标签的预测值,当对应真实标签 y = 1 时,误差为 -log(h(x)),当对应真实标签 y = 0 时,误差为 -log(1-h(x))

    令样本标签预测值 h(x)=z,画出 log(z) 的函数(蓝色),翻转之后即为 -log(z)(红色),我们只关心 z 在 0~1 之间的表现。

    当 y = 1 时,代价函数为 -log(h_\theta(x))h_\theta(x) 越接近 1,概率越大,误差越小,h_\theta(x) 越接近 0,概率越小,误差越大。

    当 y = 0 时,代价函数为 -log(1-h_\theta(x))1-h_\theta(x) 越接近 0,概率越大,误差越小,1-h_\theta(x) 越接近 1,概率越小,误差越大。

    梯度下降

    逻辑回归的代价函数计算公式:
    J(\theta)=\frac{1}{m}\sum_{i=1}^mCost(h_\theta(x^{(i)}),y^{(i)})

    其中每个样本预测值与真实值的误差为:
    Cost(h_\theta (x),y)= \begin{cases} -log(h_\theta(x))&\text{if $y$=1}\\ -log(1-h_\theta(x))& \text{if $y$ = 0 } \end{cases}

    可以简化为:
    Cost(h_\theta (x),y)=-ylog(h_\theta (x))-(1-y)log(1-h_\theta (x))

    因为 y 只可能是 0 或 1,当 y = 0 时,Cost(h_\theta (x),y)=-log(1-h_\theta (x))。当 y = 1 时,Cost(h_\theta (x),y)=-ylog(h_\theta (x))。所以,代价函数可以写为:
    J(\theta)=-\frac{1}{m}[\sum_{i=1}^my^{(i)}log(h_\theta(x^{(i)}))+(1-y^{(i)})log(1-h_\theta(x^{(i)}))]

    这是原有代价函数的紧凑写法,是从统计学的极大似然法得来的,同时它是一个凸函数,可以尝试将 y = 0 或 y = 1,即可发现这与原有代价函数一致。

    我们需要关心如何最小化关于 \theta 的代价函数,首先随机选取一个 \theta 值,利用假设函数对训练集做出预测:
    h_{\theta}(x)=\frac{1}{1+e^{-\theta^Tx}}

    通过代价函数求得误差:
    J(\theta)=\frac{1}{m}[\sum_{i=1}^my^{(i)}logh_\theta(x^{(i)})+(1-y^{(i)})log(1-h_\theta(x^{(i)}))]

    利用梯度下降,最小化误差 min_\theta J(\theta),_{(j\in0...n)}
    \theta_j=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta)

    计算参数 \thetaJ(\theta) 的偏导:
    \frac{\partial}{\partial\theta_j}J(\theta)=\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}

    代入梯度下降公式:
    \theta_j=\theta_j-\alpha\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}

    如果 \theta 有 n 个参数,按照上面的公式更新所有参数即可。可以发现,逻辑回归的梯度计算公式和线性回归的梯度计算公式是相同的,那么逻辑回归和线性回归的梯度下降是相同的吗?答案是否定的 因为他们的假设函数定义不一样:
    Linear Regerssion:h_\theta(x)=\theta^Tx
    Logistic Regerssion:h_\theta(x)=\frac{1}{1+e^{- \theta^Tx}}

    所以,即使参数更新规则一样,但由于假设函数的定义不同,逻辑回归和线性回归并不是同一个算法。梯度下降过程中,可以通过观察代价函数曲线变化来监控逻辑回归的代价函数是否收敛,如果特征取值范围差距较大,也需应用特征缩放加速梯度下降,使其收敛得更快。

    除了梯度下降,还有其他优化算法可供选择,比如:

    • Conjugate gradient(共轭梯度法)
    • BFGS
    • L-BFGS

    以上算法和梯度下降的区别:

    • 无需手动选择学习率,他们有称为线搜索算法的智能内循环,可以尝试不同的学习率并选择较好的那个学习率
    • 比梯度下降收敛得更快
    • 缺点是比梯度下降更复杂,较难实现

    多分类

    在实际情况中,我们也常常会碰到多分类任务,比如将邮件归类到不同文件夹,可能包括工作、朋友、家庭、爱好等。或者病情诊断,可能包括健康、感冒、发烧、胃痛等。或者天气预测,阴、晴、雨、雪等。下图分别展示了一个二分类和多分类问题:

    我们可以将多分类问题转化为多个二分类问题:

    训练多个分类器,对于一个新的样本 x,用多个分类器分别对其进行预测,比如分别预测三角形(即 y = 1)的概率,正方形(即 y = 2)的概率,X 符号(即 y = 3)的概率,对于每个样本,选择预测概率最大的分类,即 max_ih_\theta^{(i)}(x),其中 i 表示第 i 个分类。比如,三角形:h_\theta^1(x)=P(y=1|x;\theta),正方形:h_\theta^2(x)=P(y=2|x;\theta),X 符号:h_\theta^3(x)=P(y=3|x;\theta)

    参考

    相关文章

      网友评论

          本文标题:逻辑回归

          本文链接:https://www.haomeiwen.com/subject/kdzexctx.html