逻辑回归算法相信很多人都很熟悉,也算是我比较熟悉的算法之一了,毕业论文当时的项目就是用的这个算法。这个算法可能不想随机森林、SVM、神经网络、GBDT等分类算法那么复杂那么高深的样子,可是绝对不能小看这个算法,因为它有几个优点是那几个算法无法达到的,一是逻辑回归的算法已经比较成熟,预测较为准确;二是模型求出的系数易于理解,便于解释,不属于黑盒模型,尤其在银行业,80%的预测是使用逻辑回归;三是结果是概率值,可以做ranking model;四是训练快。当然它也有缺点,分类较多的y都不是很适用。下面我先具体介绍下这个模型。

一、逻辑回归LR介绍

首先要搞清楚当你的目标变量是分类变量时,才会考虑逻辑回归,并且主要用于两分类问题。举例来说医生希望通过肿瘤的大小x1、长度x2、种类x3等等特征来判断病人的这个肿瘤是恶性肿瘤还是良性肿瘤,这时目标变量y就是分类变量(0良性肿瘤,1恶性肿瘤)。显然我们希望像保留像线性回归一样可以通过一些列x与y之间的线性关系来进行预测,但是此时由于Y是分类变量,它的取值只能是0,1,或者0,1,2等等,不可能是负无穷到正无穷,这个问题怎么解决呢?此时引入了一个sigmoid函数,这个函数的性质,非常好的满足了,x的输入可以是负无穷到正无穷,而输出y总是[0,1],并且当x=0时,y的值为0.5,以一种概率的形式表示. x=0的时候y=0.5 这是决策边界。当你要确定肿瘤是良性还是恶性时,其实我们是要找出能够分开这两类样本的边界,叫决策边界。

而通过sigmoid函数,可以将我们喜欢的线性表示的函数嵌入其中,当theta*x得到的值大于0,则h(x)得到的概率值大于0.5时,表明属于该分类;当theta*x得到的值小于0,则h(x)小于0.5时表示不属于该分类。这样也就形成了我们看到的逻辑回归,具体如下:

其中theta是向量,

二、逻辑回归估计(最小化损失函数loss function

损失函数是在机器学习中最常出现的概念,用于衡量均方误差[(模型估计值-模型实际值)^2/ n]最小,即预测的准确性,因而需要损失函数最小,得到的参数才最优。(线性回归中的最小二乘估计也是由此而来)但因为逻辑回归的这种损失函数非凸,不能找到全局最低点。因此,需要采用另一种方式,将其转化为求最大似然,如下,具体的推导求解过程可参见博客http://blog.csdn.net/suipingsp/article/details/41822313 另一种较为好理解的方式是,如果Y=1,你胆敢给出一个h(x)很小的概率比如0.01,那么损失函数就会变得很大:

此时的损失函数变成了凸函数,Theta的求解,就是梯度下降法求最小值,此时加入的正则化项,是解决过拟合问题。(过拟合问题:如果我们的模型有非常多的特征,模型很复杂,模型对原始数据的拟合效果很好,但是丧失一般性,对新的待预测变量预测效果很差。(听过寒小阳老师举过一个很好理解的例子,就是这个学生只是强硬的记住题目,并没有掌握规律,高考不一定考的好)怎么解决呢?限制参数寺塔,损失函数加上关于theta的限制,即如果theta太多太大,则就给予惩罚。L2正则化。)

该公式将一直被迭代执行,直至达到收敛()在每一步迭代中都减小,如果某一步减少的值少于某个很小的值()(小于0.001), 则其判定收敛)或某个停止条件为止(比如迭代次数达到某个指定值或算法达到某个可以允许的误差范围)。 转换为向量的处理方法同样可参见上文博客:http://blog.csdn.net/suipingsp/article/details/41822313

三、LR应用经验

如果连续变量,注意做SCALING,缩放单位即标准化。LR对样本分布敏感,所以要注意样本的平衡性(y=1不能太少)样本量足的情况下采用下采样,不足的情况用上采样。

LR对于特征处理非常重要,常用处理手段包括,通过组合特征引入个性化因素(FM,FFM);注意特征的频度;聚类、HASH。但LR不怕特征大,GBDT比较怕。对于连续变量的离散化,可以用CART查看离散的结果,生成新的特征,再用LR。

LR和FM对于稀疏高维特征处理是无压力的,GBDT对于连续值自己会找到合适的切分点,xgboost也可以处理category类型的feature,无需one-hot,平展开的高维稀疏特征对它没好处。

算法调优方面,选择合适的正则化,正则化系数,收敛阈值e,迭代轮数,调整loss function给定不同权重;bagging或其他方式的模型融合;最优算法选择(‘newton-cg’,’lbfgs’, ‘liblinear’);bagging或其他模型融合。Sklearn中的LR实际上是liblinear的封装。

LR和SVM对于线性切分都有着比较好的表现,对于非线性切分,必须在原始数据上做一些非线性变换。LR必须做feature mapping,比如把X做个平方项,X1*X2等;SVM则需要利用核函数

