任务2-逻辑回归算法梳理

逻辑回归的常见面试点总结:https://www.cnblogs.com/ModifyRong/p/7739955.html

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

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

参考原文:https://blog.csdn.net/lx_ros/article/details/81263209

逻辑回归:线性回归可以预测连续值,但是不能解决分类问题,我们需要根据预测的结果判定其属于正类还是负类。所以逻辑回归就是将线性回归的(−∞,+∞)结果,通过sigmoid函数映射到(0,1)之间。

线性回归决策函数:hθx=θTx

将其通过sigmoid函数,获得逻辑回归的决策函数:hθx=11+e-θTX

逻辑回归与线性回归,其区别与联系从以下几个方面比较:

线性回归是回归算法,逻辑回归是分类算法

  1. 分类与回归:回归模型就是预测一个连续变量(如降水量,价格等)。在分类问题中,预测属于某类的概率,可以看成回归问题。这可以说是使用回归算法的分类方法。
  2. 输出:直接使用线性回归的输出作为概率是有问题的,因为其值有可能小于0或者大于1,这是不符合实际情况的,逻辑回归的输出正是[0,1]区间。
  3. 参数估计方法

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

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

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

4.参数解释:

1.线性回归中,独立变量的系数解释十分明了,就是保持其他变量不变时,改变单个变量因变量的改变量。

2. 逻辑回归中,自变量系数的解释就要视情况而定了,要看选用的概率分布是什么,如二项式分布,泊松分布等

  1. 逻辑回归的原理

参考文档:https://blog.csdn.net/qq_38923076/article/details/82925183

(1)找一个合适的预测函数(Andrew Ng的公开课中称为hypothesis),一般表示为h函数,该函数就是我们需要找的分类函数,它用来预测输入数据的判断结果。这个过程是非常关键的,需要对数据有一定的了解或分析,知道或者猜测预测函数的“大概”形式,比如是线性函数还是非线性函数。

(2)构造一个Cost函数(损失函数),该函数表示预测的输出(h)与训练数据类别(y)之间的偏差,可以是二者之间的差(h-y)或者是其他的形式。综合考虑所有训练数据的“损失”,将Cost求和或者求平均,记为J(θ)函数,表示所有训练数据预测值与实际类别的偏差。

(3)显然,J(θ)函数的值越小表示预测函数越准确(即h函数越准确),所以这一步需要做的是找到J(θ)函数的最小值。找函数的最小值有不同的方法,Logistic Regression实现时有的是梯度下降法(Gradient Descent)。

参考文档:http://m.elecfans.com/article/691754.html

逻辑回归工作原理:

Logistic 回归通过使用其固有的 logistic 函数估计概率,来衡量因变量(我们想要预测的标签)与一个或多个自变量(特征)之间的关系。然后这些概率必须二值化才能真地进行预测。这就是 logistic 函数的任务,也称为 sigmoid 函数。Sigmoid 函数是一个 S 形曲线,它可以将任意实数值映射到介于 0 和 1 之间的值,但并不会取到 0/1。然后使用阈值分类器将 0 和 1 之间的值转换为 0 或 1。

       我们希望随机数据点被正确分类的概率最大化,这就是最大似然估计。最大似然估计是统计模型中估计参数的通用方法。

你可以使用不同的方法(如优化算法)来最大化概率。牛顿法也是其中一种,可用于查找许多不同函数的最大值(或最小值),包括似然函数。也可以用梯度下降法代替牛顿法。

  1. 逻辑回归损失函数推导及优化

逻辑回归损失函数推导https://blog.csdn.net/qq_28900249/article/details/83104155

逻辑回归损失函数优化https://www.jianshu.com/p/699a13c9a253

4.正则化和模型评估指标

参考文档:https://blog.csdn.net/m0_37952909/article/details/79686573

正则化

  1. 什么是正则化:正则化就是在损失函数后加上一个正则化项(惩罚项),其实就是常说的结构风险最小化策略,即经验风险(损失函数)加上正则化。一般模型越复杂,正则化值越大,正则化项是用来对模型中某些参数进行约束。
  2. 如何理解正则化:正则化其实就是带约束条件的优化问题,为什么要正则化,就是对目标函数加上一个约束条件,这类似于带约束条件的朗格拉日乘数法。
  3. 正则化有什么作用:

