您的位置:首页 > 其它

逻辑回归算法梳理

2019-03-03 22:02 260 查看
  1. 逻辑回归与线性回归的联系与区别
    逻辑回归与线性回归都属于广义线性回归模型,其区别与联系从以下几个方面比较:
    分类与回归:回归模型就是预测一个连续变量(如降水量,价格等)。在分类问题中,预测属于某类的概率,可以看成回归问题。这可以说是使用回归算法的分类方法。
    输出:直接使用线性回归的输出作为概率是有问题的,因为其值有可能小于0或者大于1,这是不符合实际情况的,逻辑回归的输出正是[0,1]区间。见下图,
    参数估计方法:
    线性回归中使用的是最小化平方误差损失函数,对偏离真实值越远的数据惩罚越严重。这样做会有什么问题呢?假如使用线性回归对{0,1}二分类问题做预测,则一个真值为1的样本,其预测值为50,那么将会对其产生很大的惩罚,这也和实际情况不符合,更大的预测值说明为1的可能性越大,而不应该惩罚的越严重。
    逻辑回归使用对数似然函数进行参数估计,使用交叉熵作为损失函数,对预测错误的惩罚是随着输出的增大,逐渐逼近一个常数,这就不存在上述问题了1也正是因为使用的参数估计的方法不同,线性回归模型更容易受到异常值(outlier)的影响,有可能需要不断变换阈值(threshold),线性回归分类的情况见下面两图:



参数解释:
· 线性回归中,独立变量的系数解释十分明了,就是保持其他变量不变时,改变单个变量因变量的改变量。
· 逻辑回归中,自变量系数的解释就要视情况而定了,要看选用的概率分布是什么,如二项式分布,泊松分布等
2. 逻辑回归的原理
logistic回归又称logistic回归分析是一个分类算法,是一种广义的线性回归分析模型,它可以处理二元分类以及多元分类。常用于处理分类问题。
3. 逻辑回归损失函数推导及优化


  1. 正则化与模型评估指标
    正则化
    对于线性回归或逻辑回归的损失函数构成的模型,可能会有些权重很大,有些权重很小,导致过拟合,使得模型的复杂度提高,泛化能力较差, 加入正则化项可能解决问题。
    正则化是结构风险最小化策略的实现,是在经验风险上加一个正则化项或惩罚项。正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化项就越大。
    逻辑回归带L2正则项的损失函数:
    这个函数依然可以用梯度下降求解正则化后的梯度下降算法θθ \thetaθ的更新变为:


模型评估指标分类器的评价指标主要有:
· Accuracy
· Precision
· Recall
· F1 score
· ROC曲线和AUC
· PR曲线
5. 逻辑回归的优缺点
优点: 实现十分简单分类时计算量非常小,训练速度快,存储资源低可解释性强,可控性高以概率的形输出结果,可以做排序
缺点: 容易欠拟合,分类精度不高只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分逻辑回归本身无法筛选特征。有时候,会用gbdt来筛选特征,然后再进行逻辑回归。
6. 样本不均衡问题解决办法
类别数据不均衡问题:数据集中,每个类别下的样本数目相差很大。一般而已,如果类别不平衡比例超过4:1,那么其分类器会大大地因为数据不平衡性而无法满足分类要求的。因此在构建分类模型之前,需要对分类不均衡性问题进行处理。
处理方法如下:
重采样技术(Resampling)
1.1 随机欠采样(Random Under-Sampling): 通过随机地消除占多数的类的样本来平衡类分布;直到多数类和少数类的实例实现平衡,目标才算达成。
1.2 随机过采样(Random Over-Sampling ):过采样(Over-Sampling)通过随机复制少数类来增加其中的实例数量,从而可增加样本中少数类的代表性。
1.3 基于聚类的过采样(Cluster-Based Over Sampling):K-均值聚类算法独立地被用于少数和多数类实例。这是为了识别数据集中的聚类。随后,每一个聚类都被过采样以至于相同类的所有聚类有着同样的实例数量,且所有的类有着相同的大小。
1.4 信息性过采样:合成少数类过采样技术(SMOTE):这一技术可用来避免过拟合——当直接复制少数类实例并将其添加到主数据集时。从少数类中把一个数据子集作为一个实例取走,接着创建相似的新合成的实例。这些合成的实例接着被添加进原来的数据集。新数据集被用作样本以训练分类模型。
算法集成技术(Algorithmic Ensemble Techniques)
上述部分涉及通过重采样原始数据提供平衡类来处理不平衡数据。集成方法的主要目的是提高单个分类器的性能。该方法从原始数据中构建几个两级分类器,然后整合它们的预测。
7. Sklearn参数
Sklearn.linear_model.LogisticRegression(penalty=’l2’, dual=False, tol=0.0001, C=1.0, fit_intercept=True,intercept_scaling=1, class_weight=None, random_state=None, solver=’liblinear’, max_iter=100, multi_class=’ovr’,verbose=0, warm_start=False, n_jobs=1)
https://blog.csdn.net/qq_38683692/article/details/82533460

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: