逻辑斯蒂回归算法

目录

逻辑斯蒂分布

二元逻辑斯蒂回归模型

二元逻辑斯蒂回归的损失函数及优化方法

二元逻辑斯蒂回归的正则化

多元逻辑斯蒂回归

逻辑斯蒂回归小结

LR的优点

LR的缺点

LR将连续特征离散化的原因

逻辑回归和线性回归的区别和联系

LR和SVM的关系

scikit-learn 逻辑回归类库使用小结

概述

正则化选择参数:penalty

优化算法选择参数:solver

分类方式选择参数:multi_class

类型权重参数:class_weight

样本权重参数:sample_weight


逻辑斯蒂分布

image.png

二元逻辑斯蒂回归模型

image.png

二元逻辑斯蒂回归的损失函数及优化方法

image.png

二元逻辑斯蒂回归的正则化

逻辑回归也会面临过拟合问题,所以我们也要考虑正则化。常见的有L1正则化和L2正则化。

逻辑回归的L1正则化的损失函数表达式如下,相比普通的逻辑回归损失函数,增加了L1的范数做作为惩罚,超参数\alpha作为惩罚系数,调节惩罚项的大小。

二元逻辑回归的L1正则化损失函数表达式如下:

\Large J(\theta ) = -Y^{T}\cdot (E-Y)^{T}\cdot log(E-h_\theta(X)) + \alpha||\theta||_1

其中||\theta||_1||\theta||的L1范数。

逻辑回归的L1正则化损失函数的优化方法常用的有坐标轴下降法和最小角回归法。

 

二元逻辑回归的L2正则化损失函数表达式如下:

\Large J(\theta ) = -Y^{T}\cdot (E-Y)^{T}\cdot log(E-h_\theta(X)) + \frac{1}{2}\alpha||\theta||_2^2

其中||\theta||_2^2\theta的L2范数。

逻辑回归的L2正则化损失函数的优化方法和普通的逻辑回归类似。

多元逻辑斯蒂回归

image.png

逻辑斯蒂回归小结

LR的流程可以描述为:

逻辑回归假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯度下降来求解参数,来达到将数据二分类的目的。

1、找到合适的预测函数,用来预测输入数据的判断结果

image.png

对于二元逻辑回归

\Large P(y=1|x) = 1 - h_\theta(x)

\Large P(y=0|x) = h_\theta(x)

对于多元逻辑回归

\Large P(y=k|x,\theta) = \tfrac{e^{x\theta_k}}{1+\sum_{t=1}^{K-1}e^{x\theta_t}} \qquad k=1,2,...,K-1

\Large P(y=K|x,\theta) = \tfrac{1}{1+\sum_{t=1}^{K-1}e^{x\theta_t}}

 2、构造损失函数,表示预测的输出和训练数据类别之间的偏差。

 

选择的损失函数为对数似然函数取反

选择极大似然函数作为损失函数的原因:

1)极大似然函数取对数后等同于对数损失函数,在LR中对数损失函数的训练求解参数的速度较快。

2)如果使用平方损失函数,梯度更新的速度和sigmod函数本身的梯度是很相关的。sigmod函数在它在定义域内的梯度都不大于0.25。这样训练会非常的慢。

3、根据梯度下降找到损失函数的最小值,即优化损失函数

4、LR处理高度相关的特征的原因

1)去掉高度相关的特征会让模型的可解释性更好

2)可以大大提高训练的速度。如果模型当中有很多特征高度相关的话,就算损失函数本身收敛了,但实际上参数是没有收敛的,这样会拉低训练的速度。其次是特征多了,本身就会增大训练的时间。

LR的优点

1、形式简单,模型的可解释性非常好。从特征的权重可以看到不同的特征对最后结果的影响,某个特征的权重值比较高,那么这个特征最后对结果的影响会比较大。

2、模型效果不错。在工程上是可以接受的(作为baseline),如果特征工程做的好,效果不会太差,并且特征工程可以大家并行开发,大大加快开发的速度。

3、训练速度较快。分类的时候,计算量仅仅只和特征的数目相关。并且逻辑回归的分布式优化sgd发展比较成熟,训练的速度可以通过堆机器进一步提高,这样我们可以在短时间内迭代好几个版本的模型。

4、资源占用小,尤其是内存。因为只需要存储各个维度的特征值,。

5、方便输出结果调整。逻辑回归可以很方便的得到最后的分类结果,因为输出的是每个样本的概率分数,我们可以很容易的对这些概率分数进行cutoff,也就是划分阈值(大于某个阈值的是一类,小于某个阈值的是一类)。

LR的缺点

1、准确率并不是很高。因为形式非常的简单(非常类似线性模型),很难去拟合数据的真实分布。

2、很难处理数据不平衡的问题。举个例子:如果我们对于一个正负样本非常不平衡的问题比如正负样本比 10000:1.我们把所有样本都预测为正也能使损失函数的值比较小。但是作为一个分类器,它对正负样本的区分能力不会很好。

3、处理非线性数据较麻烦。逻辑回归在不引入其他方法的情况下,只能处理线性可分的数据,或者进一步说,处理二分类的问题 。

4、逻辑回归本身无法筛选特征。有时候,我们会用gbdt来筛选特征,然后再上逻辑回归。

LR将连续特征离散化的原因

1、稀疏向量内积乘法运算速度快,计算结果方便存储,容易scalable(扩展)。

2、离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰。

3、逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合。

4、离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力。

5、特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问。

逻辑回归和线性回归的区别和联系

1)线性回归要求因变量服从正态分布,logistic回归对变量分布没有要求。

