关于LR的自问自答

1、如何介绍logistic regression:

LR因为模型简单、释性强,一直备受青睐,当然也可能是我们接触机器学习的第一个模型,但是如何去全面的介绍这个大家都在用模型呢?

介绍模型,首先我们为了解决问题会提出一些前提调件,在问题的假设情况下使问题能够更加容易套用数学模型处理。问题预处理以后使用合适的损失函数(代价函数)进行求解来达到什么样的目的。

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

  • 逻辑回归的基本假设

伯努利分布是一个离散型机率分布,是二项分布的特殊情况,应用于两种实验结果,要么正例,要么负例。整个模型可以描述为:

h_{\theta}(x;\theta)=p

逻辑回归的第二个假设样本为正的概率是:

P=\frac{1}{1+e^{-\theta^{T}x}}

所以逻辑回归的最终形式:

h_{\theta}(x;\theta)=\frac{1}{1+e^{-\theta^{T}x}}

  • 逻辑回归的损失函数

逻辑回归的损失函数是它的极大似然函数:

L_{\theta}(x)=\prod_{i=1}^{m}h_{\theta}(x^{i};\theta)^{yi}*(1-h_{\theta}(x^{i};\theta)^{(1-yi)}

在这里有一点需要说明:为什么使用交叉熵损失函数?

将极大似然函数取对数以后等同于对数损失函数。在逻辑回归这个模型下,对数损失函数的训练求解参数的速度是比较快的。大家可以看参数更新的公式:

这个式子的更新速度只和 x_{i}^{j} 、 y^{i} 相关。和sigmoid函数本身的梯度无关,这样更新的速度是可以自始至终都比较的稳定。至于为什么不用平方损失函数,使用平方损失函数的话梯度更新的速度和sigmod函数本身的梯度是很相关的。sigmod函数在它在定义域内的梯度都不大于0.25。这样训练会非常的慢。

  • 逻辑回归的求解方法

极大似然函数无法直接求解,我们一般通过对该函数进行梯度下降来不断逼近最优解。梯度下降主要有BGD、SGD、MBGD三种方法。

BGD会获得全局最优解,缺点是在更新每个参数的时候需要遍历所有的数据,计算量会很大,并且会有很多的冗余计算,导致的结果是当数据量大的时候,每个参数的更新都会很慢。

SGD以高方差频繁更新,优点是使得sgd会跳到新的和潜在更好的局部最优解,缺点是使得收敛到局部最优解的过程更加的复杂。

MBGD降结合了sgd和batch gd的优点,每次更新的时候使用n个样本。减少了参数更新的次数,可以达到更加稳定收敛结果,一般在深度学习当中可以采用这种方法,将数据一个batch一个batch的送进去训练。

不过在使用上述三种方法时有两个问题是不可避免的:

1、如何选择合适的learning_rate。自始至终保持同样的学习率显然是不太合适的,开始学习参数的时候,距离最优解比较远,需要一个较大的学习率能够快速的逼近最优解。当参数接近最优解时,继续保持最初的学习率,容易越过最优点,在最优点附近震荡。

2、如何对参数选择合适的学习率。对每个参数都保持的同样的学习率也是很不合理的。有些参数更新频繁,那么学习率可以适当小一点。有些参数更新缓慢,那么学习率就应该大一点。

针对以上问题,就提出了诸如Adam,动量法等优化方法,在上一篇文章中也给出了相关的想法,可以参考两张gif。

  • 逻辑回归的目的

该函数的目的便是将数据二分类,提高准确率。

  • 逻辑回归如何达到分类的目的

逻辑回归作为回归应用到分类,划定一个阈值,左右为两类。多分类问题使用softmax函数。

2、逻辑回归在训练的过程当中,如果有很多的特征高度相关或者说有一个特征重复了100遍,会造成怎样的影响?

如果在损失函数最终收敛的情况下,有很多特征高度相关也不会影响分类器的效果。对特征本身来说的话,假设只有一个特征,在不考虑采样的情况下,你现在将它重复100遍。训练以后完以后,数据还是这么多,但是这个特征本身重复了100遍,实质上将原来的特征分成了100份,每一个特征都是原来特征权重值的百分之一。如果在随机采样的情况下,其实训练收敛完以后,还是可以认为这100个特征和原来那一个特征扮演的效果一样,只是可能中间很多特征的值正负相消了。

3、为什么我们还是会在训练的过程当中将高度相关的特征去掉?

将高度相关的特征去掉会让模型的可解释性更好,能够大大提高训练的速度。如果模型当中有很多特征高度相关的话,就算损失函数本身收敛了,但实际上参数是没有收敛的,这样会拉低训练的速度。其次是特征多了,本身就会增大训练的时间。

4、逻辑回归的优缺点总结

4.1、优点:

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

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

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

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

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

4.2、缺点:

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

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

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

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

猜你喜欢

转载自blog.csdn.net/hellozhxy/article/details/80885849