极大似然估计和最大后验估计_高斯分布的最大后验估计_lgb_love的博客-程序员秘密

技术标签: 机器学习  

https://baijiahao.baidu.com/s?id=1593811166204755239&wfr=spider&for=pc

机器学习中,一般只得到业务产生的数据集D,机器学习目的是通过数据D了解该项业务的过去(建模)和未来(预测和分类)。但你手头上只有数据集D,没有其他任何辅助信息,那么如何建模?

1.概率假设合理吗?

我们总是假设数据集D由某种概率分布生成(数据生成模型),甚至假设数据集D由高斯分布生成,一旦确定了高斯分布的参数,相当于我们掌握了数据的生成机制,这样就能预测业务的未来。但是,这种假设总是让人看起来不放心,这种假设合理吗?幸运的是,概率论里的中心极限定理保证了这种假设的合理性,中心极限定理表明,只要数据集D足够大,就可认为它由高斯分布生成。下图充分说明了这一点。

样本足够大时服从高斯分布

因此,即使数据集D的样本不够大,我们也会假设数据集D服从高斯分布,这时没有人会怀疑假设的合理性。高斯分布由期望和方差两个参数决定,但我们手头上只有数据集D和数据集D服从高斯分布这两条信息,并不知道高斯分布的参数的有关信息。因此估计高斯分布的参数成为我们首要任务,因为参数一旦确定下来,数据集D的生成模型也就确定下来,预测未来成为可能。关于高斯分布,我想进一步解释,不难看出,概率密度函数在期望值处取最大值,这说明了随机变量落在期望值周围的概率最大(通俗点来说就是我们大多数人生活在平均水平之中),这是密度函数名称的来源。

一维高斯分布及参数

高斯分布

2.极大似然然估计

从线性回归模型谈起,给定数据集[X,y],参数W,误差r服从高斯分布N(0,α^2),线性回归模型表示为:

线性回归模型

利用最小二乘法求参数W,即

最小二乘法求参数

这是一个解析解,让人满意的结果。但问题是当X中含有线性相关的特征时(特征重叠),矩阵不可逆,这时解不存在,需要选择正则化方法处理,如岭回归和lasso回归。大家应该发现这样的问题,最小二乘法与假设“误差r服从高斯分布N(0,α^2)”没有任何关系。但这个假设是合理的,只要有足够多的样本和好模型,误差自然大部分集中在0附近,并服从高斯分布。通过这个假设也可以倒逼训练出一个好模型。极大似然估计从假设“误差r服从高斯分布N(0,α^2)”开始,利用样本的独立性,有效估计参数。

首先考虑极大似然估计的通用模型,假设数据集D服从一个参数为W的概率分布f(x)=p(D=x|W)(含义为在知道W的条件下,数据集D取样本x的概率密度函数值),这里f(x)=p(D=x|W)是概率密度函数(对于连续型随机变量用概率密度函数代替概率),p(D|W)为数据集D的联合概率分布,根据样本的独立性,p(D|W)为所有样本的概率密度函数值f(x)的乘积。我们称p(D|W)为参数W的似然函数,log(p(D|W))为参数W的对数似然函数,记为L(W|D)=log(p(D|W))。现在首要任务是估计W。既然样本数据集D已经出现,概率直觉告诉我们,D出现的概率比所有其他样本数据集D'出现的概率都要大,即L(W|D)>L(W|D')。极大似然估计就是求一个参数W使得

下面用极大似然估计求解线性回归模型。

线性回归属于监督学习,X是特征,y是对应的值(即数据集D),应把X看成已知的参数,W为待估计的参数。假设误差r服从高斯分布N(0,α^2),这推出p(y|W)=N(W^TX,α^2)。根据极大似然估计

这说明了最小二乘法和极大似然估计在假设“误差r服从高斯分布N(0,α^2)”下是等价的。

极大似然估计基于朴素的概率直觉,有时得到的结果与实际情况有所偏差。从下图可以看出,不同的取样导致与实际情况偏差较大,因此使用极大似然估计应保持警惕。

思考1:在线性回归模型中,假设误差r服从贝塔分布,用极大似然估计参数,结果如何?

