Logistic回归

  逻辑回归是一种分类算法,常用来处理二分类问题。

逻辑回归的命名

  逻辑回归的命名有一定的历史原因。该方法最早由统计学家David Cox在1958年提出,当时人们对于回归和分类的定义跟今时不太一样,作者只是沿用了回归这个名字。
  当时:p(y=1|x)是预测样本x为正样本的概率,几率(odds)是事件发生的概率与事件不发生的概率的比值,即p/(1-p)。因为逻辑回归可以写成log[p/(1-p)]=θTx,所以逻辑回归可以看作对y=1这一事件的对数几率的线性回归。
  今时:而现在对于逻辑回归的讨论,我们都认为y是因变量,而不是p/(1-p),这是逻辑回归与线性回归最大的区别,即逻辑回归中的因变量是离散的,而线性回归中的因变量是连续的。实际上,逻辑回归模型学习得到的是y=1的概率期望,而线性回归中实际上求解的是对我们假设的真实关系y=wx+b的一个近似。

逻辑回归的模型表示

原理

判定边界

  判定边界用于理解逻辑回归的模型表示,即它是如何对数据进行分类的。在逻辑回归中,我们预测:当h>=0.5时,y=1,当h<0.5时,y=0,根据s型函数图像,可以得到z>=0时,h>=0.5,z<0时,h<0.5,所以最终得到$w^Tx≥0$时预测y为1,$w^Tx<0$时预测y为0
  比如我们的数据呈现以下两种分布,用什么模型才适合呢?
  判定边界
  左图:可以用线性模型分割,$h_θ(x)=g(θ_0+θ_1x_1+θ_2x_2)$,$θ=(-3,1,1)^T$,则当$-3+x_1+x_2≥0$时模型将预测y=1,画出直线$x_1+x_2=3$就是模型的分界线,它将预测为1的区域和预测0的区域分割开
  右图:需要用曲线才能分隔开,用二次方特征,$h_θ(x)=g(θ_0+θ_1x_1+θ_2x_2+θ_3x_1^2+θ_4x_2^2)$,$θ=(-1,0,0,1,1)^T$,得到的判定边界是以(0,0)为原点,半径为1的圆

损失函数

  线性回归模型的损失函数,是误差的平方和。如果逻辑回归模型也用这个损失函数,将$g(x)=\frac{1}{1+e^{-w^Tx}}$代入后得到的损失函数是一个非凸函数,即损失函数有很多局部最小值。
  重新定义逻辑回归的损失函数:,其中当实际y=1时Cost(h,y)=-ln(h),当实际y=0时Cost(h,y)=-ln(1-h)
  简化后得:
  代入损失函数得:

梯度下降法

  梯度下降法是一种最优化方法,
可以用来计算使损失函数最小的参数。它的思想是:想找到某函数的最小值(或最大值),最好的方法是沿着该函数的梯度方向探寻。梯度记为∇
梯度

案例

  用逻辑回归来预测患有疝病的马的生存问题,从一些文献了解到疝病是描述马肠胃病的属于,但是这种病不一定源自马的胃肠问题,也有可能是其他问题引起的。
  数据集包括368个样本和28个特征,包括医院检测马疝病的一些指标,有的指标比较主观,有的指标难以测量,比如马的疼痛级别。现在先对数据集进行预处理,使数据可以顺利地使用分类算法。

1. 预处理

 (1)填充特征的缺失值
  有时数据相当昂贵,扔掉和重新获取都是不可取的,所以必须采用一些方法来解决,比如:①使用可用特征的均值填充 ②使用相似样本的均值填充 ③用特殊值填充,比如-1 ④用机器学习算法预测缺失值 ⑤忽略有缺失值的样本
  这里我们用特殊值0填充,这么做的直觉是:①可以保留现有数据;②不需要对优化算法进行修改,因为在更新时x=0不会影响该特征对应的w值(w:=w-αerrorx);③对预测结果也没有任何倾向性(Sigmoid(0)=0.5)
 (2)删除标签缺失的样本
  标签与特征不同,很难用合适的值来填充。用逻辑回归进行分类时这么做是合理的,但是采用KNN算法这么做就不太可行。

2. 用逻辑回归进行分类

(1)逻辑回归的函数形式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# p1 = sigmoid(z)
# z = Xw,X是m×(n+1)的特征矩阵、w是(n+1)维的系数向量
# p1>0.5则归为类1;p1<0.5则归为类0

import numpy as np
def sigmoid(z):
return 1.0/(1+np.exp(-z))

def classifyLR(X, w):
p1 = sigmoid( np.sum( X * w ) )
if p1 > 0.5:
return 1.0
else:
return 0.0