L1正则化可以产生稀疏权重矩阵,即大部分w为0,只有少数w非0,可以用于特征选择

L2正则化可以防止模型过拟合

模型评估指标:

参考文档:http://www.cnblogs.com/zongfa/p/9431807.html

分类问题模型评估指标汇总:

1. 混淆矩阵

混淆矩阵是监督学习中的一种可视化工具,主要用于比较分类结果和实例的真实信息。矩阵中的每一行代表实例的预测类别,每一列代表实例的真实类别。

2、准确率(Accuracy

准确率是最常用的分类性能指标。
Accuracy = (TP+TN)/(TP+FN+FP+TN)

即正确预测的正反例数 /总数

3、精确率(Precision

精确率容易和准确率被混为一谈。其实,精确率只是针对预测正确的正样本而不是所有预测正确的样本。表现为预测出是正的里面有多少真正是正的。可理解为查准率。Precision = TP/(TP+FP)

即正确预测的正例数 /预测正例总数

4、召回率(Recall

 

召回率表现出在实际正样本中,分类器能预测出多少。与真正率相等,可理解为查全率。
Recall = TP/(TP+FN),即正确预测的正例数 /实际正例总数

5F1 score

F值是精确率和召回率的调和值,更接近于两个数较小的那个,所以精确率和召回率接近时,F值最大。很多推荐系统的评测指标就是用F值的。
2/F1 = 1/Precision + 1/Recall

6ROC曲线

逻辑回归里面,对于正负例的界定,通常会设一个阈值,大于阈值的为正类,小于阈值为负类。如果我们减小这个阀值,更多的样本会被识别为正类,提高正类的识别率,但同时也会使得更多的负类被错误识别为正类。为了直观表示这一现象,引入ROC。根据分类结果计算得到ROC空间中相应的点,连接这些点就形成ROC curve,横坐标为False Positive Rate(FPR假正率),纵坐标为True Positive Rate(TPR真正率)

7AUC

AUCArea Under Curve)被定义为ROC曲线下的面积(ROC的积分),通常大于0.5小于1。随机挑选一个正样本以及一个负样本,分类器判定正样本的值高于负样本的概率就是 AUC 值。

8PR曲线

PR曲线的横坐标是精确率P,纵坐标是召回率R

5.逻辑回归的优缺点

参考文档:https://www.cnblogs.com/ModifyRong/p/7739955.html

   逻辑回归应用到工业界当中一些优点:

  • 形式简单,模型的可解释性非常好。从特征的权重可以看到不同的特征对最后结果的影响,某个特征的权重值比较高,那么这个特征最后对结果的影响会比较大。
  • 模型效果不错。在工程上是可以接受的(作为baseline),如果特征工程做的好,效果不会太差,并且特征工程可以大家并行开发,大大加快开发的速度。
  • 训练速度较快。分类的时候,计算量仅仅只和特征的数目相关。并且逻辑回归的分布式优化sgd发展比较成熟,训练的速度可以通过堆机器进一步提高,这样我们可以在短时间内迭代好几个版本的模型。
  • 资源占用小,尤其是内存。因为只需要存储各个维度的特征值。
  • 方便输出结果调整。逻辑回归可以很方便的得到最后的分类结果,因为输出的是每个样本的概率分数,我们可以很容易的对这些概率分数进行cutoff,也就是划分阈值(大于某个阈值的是一类,小于某个阈值的是一类)

      但是逻辑回归本身也有许多的缺点:

  • 准确率并不是很高。因为形式非常的简单(非常类似线性模型),很难去拟合数据的真实分布。
  • 很难处理数据不平衡的问题。举个例子:如果我们对于一个正负样本非常不平衡的问题比如正负样本比 10000:1.我们把所有样本都预测为正也能使损失函数的值比较小。但是作为一个分类器,它对正负样本的区分能力不会很好。
  • 处理非线性数据较麻烦。逻辑回归在不引入其他方法的情况下,只能处理线性可分的数据,或者进一步说,处理二分类的问题
  • 逻辑回归本身无法筛选特征。有时候,我们会用gbdt来筛选特征,然后再上逻辑回归。

 

6.样本不均衡问题解决办法

参考文档:https://blog.csdn.net/zhangf666/article/details/78860376

1、重新采样训练集

可以使用不同的数据集。有两种方法使不平衡的数据集来建立一个平衡的数据集——欠采样和过采样。

1.1. 欠采样

欠采样是通过减少丰富类的大小来平衡数据集,当数据量足够时就该使用此方法。通过保存所有稀有类样本,并在丰富类别中随机选择与稀有类别样本相等数量的样本,可以检索平衡的新数据集以进一步建模。

1.2. 过采样

相反,当数据量不足时就应该使用过采样,它尝试通过增加稀有样本的数量来平衡数据集,而不是去除丰富类别的样本的数量。通过使用重复、自举或合成少数类过采样等方法(SMOTE)来生成新的稀有样品。

注意到欠采样和过采样这两种方法相比而言,都没有绝对的优势。这两种方法的应用取决于它适用的用例和数据集本身。另外将过采样和欠采样结合起来使用也是成功的。

2、使用K-fold交叉验证

值得注意的是,使用过采样方法来解决不平衡问题时应适当地应用交叉验证。这是因为过采样会观察到罕见的样本,并根据分布函数应用自举生成新的随机数据,如果在过采样之后应用交叉验证,那么我们所做的就是将我们的模型过拟合于一个特定的人工引导结果。这就是为什么在过度采样数据之前应该始终进行交叉验证,就像实现特征选择一样。只有重复采样数据可以将随机性引入到数据集中,以确保不会出现过拟合问题。

K-fold交叉验证就是把原始数据随机分成K个部分,在这K个部分中选择一个作为测试数据,剩余的K-1个作为训练数据。交叉验证的过程实际上是将实验重复做K次,每次实验都从K个部分中选择一个不同的部分作为测试数据,剩余的数据作为训练数据进行实验,最后把得到的K个实验结果平均。

3、转化为一分类问题

对于二分类问题,如果正负样本分布比例极不平衡,我们可以换一个完全不同的角度来看待问题:把它看做一分类(One Class Learning)或异常检测(Novelty Detection)问题。这类方法的重点不在于捕捉类间的差别,而是为其中一类进行建模,经典的工作包括One-class SVM等

4、组合不同的重采样数据集

成功泛化模型的最简单方法是使用更多的数据,问题是像逻辑回归或随机森林这样开箱即用的分类器,倾向于通过舍去稀有类来泛化模型。一个简单的最佳实践是建立n个模型,每个模型使用稀有类别的所有样本和丰富类别的n个不同样本。

5、用不同比例重新采样

方法4 可以很好地将稀有类别和丰富类别之间的比例进行微调,最好的比例在很大程度上取决于所使用的数据和模型。但是,不是在整体中以相同的比例训练所有模型,所以值得尝试合并不同的比例。如果10个模型被训练,有一个模型比例为1:1(稀有:丰富)和另一个1:3甚至是2:1的模型都是有意义的。一个类别获得的权重依赖于使用的模型。

6、多模型Bagging

7、集群丰富类

Sergey Quora提出了一种优雅的方法,他建议不要依赖随机样本来覆盖训练样本的种类,而是将r个群体中丰富类别进行聚类,其中r为r中的例数。每个组只保留集群中心(medoid)。然后,基于稀有类和仅保留的类别对该模型进行训练。

8、设计适用于不平衡数据集的模型

所有之前的方法都集中在数据上,并将模型保持为固定的组件。但事实上,如果设计的模型适用于不平衡数据,则不需要重新采样数据,著名的XGBoost已经是一个很好的起点,因此设计一个适用于不平衡数据集的模型也是很有意义的。

通过设计一个代价函数来惩罚稀有类别的错误分类而不是分类丰富类别,可以设计出许多自然泛化为稀有类别的模型。例如,调整SVM以惩罚稀有类别的错误分类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值