思考2:在线性回归模型中,假设误差r服从拉普拉斯分布,用极大似然估计参数,结果如何?

贝塔分布

拉普拉斯分布

3.最大后验估计

我在文章《贝叶斯定理》里详细介绍了贝叶斯定理以及先验(prior)、后验(posterior)、似然(likelihood)等概念。贝叶斯定理如下:

其中p(D)为标准化常数。贝叶斯定理可表述为:

目前,我们手头上有数据集D和数据集D服从高斯分布这两条信息,关于高斯分布的参数W,我们没有额外的信息,在这种情况下,我们只能用极大似然估计这些参数,这是我们能想到的方法。如果在建模之前能获知这些参数的额外信息,即先验p(W),那么我们可以利用这个先验建立更加精准的模型。这就是我们下面要讲的最大后验估计。根据贝叶斯定理,最大后验估计就是求参数W使得

计算上述最大值是一个挑战,但在一些特殊情况下,比如先验p(W)是一个高斯先验,我们是可以计算的。

现在我们可以讨论极大似然估计和最大后验估计的关系了。在极大似然估计中,我们不知道p(W),这相当于p(W)是均匀分布(均匀分布是无聊的,参数服从均匀分布等于没有告诉你关于参数任何信息),不妨假设p(W)=1,这时我们有

因此,极大似然估计和先验为均匀分布下的最大后验估计是等价的。

4.线性回归模型的最大后验估计

在线性回归模型里,误差r服从高斯分布N(0,α^2),进一步我们假设系数W的先验p(W)=N(0,^2),利用最大后验估计参数W,使得后验p(W|y)最大,这里我省去推导过程,直接给出结论:

本质上,这是岭回归。因此充分利用先验信息,最大后验估计比极大似然估计更加鲁棒。

思考:在线性回归模型中,假设先验p(W)服从拉普拉斯分布,用最大后验估计参数,结果如何?

5.总结

最后我们总结最小二乘法、极大似然估计和最大后验估计的关系。在线性回归模型中,假设误差r服从高斯分布N(0,α^2),最小二乘法和极大似然估计是等价的。在线性回归模型中,假设误差r服从高斯分布N(0,α^2),假设先验p(W)服从高斯分布N(0,^2),最大后验估计结果是岭回归。在假设p(W)服从均匀分布下,极大似然估计和最大后验估计是等价的。总之,在充分利用先验的基础上,最大后验估计比极大似然估计更加鲁棒。

(坚持原创,你的关注、点赞和转发是我的动力!未经授权禁止转载!)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lgb_love/article/details/81737808

智能推荐

服务器显示资源不够用,Docker服务器存储资源池不足的问题解决_谁不言的博客-程序员秘密

系统环境:Docker 版本:19.03.13操作系统版本:CentOS 7.8一、问题描述最近在执行 Docker 运行命令启动镜像时候,无法正常执行 Docker 启动镜像命令,提示了如下错误信息:Error: Error response from daemon: devmapper: Thin Pool has 163051 free data blocks which is less t...

Vue 单独安装eslint 和卸载eslint_MW0309的博客-程序员秘密

安装的时候进入到你的项目目录中执行npm install eslint --save卸载的时候进入到你的项目目录中执行npm uninstall eslint --save

MVC设计模式思想及简单实现_weixin_30810239的博客-程序员秘密

一、什么是MVC  MVC即Model-View-Controller(模型-视图-控制器)是一种软件设计模式,最早出现在Smalltalk语言中,后被Sun公司推荐为Java EE平台的设计模式。  MVC把应用程序分成了上面3个核心模块,这3个模块又可被称为业务层-视图层-控制层。顾名思义,它们三者在应用程序中的主要作用如下:  业务层:负责实现应用程序的业务逻辑,封装有各种对数据...

mysql学习笔记_修改student表中学号为“3”的数据记录,把其班级更改为“网络13”、性别改为_钱叁壹的博客-程序员秘密

学习笔记整理至-传智播客学习视频一、数据库1.常见数据库 Oracle(神喻):甲骨文(最高!); DB2:IBM; SQL Server:微软; Sybase:赛尔斯; MySQL:甲骨文;2 安装MySQL数据库2.1 安装MySQL   自己百度  2.2 MySQL目录结构   MySQL的数据存储目录为data,data目录通常在C:\Document...