模型的评价主要用ROC曲线。ROC(接受者操作特征)曲线实际上是对概率输出设置了一个门槛D,当P(C|x)>D时,事件C为真,  而ROC曲线反映了,在一系列可能门槛值下,真正率( TPR)和假正率(FPR)的值,一个好的模型必须在一个高的真正率( TPR)和一个低的假正率(FPR)中取得一个折衷水平,ROC曲线下的面积越大越好,最大为1. 

 

逻辑回归LR的更多相关文章

  1. 线性模型之逻辑回归(LR)(原理、公式推导、模型对比、常见面试点)

    参考资料(要是对于本文的理解不够透彻,必须将以下博客认知阅读,方可全面了解LR): (1).https://zhuanlan.zhihu.com/p/74874291 (2).逻辑回归与交叉熵 (3) ...

  2. 机器学习(四)—逻辑回归LR

    逻辑回归常见问题:https://www.cnblogs.com/ModifyRong/p/7739955.html 推导在笔记上,现在摘取部分要点如下: (0) LR回归是在线性回归模型的基础上,使 ...

  3. 机器学习方法(五):逻辑回归Logistic Regression,Softmax Regression

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 前面介绍过线性回归的基本知识, ...

  4. 机器学习-逻辑回归与SVM的联系与区别

    (搬运工) 逻辑回归(LR)与SVM的联系与区别 LR 和 SVM 都可以处理分类问题,且一般都用于处理线性二分类问题(在改进的情况下可以处理多分类问题,如LR的Softmax回归用在深度学习的多分类 ...

  5. 逻辑回归(LR)总结复习

    摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项 5.实现和具体例子 6.适用场合 内容: 1.算法概述 最基本的LR分类器适合于对两分类(类0,类1)目标进行分类:这个模型以样 ...

  6. 逻辑回归算法的原理及实现(LR)

    Logistic回归虽然名字叫"回归" ,但却是一种分类学习方法.使用场景大概有两个:第一用来预测,第二寻找因变量的影响因素.逻辑回归(Logistic Regression, L ...

  7. Python实现LR(逻辑回归)

    Python实现LR(逻辑回归) 运行环境 Pyhton3 numpy(科学计算包) matplotlib(画图所需,不画图可不必) 计算过程 st=>start: 开始 e=>end o ...

  8. 逻辑回归模型(Logistic Regression, LR)基础

    逻辑回归模型(Logistic Regression, LR)基础   逻辑回归(Logistic Regression, LR)模型其实仅在线性回归的基础上,套用了一个逻辑函数,但也就由于这个逻辑函 ...

  9. 细品 - 逻辑回归(LR)

    1. LR的直观表述 1.1 直观表述 今天我们来深入了解一个人见人爱,花见花开,工业界为之疯狂,学术界..额,好像学术界用的不多哎.不过没关系,就算学术界用的不多也遮不住它NB的光芒,它就是LR模型 ...

随机推荐

  1. SPOJ GSS1 Can you answer these queries I[线段树]

    Description You are given a sequence A[1], A[2], ..., A[N] . ( |A[i]| ≤ 15007 , 1 ≤ N ≤ 50000 ). A q ...

  2. Hibernate中Java对象的三种状态

                                                                                     Hibernate中Java对象的三种 ...

  3. [自学总结] Unity5.3 API 之 Audio Mixer

    unity5.3 - API - class AudioMixer 和 class AudioMixerGrou问题:之前版本声音的渐入渐出太生硬,声音的特效需要自己手动编写.分析:5.0版本重大更新 ...

  4. 鼠标/手指相对于元素的坐标(px转百分比)

    鼠标/手指相对于元素的坐标:鼠标或手指当前的位置 - 元素距离文档的位置 px转百分比:px / 文档尺寸 * 100 获取手指触摸在屏幕中相对于元素的坐标(px转百分比): $('#div').on ...

  5. 基于spring-boot的rest微服务框架

    周末在家研究spring-boot,参考github上的一些开源项目,整了一个rest微服务框架,取之于民,用之于民,在github上开源了,地址如下: https://github.com/yjmy ...

  6. 安卓开发:一种快速提取安卓app的UI图标资源的方法

    在做安卓设计时,找美工设计界面的漂亮图标是必不可少的,但是对于一个初创团队来说,请一个UI的成本其实也挺高的,此时对于一个偏技术的产品经理来说,从其他成熟的产品的apk中提取图标就是一个很便捷的方法, ...

  7. IT职场人的“存在主义”

      人生在世,最重要的一条就是:找准你的位置.也就是,你的定位问题. 就在前两天,参加一次社交活动,一知名培训师回顾过往,感慨地说:一个好的培训师,一定要定位好自己的客户群,根据他们的需求做好自己的定 ...

  8. 51Nod--1010 只包含235的数

    51Nod: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1010 1010 只包含因子2 3 5的数 基准时间限制:1 ...

  9. 【Python】[面性对象编程] 获取对象信息,实例属性和类属性

    获取对象信息1.使用isinstance()判断class类型2.dir() 返回一个对象的所有属性和方法3.如果试图获取不存在的对象会抛出异常[AttributeError]4.正确利用对象内置函数 ...

  10. VS2010 MFC对Excel的操作

    这是帮别人做项目遇到的一个问题,的那个是纠结了老长时间,本以为是一件很轻松的事... 首先,这里采用了OLE来对Excel进行操作,网上其实有大把的例子,虽然都可以运行,但是并不能满足项目要求,其实我 ...