逻辑回归

1.逻辑回归与线性回归都属于广义线性回归模型,其区别与联系从以下几个方面比较:
逻辑回归可以看成逻辑斯蒂和回归2个概念
逻辑斯蒂是一种变量的分布方式,和常见的指数分布、高斯分布等类似,它也有自己的概率分布函数和概率密度函数,如下:
在这里插入图片描述

它们的形状如下图所示
在这里插入图片描述

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

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

 这里面其实包含了5个点 1:逻辑回归的假设,2:逻辑回归的损失函数,3:逻辑回归的求解方法,4:逻辑回归的目的,5:逻辑回归如何分类。这些问题是考核你对逻辑回归的基本了解。

3.逻辑回归的损失函数
任何的模型都是有自己的假设,在这个假设下模型才是适用的。逻辑回归的第一个基本假设是假设数据服从伯努利分布。伯努利分布有一个简单的例子是抛硬币,抛中为正面的概率是p,抛中为负面的概率是1−p.在逻辑回归这个模型里面是假设 hθ(x) 为样本为正的概率,1−hθ(x)为样本为负的概率。那么整个模型可以描述为
hθ(x;θ)=p
逻辑回归的第二个假设是假设样本为正的概率是
p=11+e−θTx
所以逻辑回归的最终形式
hθ(x;θ)=11+e−θTx
逻辑回归的损失函数
逻辑回归的损失函数是它的极大似然函数
Lθ(x)=∏i=1mhθ(xi;θ)yi∗(1−hθ(xi;θ))1−yi

4.正则化模型的评估指标
因为有的时候我们不知道减少什么特征比较好,以及我们也不希望减特征,特征越多,越能使得训练表现好嘛。正则化可以在不减少特征的情况上,保持一个好的表现。
L0 L1 L2正则化。
L1产生稀疏的特征,L2则充分利用更多的特征,特征的权重的均衡化
评价指标:
使用混淆矩阵
(1)精准率
精准率:预测结果为1的时候,预测正确的概率​
(2)召回率
我们关注的事件真实的发生的情况下,成功预测的概率

5.LR优缺点
在这里我们总结了逻辑回归应用到工业界当中一些优点:

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

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

  1. 产生新数据型:过采样小样本(SMOTE),欠采样大样本。
    过采样是通过增加样本中小类样本的数据量来实现样本均衡。其中较为简单的方式是直接复制小类样本,形成数量上的均衡。这种方法实现简单,但会由于数据较为单一而容易造成过拟合。 SMOTE过采样算法: 针对少数类样本的xi,求出其k近邻。随机选取k紧邻中一个样本记为xn。生成一个0到1之间的随机数r,然后根据Xnew = xi + r * (xn - xi)生成新数据。也可通过经过改进的抽样的方法,在少数类中加入随机噪声等生成数据。
    欠采样大样本是通过减少多数类样本的样本数量来实现样本均衡。其中比较简单直接的方法就是随机去掉一些数据来减少多数类样本的规模,但这种方法可能会丢失一些重要的信息。还有一种方法就是,假设少数类样本数量为N,那就将多数类样本分为N个簇,取每个簇的中心点作为多数类的新样本,再加上少数类的所有样本进行训练。这样就可以保证了多数类样本在特征空间的分布特性。
  2. 对原数据的权值进行改变
    通过改变多数类样本和少数类样本数据在训练时的权重来解决样本不均衡的问题,是指在训练分类器时,为少数类样本赋予更大的权值,为多数类样本赋予较小的权值。例如scikit-learn中的SVM算法,也称作penalized-SVM,可以手动设置权重。若选择balanced,则算法会设定样本权重与其对应的样本数量成反比。
  3. 通过组合集成方法解决
    通过训练多个模型的方式解决数据不均衡的问题,是指将多数类数据随机分成少数类数据的量N份,每一份与全部的少数类数据一起训练成为一个分类器,这样反复训练会生成很多的分类器。最后再用组合的方式(bagging或者boosting)对分类器进行组合,得到更好的预测效果。简单来说若是分类问题可采用投票法,预测问题可以采用平均值。这个解决方式需要很强的计算能力以及时间,但效果较好,相当于结合了组合分类器的优势。
  4. 通过特征选择
    在样本数据较为不均衡,某一类别数据较少的情况下,通常会出现特征分布很不均衡的情况。例如文本分类中,有大量的特征可以选择。因此我们可以选择具有显著区分能力的特征进行训练,也能在一定程度上提高模型的泛化效果。

