机器学习之线性回归以及Logistic回归
1、线性回归
回归的目的是预测数值型数据的目标值。目标值的计算是通过一个线性方程得到的,这个方程称为回归方程,各未知量(特征)前的系数为回归系数,求这些系数的过程就是回归。
对于普通线性回归使用的损失函数一般为平方误差。把其用最小二乘法进行优化得到的关于系数w求导所得到的矩阵形式的表达式求得的w便为最优解了。
线性回归可以参考:https://www.cnblogs.com/pinard/p/6004041.html
2.Logistic回归
逻辑回归假设数据服从伯努利分布,是一种广义的线性回归模型,以最大化条件概率为学习策略,以对数似然函数为损失函数,运用梯度下降法来优化参数,以sigmoid函数为分类决策函数,进而达到将数据二分类的目的。
Logistic回归是一种分类算法,既可以处理二分类也可以处理多分类,一般把其用于二分类的分类器。Logistic本质上是一个基于条件概率的判别模型(DiscriminativeModel)。利用了Sigmoid函数值域在[0,1]这个特性,以0.5作为分界线。利用了线性回归的原理,只不过线性回归最后求得的是数值型的结果,而Logistic回归最后会利用sigmoid函数把求得的结果转化为0-1之间的值,把大于0.5的判定为1,小于0.5的判定为0。Logistic回归的损失函数是最大似然估计的直接产物。
3.Logistic回归中为什么选用sigmoid函数
先看一下浅层较好理解的解释:
逻辑回归(LR)模型的主要任务是给定一些历史的{X,Y},其中X是样本n个特征值,Y的取值是{0,1}代表正例与负例,通过对这些历史样本的学习,从而得到一个数学模型,给定一个新的X,能够预测出Y。LR模型是一个二分类模型,即对于一个X,预测其发生或不发生。但事实上,对于一个事件发生的情况,往往不能得到100%的预测,因此LR可以得到一个事件发生的可能性,超过50%则认为事件发生,低于50%则认为事件不发生.
从LR的目的上来看,在选择函数时,有两个条件是必须要满足的:
1)取值范围在0~1之间。
2.)对于一个事件发生情况,50%是其结果的分水岭,选择函数应该在0.5中心对称。
从这两个条件来看,Sigmoid很好的符合了LR的需求。
但是符合以上两个条件的函数有很多,但是为什么选用Sigmoid函数?
其中一个较好的解释是从最大熵方面进行解释的:
最大熵原理是概率模型(LR也是一个概率模型)学习的一个准则,最大熵原理认为,学习概率模型时,在所有可能的概率模型中,熵最大的模型是最好的模型。
在我们给定了某些假设之后,我们希望在给定假设前提下,分布尽可能的均匀。对于Logistic Regression,我们假设了对于{X,Y},我们预测的目标是P(Y|X),并假设认为{X,Y}服从伯努利分布,所以我们只需要知道P(Y|X);其次我们需要一个线性模型,所以P(Y|X)=f(wx)。接下来我们就只需要知道f是什么就行了。而我们可以通过最大熵原则推出的这个f,就是sigmoid。具体推导可以参考论文(http://www.win-vector.com/dfiles/LogisticRegressionMaxEnt.pdf)
最后的总结:
为什么要选用sigmoid函数呢?为什么不选用其他函数,如probit函数?
其实,无论是sigmoid函数还是probit函数都是广义线性模型的连接函数(link function)中的一种。选用联接函数是因为,从统计学角度而言,普通线性回归模型是基于响应变量和误差项均服从正态分布的假设,且误差项具有零均值,同方差的特性。但是,例如分类任务(判断肿瘤是否为良性、判断邮件是否为垃圾邮件),其响应变量一般不服从于正态分布,其服从于二项分布,所以选用普通线性回归模型来拟合是不准确的,因为不符合假设,所以,我们需要选用广义线性模型来拟合数据,通过标准联接函数(canonical link or standard link function)来映射响应变量,如:正态分布对应于恒等式,泊松分布对应于自然对数函数,二项分布对应于logit函数(二项分布是特殊的泊松分布)。因此,说了这么多是想表达联接函数的选取除了必须适应于具体的研究案例,不用纠结于为什么现有的logistic回归会选用sigmoid函数,而不选用probit函数,虽然网上也有不少说法说明为什么选择sigmoid函数,例如“该函数有个漂亮的S型”,“在远离x=0的地方函数的值会很快接近0/1”,“函数在定义域内可微可导”,这些说法未免有些“马后炮”的感觉,哪个说法仔细分析都不能站住脚,我觉得选用sigmoid函数也就是因为该函数满足分类任务,用的人多了也就成了默认说法,这跟给物体取名字有点类似的感觉,都有些主观因素在其中。
4、为什么LR中经常会对连续数据离散化
1)稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展。
2) 离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰。
3)逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合。
4)离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力。
5)特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问。
总的来说:能够加快计算速度,能够增加模型的泛化能力,降低噪声对模型的的影响。
5.LR需不需要对数据进行预处理
这里的预处理是指对数据进行标准化处理,对于LR,不进行预处理也行,但是对数据进行标准化处理能够加快模型的收敛速度。
机器学习之线性回归以及Logistic回归的更多相关文章
- 机器学习算法(优化)之一:梯度下降算法、随机梯度下降(应用于线性回归、Logistic回归等等)
本文介绍了机器学习中基本的优化算法—梯度下降算法和随机梯度下降算法,以及实际应用到线性回归.Logistic回归.矩阵分解推荐算法等ML中. 梯度下降算法基本公式 常见的符号说明和损失函数 X :所有 ...
- 对线性回归,logistic回归和一般回归的认识
原文:http://www.cnblogs.com/jerrylead/archive/2011/03/05/1971867.html#3281650 对线性回归,logistic回归和一般回归的认识 ...
- 对线性回归,logistic回归和一般回归
对线性回归,logistic回归和一般回归 [转自]:http://www.cnblogs.com/jerrylead JerryLead 2011年2月27日 作为一个机器学习初学者,认识有限,表述 ...
- 回归——线性回归,Logistic回归,范数,最大似然,梯度,最小二乘……
写在前面:在本篇博客中,旨在对线性回归从新的角度考虑,然后引入解决线性回归中会用到的最大似然近似(Maximum Likelihood Appropriation-MLA) 求解模型中的参数,以及梯度 ...
- 线性回归,logistic回归和一般回归
1 摘要 本报告是在学习斯坦福大学机器学习课程前四节加上配套的讲义后的总结与认识.前四节主要讲述了回归问题,回归属于有监督学习中的一种方法.该方法的核心思想是从连续型统计数据中得到数学模型,然后将该数 ...
- 线性回归、Logistic回归、Softmax回归
线性回归(Linear Regression) 什么是回归? 给定一些数据,{(x1,y1),(x2,y2)…(xn,yn) },x的值来预测y的值,通常地,y的值是连续的就是回归问题,y的值是离散的 ...
- 在matlab中实现线性回归和logistic回归
本文主要讲解在matlab中实现Linear Regression和Logistic Regression的代码,并不涉及公式推导.具体的计算公式和推导,相关的机器学习文章和视频一大堆,推荐看Andr ...
- 1.线性回归、Logistic回归、Softmax回归
本次回归章节的思维导图版总结已经总结完毕,但自我感觉不甚理想.不知道是模型太简单还是由于自己本身的原因,总结出来的东西感觉很少,好像知识点都覆盖上了,但乍一看,好像又什么都没有.不管怎样,算是一次尝试 ...
- 线性回归,logistic回归分类
学习过程 下面是一个典型的机器学习的过程,首先给出一个输入数据,我们的算法会通过一系列的过程得到一个估计的函数,这个函数有能力对没有见过的新数据给出一个新的估计,也被称为构建一个模型.就如同上面的线性 ...
随机推荐
- springboot mail整合freemark实现动态生成模板
目标:1:springboot 整合 mail2: mail 使用freemark 实现模板动态生成(就是通过字符串生成模板,不需要在工程中写入固定模板)3: springboot 整合aop 实现日 ...
- dom元素上添加断点(使用dom breakpoint找到修改属性的javascript代码)
使用dom breakpoint能快速找到修改了某一个dom element的JavaScript code位于何处.在Chrome development tool里,选中想要inspect的dom ...
- 图解Java常用数据结构
最近在整理数据结构方面的知识, 系统化看了下 Java 中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于 jdk8, 可能会有些特性与 jdk7 之前不相同, 例如 LinkedList ...
- ASP.NET Core Identity 的示例
1. appsettings.json { "ConnectionStrings": { "DefaultConnection": "Server=( ...
- 数据库——SQL-SERVER练习(1)连接与子查询
一.实验准备 1.复制实验要求文件及“CREATE-TABLES.SQL”文件, 粘贴到本地机桌面. 2.启动SQL-SERVER服务. 3. 运行查询分析器, 点击菜单<文件>/< ...
- python3 对list对象的增删改查
class peoples: people_list =[] class people: name='' age=-1 def __init__(self,name,age): self.name = ...
- WebService发布服务例子
import javax.jws.WebMethod; import javax.jws.WebService; @WebService public interface WebServiceI { ...
- swift(五)swift的函数
/** * 函数的定义和调用 */ func showIntegerArray(array:[Int]) { for a in array { println("\(a)") } ...
- ABP进阶教程7 - 功能按钮
点这里进入ABP进阶教程目录 下载插件 打开Datatables官网(https://datatables.net/download/) 勾选Extensions/Buttons,下载插件,复制到JD ...
- 有趣的bug——Java静态变量的循环依赖
背景 是的,标题没有错误,不是Spring Bean的循环依赖,而是静态变量之间的循环依赖. 近期的项目均是简单的Maven项目,通过K8S部署在阿里云上,其配置文件读取规则如下所示: (1) 优先读 ...