逻辑回归

1. 概念

逻辑回归是一个分类算法,它可以处理二元分类以及多元分类。虽然它名字里面有“回归”两个字,却不是一个回归算法。那为什么有“回归”这个误导性的词呢?个人认为,虽然逻辑回归是分类模型,但是它的原理里面却残留着回归模型的影子,我们知道,线性回归的模型是求出输出特征向量Y和输入样本矩阵X之间的线性关系系数θ,满足Y=Xθ。此时我们的Y是连续的,所以是回归模型。如果我们想要Y是离散的话,怎么办呢?一个可以想到的办法是,我们对于这个Y再做一次函数转换,变为g(Y)。如果我们令g(Y)的值在某个实数区间的时候是类别A,在另一个实数区间的时候是类别B,以此类推,就得到了一个分类模型。如果结果的类别只有两种,那么就是一个二元分类模型了。逻辑回归的出发点就是从这来的。

在逻辑回归中输入的是线性回归得出的方程,通过sigmoid函数得出(0,1)的值
函数方程为:

它有一个非常好的性质,即当z趋于正无穷时,g(z)趋于1,而当z趋于负无穷时,g(z)趋于0,这非常适合于我们的分类概率模型。

2. 逻辑回归的损失函数

回顾下线性回归的损失函数,由于线性回归是连续的,所以可以使用模型误差的的平方和来定义损失函数。但是逻辑回归不是连续的,自然线性回归损失函数定义的经验就用不上了。不过我们可以用最大似然法来推导出我们的损失函数。
假设我们的样本输出是0或者1两类。那么我们有:
P(y=1|x,θ)=hθ(x)
P(y=0|x,θ)=1−hθ(x)
把这两个式子写成一个式子,就是:
P(y|x,θ)=hθ(x)^y(1−hθ(x))^1−y
其中y的取值只能是0或者1。
得到了y的概率分布函数表达式,我们就可以用似然函数最大化来求解我们需要的模型系数θ。为了方便求解,这里我们用对数似然函数最大化,对数似然函数取反即为我们的损失函数J(θ)。对似然函数对数化取反的表达式,即损失函数表达式为:

3. 相关语法

在scikit-learn中,与逻辑回归有关的主要是这3个类。LogisticRegression, LogisticRegressionCV 和logistic_regression_path。其中LogisticRegression和LogisticRegressionCV的主要区别是LogisticRegressionCV使用了交叉验证来选择正则化系数C。而LogisticRegression需要自己每次指定一个正则化系数。除了交叉验证,以及选择正则化系数C以外,LogisticRegression和LogisticRegressionCV的使用方法基本相同。下面主要讲LogisticRegression相关参数设置

  • API: sklearn.linear_model.logisticRegression
  • 它的参数源码为

4. 主要参数:

penalty 设置正则化方式可选择的值为”l1”和”l2”.分别对应L1的正则化和L2的正则化,默认是L2的正则化。
C 设置正则化力度
solver 决定对逻辑回归损失函数的优化方法,有4种算法可以选择,分别是:
     1) liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。
     2) lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
     3) newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
     4) sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。

0条评论