7、sklearn
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)

penalty:’l1’ or ‘l2’ ,默认’l2’ #惩罚

dual:bool 默认False ‘双配方仅用于利用liblinear解算器的l2惩罚。’

tol: float, 默认: 1e-4 ‘公差停止标准’

C:float 默认:1.0 正则化强度, 与支持向量机一样,较小的值指定更强的正则化。

fit_intercept: bool 默认:True 指定是否应将常量(a.k.a. bias或intercept)添加到决策函数中。

intercept_scaling:float ,默认:1 仅在使用求解器“liblinear”且self.fit_intercept设置为True时有用。 在这种情况下,x变为[x,self.intercept_scaling],即具有等于intercept_scaling的常数值的“合成”特征被附加到实例矢量。 截距变为intercept_scaling * synthetic_feature_weight

class_weight: dict or ‘balanced’ 默认:None

与{class_label:weight}形式的类相关联的权重。 如果没有给出,所有类都应该有一个权重。“平衡”模式使用y的值自动调整与输入数据中的类频率成反比的权重,如n_samples /(n_classes * np.bincount(y))。请注意,如果指定了sample_weight,这些权重将与sample_weight(通过fit方法传递)相乘。

random_state:int,RandomState实例或None,可选,默认值:None

在随机数据混洗时使用的伪随机数生成器的种子。 如果是int,则random_state是随机数生成器使用的种子; 如果是RandomState实例,则random_state是随机数生成器; 如果为None,则随机数生成器是np.random使用的RandomState实例。 在求解器=='sag’或’liblinear’时使用。

solver:{‘newton-cg’,’lbfgs’,’liblinear’,’sag’,’saga’}

默认: ‘liblinear’ 在优化问题中使用的算法。

对于小型数据集,'liblinear’是一个不错的选择,而’sag’和’saga’对于大型的更快。

对于多类问题,只有’newton-cg’,‘sag’,'saga’和’lbfgs’处理多项损失; 'liblinear’仅限于’ovr’方案。‘newton-cg’,'lbfgs’和’sag’只处理L2惩罚,而’liblinear’和’saga’处理L1惩罚。请注意,“sag”和“saga”快速收敛仅在具有大致相同比例的要素上得到保证。 您可以使用sklearn.preprocessing中的缩放器预处理数据。

max_iter: int 默认:100 仅适用于newton-cg,sag和lbfgs求解器。 求解器收敛的最大迭代次数。

muti_class:str,{‘ovr’:’multinomial’},默认:’ovr’

多类选项可以是’ovr’或’multinomial’。 如果选择的选项是’ovr’,那么二元问题适合每个标签。 另外,最小化损失是整个概率分布中的多项式损失拟合。 不适用于liblinear解算器。

verbose: int,默认:0 对于liblinear和lbfgs求解器,将verbose设置为任何正数以表示详细程度。

warm_start:bool 默认:False

设置为True时,重用上一次调用的解决方案以适合初始化,否则,只需擦除以前的解决方案。 对于liblinear解算器没用。

版本0.17中的新功能:warm_start支持lbfgs,newton-cg,sag,saga求解器。

n_jobs: int,默认:1

如果multi_class =‘ovr’“,则在对类进行并行化时使用的CPU核心数。 无论是否指定’multi_class’,当solver设置为’liblinear’时,都会忽略此参数。 如果给定值-1,则使用所有核心。

参考:

1.统计机器学习(李航)
2.https://blog.csdn.net/dp_bupt/article/details/50560789
3.https://blog.csdn.net/lx_ros/article/details/81263209
4.https://www.jianshu.com/p/76dce1fca85b

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值