FORM中使用onSubmit="return false"防止表单自动提交_form的自动onsubmit_迎风悟极道的博客-程序员秘密

在页面中有多个input type="text"的文本输入框的情况下没有问题,但是当页面中有只有一个文本框的情况下(),就会出现此问题. 后来在form 中添加:onsubmit="return false;"问题终于解决。  下边对“防止表单自动提交,以及submit和button提交表单”进行了些总结,希望对大家有些用(如果有不当的地方请指出)。ht

java字符比较_java 字符比较_普通网友的博客-程序员秘密

前言今天刚好有空,跟大家聊聊如何学好算法进大厂。前两天一个读者和我说,他坚持刷算法题2个月,薪资翻番去了他梦寐以求的大厂,期间面字节跳动还遇到了原题…其实据我所知目前国内的大厂和一些独角兽,已经越来越效仿硅谷公司的做法,通过编程定题面试,来考察数据结构和算法的扎实程度。以我的经验来说,**对于新手来说,扎实的掌握一门语言是其一,其二就是要有基本的算法能力,这个非常重要。对于进阶的用户,更多技术栈的掌握就是必须的了。另外,还需要你学习高阶算法,掌握这些技术栈匹配的算法技能。**现在很多大厂技术面试的要求

随便推点

比较好的英文技术网站_liquanhai的博客-程序员秘密

1. http://www.codeguru.com/ CodeGuru(www.codeguru.com)是由程序设计领域的教师、程序员和专业人士组成的社区,这里凝聚了全球数百万程序员的优秀代码与知识精华。2. http://www.codeproject.com/****************************************************

Python基础 -- 06 基础语法(pyGame)_pygame语法_DJTUDaker的博客-程序员秘密

一、Pygame1、通过pip导入pygame的包pip install pygame2、导入飞机大战需要的资源文件到项目根路径下3、Pygame的基本使用import time# 导入pygame的包import pygame# 初始化pygame,让计算机硬件做准备pygame.init()# 创建一

anaconda遇到无法定位程序输入点OPENSSL_sk_new_reserve……的问题_隔壁王同学m的博客-程序员秘密

用conda安装包时遇到下面的错误:解决办法:方法一:找到anaconda3的安装路径,然后看D:\Development\Anaconda3\DLLs下的libssl-1_1-x64.dll的文件创建日期信息应该与D:\Development\Anaconda3\Library\bin下的libssl-1_1-x64.dll一致,否则将前者的覆盖后后者里面即可。其他:目前...

Android Gradle新增buildtypes_SmallMartin的博客-程序员秘密

添加自定义buildType,比如预发版、beta版,正式版这样的需求在buidtypes里面增加 buildTypes { release { } debug { } pre { } }重点1:...

edgessubpix参数说明_二十五.Edge Extraction (Subpixel-Precise)之一(基础篇)_Soul App的博客-程序员秘密

一.基本流程:获取图像---矫正图像---确定ROI---提取边缘或直线---计算轮廓属性---处理多边形轮廓---转换到世界坐标系---结果可视化。二.常用算子:利用形态学算子计算区域边缘并返回。BoundaryType:'inner', 'outer', 'inner_filled'原始区域内部;外部;内部填充,边缘皆是一个像素宽。返回区域的并集。利用Deriche, Lanser, Shen...

fillna填充某一列_pandas学习笔记 -了解数据集基本情况,提取数据,缺失值NULL的判断,删除和补充(dropna,fillna的用法)..._jck?????的博客-程序员秘密

part1 了解数据集基本情况当我们面对一个很大的数据集的时候,如何快速得到他的行数与列数呢?举个栗子,我们读取一个nhanes数据集,我们加上一个.shape,输出的结果就是他的行数和列数了。也就是:(jupyter笔记本形式)当我们想看他的列名分别有什么时,我们加上一个.columns也就是:如果想知道表格各列的数据类型:也就是:part2 提取某一列在这个程序里,w , x , y , z ...

推荐文章

热门文章

相关标签