2)线性回归要求因变量(Y)是连续性数值变量,而logistic回归要求因变量是分类型变量。

3)线性回归要求自变量和因变量呈线性关系,而logistic回归不要求自变量和因变量呈线性关系

4)线性回归是直接分析因变量与自变量的关系,而logistic回归是分析因变量取某个值的概率与自变量的关系

 

逻辑回归和线性回归都属于广义线性回归模型。

1、回归与分类:回归模型就是预测一个连续变量(如降水量,价格等)。在分类问题中,预测属于某类的概率,可以看成回归问题。这可以说是使用回归算法的分类方法。

2、输出:直接使用线性回归的输出作为概率是有问题的,因为其值有可能小于0或者大于1,这是不符合实际情况的,逻辑回归的输出正是[0,1]区间

3、参数估计方法:

1)线性回归中使用的是最小化平方误差损失函数,对偏离真实值越远的数据惩罚越严重。这样做会有什么问题呢?假如使用线性回归对{0,1}二分类问题做预测,则一个真值为1的样本,其预测值为50,那么将会对其产生很大的惩罚,这也和实际情况不符合,更大的预测值说明为1的可能性越大,而不应该惩罚的越严重。

2)逻辑回归使用对数似然函数进行参数估计,使用交叉熵作为损失函数,对预测错误的惩罚是随着输出的增大,逐渐逼近一个常数,这就不存在上述问题了

3)也正是因为使用的参数估计的方法不同,线性回归模型更容易受到异常值(outlier)的影响,有可能需要不断变换阈值(threshold)。

LR和SVM的关系

1、LR和SVM都可以处理分类问题,且一般都用于处理线性二分类问题(在改进的情况下可以处理多分类问题)

2、两个方法都可以增加不同的正则化项,如l1、l2等等。所以在很多实验中,两种算法的结果是很接近的。

区别:

1、LR是参数模型,SVM是非参数模型。

2、从目标函数来看,区别在于逻辑回归采用的是logistical loss,SVM采用的是hinge loss,这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。

3、SVM的处理方法是只考虑support vectors,也就是和分类最相关的少数点,去学习分类器。而逻辑回归通过非线性映射,大大减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重。

4、逻辑回归相对来说模型更简单,好理解,特别是大规模线性分类时比较方便。而SVM的理解和优化相对来说复杂一些,SVM转化为对偶问题后,分类只需要计算与少数几个支持向量的距离,这个在进行复杂核函数计算时优势很明显,能够大大简化模型和计算。

5、logic 能做的 svm能做,但可能在准确率上有问题,svm能做的logic有的做不了。

scikit-learn 逻辑回归类库使用小结

概述

在scikit-learn中有三种逻辑回归函数: LogisticRegression, LogisticRegressionCV 和logistic_regression_path。

LR和LRCV的区别在于:LRCV使用了交叉验证来选择正则化系数C,LR需要自己每次指定一个正则化系数。

logistic_regression_path拟合数据后,不能直接来做预测,只能为拟合数据选择合适逻辑回归的系数和正则化系数。

正则化选择参数:penalty

penalty参数可选择的值为"l1"和"l2"。分别对应L1的正则化和L2的正则化,默认是L2的正则化。

选择L1正则的情况:

1、使用L2正则化后,依旧过拟合

2、模型特征过多,希望将一些不重要的特征系数归零,从而让模型系数稀疏化。

优化算法选择参数:solver

solver决定了损失函数的优化方法,共有4种:

1、liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。(L1正则化只有这一种优化方式,因为L1正则化的损失函数不是连续可导)

2、lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。

3、newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。

4、sag:即随机平均梯度下降,每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。

分类方式选择参数:multi_class

ovrone-vs-rest(OvR)multinomialmany-vs-many(MvM)。二元逻辑回归无区别,多元逻辑回归有区别。

1、OvR:将多元逻辑回归当做二元逻辑回归。具体做法是,对于第K类的分类决策,我们把所有第K类的样本作为正例,除了第K类样本以外的所有样本都作为负例,然后在上面做二元逻辑回归,得到第K类的分类模型。其他类的分类模型获得以此类推。

OvR可以选择4种损失函数优化方法

2、MvM如果模型有T类,我们每次在所有的T类样本里面选择两类样本出来,不妨记为T1类和T2类,把所有的输出为T1和T2的样本放在一起,把T1作为正例,T2作为负例,进行二元逻辑回归,得到模型参数。我们一共需要T(T-1)/2次分类。

MvM只能选择三种损失函数优化方法,不能选择liblinear

类型权重参数:class_weight

class_weight:标示各种类型的权重,

1、不输入,不考虑权重,所有类型的权重一样。

2、balanced,让类库自己计算类型权重,根据训练样本量来计算权重。某种类型样本量越多,则权重越低,样本量越少,则权重越高。

3、自己定义,class_weight={0:0.9, 1:0.1},这样类型0的权重为90%,而类型1的权重为10%。

1)误分类的代价很高。例如对合法和非法进行分类,将非法分类为合法代价很高,就可以提高非法类别的权重。

2)样本高度失衡,提高少数类别的权重,也可以选择balanced

样本权重参数:sample_weight

样本不平衡,通过调节样本权重来解决。调节样本权重的方法有两种,

1、在class_weight使用balanced。

2、调用fit函数时,通过sample_weight来自己调节每个样本权重。

在scikit-learn做逻辑回归时,如果上面两种方法都用到了,那么样本的真正权重是class_weight*sample_weight.

 

最后如果转载,麻烦留个本文的链接,因为如果读者或我自己发现文章有错误,我会在这里更正,留个本文的链接,防止我暂时的疏漏耽误了他人宝贵的时间。

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值