极大似然函数求解_极大似然估计法的理解指南

原标题:极大似然估计法的理解指南

今天讲一个在机器学习中重要的方法——极大似然估计。

这是一个,能够让你拥有拟合最大盈利函数模型的估计方法。

01

什么是极大似然估计法

极大似然估计是 1821 年由高斯提出,1912 年由费希尔完善的一种点估计方法。

通俗来说,极大似然估计法其实源自生活的点点滴滴,比方说有一个大学生他天天上课不听讲,天天上课玩手机,老师盯着他看了老半天,他也不知道收敛一些,那通过老师几十年的教学经验的判断,这小子期末一定是挂科的,果不其然,他真的挂科了。

老师以过去大量的相同事件来判断目前正在发生的类似事件,这就是极大似然。

其实一开始写这个分享,我准备了很多小故事,希望用风趣幽默的文法把一个很抽象的数学名词尽可能的讲给所有人听,让大家都能理解并接受。后来我发现,用上面老师和学生的例子是最为贴切的,因为也曾经这样预判过别人。

好啦,故事讲完了,接下来就是重头菜了,原理看着很清晰,但实操起来,需要概率论基础以及利用微分求极值。

导数

导数的概念的其实挺简单的,这里我们不要求掌握太多的关于微积分的公式,只消会求导就可以了,关于基本初等函数的求导,大家可以在这里查找自己需要的求导公式。

复合函数的求导满足链式法则:

值得一提的还有关于导函数求驻点,即令

,并求解 x,所得到的 x 即为驻点,驻点回代原函数可得极值。

02

求解极大似然估计量的四步骤

终于到了本文的小高潮,如何利用极大似然估计法来求极大似然估计量呢?

首先我们来看一个例子:有一个抽奖箱,里面有若干红球和白球,除颜色外,其他一模一样。我们每次从中拿出一个后记录下来再放回去,重复十次操作后发现,有七次抽到了红球,三次是白球,请估计红球所占的比例。

从题目可以分析出本次例子满足二项分布,现在可以设事件 A 为"抽到红球",那可以得到一个式子:

(1)

现在的目的就是为了求这个 P(A),那要怎么求才又快又准呢?如果用求导解驻点来寻找极值,7 次方好像也不是很大,那要是我们重复进行了一百、一千次操作呢?所以,优化算法势在必行,下面的骚操作就是先辈们经过不懈地探求总结出来的——先取对数再求导!

对(1)式取对数,得:

对上式求导,整理得:

令该导数为零,可得式子:

解得

从这个例子中我们可以得到和《概率论与数理统计》一书中相匹配的抽象结果:设总体 X 为离散型随机变量,且它的概率分布为

其中 θ 为未知参数

分别为 X 的一组样本和样本观察值。则参数 θ 的取值应该使得概率:

达到最大值,今后我们称 θ 的函数:

‍‍

为 θ 的似然函数,上式是其样本取对应观察值的概率。同时,如果有

使得:

则称为 θ 的极大似然估计量。从上述一般结果的抽象描述中,我们可以剥离出求解的一般步骤:

写出似然函数 ;

对似然函数取对数(视情况而定);

求对数似然函数对未知参数的导函数 ;

令导函数为 0,方程的解即为极大似然解;

03

基于极大似然原理的 KNN 算法

KNN,即 K-近邻算法,是极大似然的一个体现,具体思想如下:

首先我们定义一个点,这个点很特别,它具有:

X轴的值

Y轴的值

颜色标签(这里我们使用黑、红、蓝三种颜色做个演示)

然后我们多搞几个点,制造出点群,也是较为简陋的一个数据集

接着有一个不知道自己是啥颜色的小不点溜进来了

现在黑、蓝、红三个点群展开了激烈的争论,到底这个小不点是属于哪一方的!

可是应该如何来判决呢?

小不点想出了一个绝妙的法子,记录自身到每一个颜色点的距离,然后选取其中 K 个距离值,并以最大的那个距离为半径,自身为圆心,画一个圆,计算圆内每一个颜色占总点数的概率,最大概率的那个颜色标签即是小不点的颜色。

当 k=2 时

当 k=6 时

我们可以发现在有效的K值内,小不点有极大概率是蓝色的,因此我们赋予它一个蓝色的颜色标签。至此 KNN 的基本原理已经阐明,该贴一份 C 的 KNN 代码啦。

但还有一个问题:如何选择一个最优的 K 值?

这个问题留以后在《基于K-近邻算法的 KD-tree 详解》中进行系统的讲解,目前一般使用交叉验证或贝叶斯,先挖个坑在这里,以后慢慢填啦~

04

KNN 算法的 C 简单实现

测试图如下:

KNN 还有更好玩的方法哦,比如 K-D tree,分治思想下的模型,速度更快哦。

参考资料:

《概率论与数理统计》安书田版

维基百科的极大似然估计条目——国内上不了 Wiki 百科,有俩办法,一个是改 host,另一个你懂的。

CSDN《Markdown 数学符号》——我真的写这篇被这些数学符号搞得快要原地爆炸了!

作者简介:

浅浅,目前在闽南师范大学就读,爱好国学与晨跑,痴迷机器学习与数据挖掘,Lisp爱好者。返回搜狐,查看更多

责任编辑:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

json字符串和字典类型的相互转换(转载)

转自:http://www.cnblogs.com/YUTOUYUWEI/p/5585863.html 在开发过程中,有时候需要将json字符串转为字典类型,反之亦然,通常采用.Net的开源类库Newtonsoft.Json进行序列化,这里我也是采用这个,不过我更喜欢…

JS高级——对象的原型__proto__、函数的原型prototype、构造函数

一、认识构造函数 我们先理解什么是构造函数? 构造函数也称之为构造器(constructor),通常是我们在创建对象时会调用的函数;在其他面向的编程语言里面,构造函数是存在于类中的一个方法,称之为构造…

python各种数据类型的常用方法_Python之数据类型的常用方法

常用方法汇总1. int类方法汇总:变量名.to_bytes(数字,"little"\"big") # (把数字转换成bytes)# 数字表示转换后几个字节表示 little在前面,big在后面(大小端)int.from_bytes("要转换的东西","little"…

JS面向对象——原型链、通过原型链实现继承、借用构造函数实现继承

一、JavaScript原型链 在真正实现继承之前,我们先来理解一个非常重要的概念:原型链。 我们知道,从一个对象上获取属性,如果在当前对象中没有获取到就会去它的原型(__proto__)上面获取: 二、…

echart自定义动画_echarts动画效果

最近工作中碰到一个需求,要求动态展示柱状图,大概效果如下:图片是我用操作宽度模拟的效果,但是echarts以前没接触过,今天看了下文档,梯形也没做出来,想请教下大家echarts能否完成图中效果&#…

基于bootstrap框架在ie8以下,兼容媒体查询[css样式]

1 <style type"text/css">2 /*基于bootstrap框架在ie8以下&#xff0c;兼容媒体查询*/3 .row [class^"col-"] {4 float: left \9;5 }6 7 .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1 {8 width: 8.33333333% \9;9 …

JS面向对象——原型式继承函数、寄生式继承函数、寄生组合式继承

一、原型式继承函数 回顾一下JavaScript想实现继承的目的&#xff1a;重复利用另外一个对象的属性和方法. 最终的目的&#xff1a;student对象的原型指向了person对象&#xff1b; 二、寄生式继承函数 寄生式(Parasitic)继承是与原型式继承紧密相关的一种思想, 并且同样由道格…

k8s pod内部容器_第三章 pod:运行于kubernetes中的容器

本章内容涵盖创建、 启动和停止 pod使用标签组织 pod 和其他资源使用特定标签对所有 pod 执行操作使用命名空间将多个 pod 分到不重叠的组中调度 pod 到指定类型的工作节点上一章 已经大致介绍了在 Kubemetes 中创建的基本组件&#xff0c;包括它们的基本功 能概述。 那么接下来…

JS面向对象——Object对象的方法补充、原型继承关系图

一、Object.create() 这个方法用于创建一个新对象。被创建的对象的__proto__指向create函数第一个参数的原型对象prototype&#xff0c;在创建新对象时可以通过create函数第二个参数指定一些属性。 二、Object.hasOwnProperty() 对象是否有某一个属于自己的属性&#xff08…

Could not obtain connection metadata

用hibernate连接数据库出现错误2010-3-16 17:23:39, 093 [main] WARN [org.hibernate.cfg.SettingsFactory] - Could not obtain connection metadata java.sql.SQLException: 不支持的特性 at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134 ) at …

JS面向对象——class定义类、类的构造函数、实例方法、访问器方法、静态方法、继承、super、多态

一、认识class定义类 我们会发现&#xff0c;按照前面的构造函数形式创建 类&#xff0c;不仅仅和编写普通的函数过于相似&#xff0c;而且代码并不容易理解。 在ES6&#xff08;ECMAScript2015&#xff09;新的标准中使用了class关键字来直接定义类&#xff1b;但是类本质上依…

ES6(一)——字面量的增强、解构、let/const、块级作用域、暂时性死区

一、字面量的增强 ES6中对 对象字面量 进行了增强&#xff0c;称之为 Enhanced object literals&#xff08;增强对象字面量&#xff09;。 字面量的增强主要包括下面几部分&#xff1a; 属性的简写&#xff1a;Property Shorthand方法的简写&#xff1a;Method Shorthand计算…

MapReduce算法形式四:mapjoin

案例四&#xff1a;mapjoin&#xff08;对个map共同输入&#xff0c;一个reduce&#xff09; 这个方法主要解决的是&#xff0c;几个表之间的比较&#xff0c;类似于数据库的内外连接&#xff0c;还有一些左右连接之类的&#xff0c;简而言之就是&#xff0c;A表没有的B表有&am…

python开发出来的crm系统_用Python打造一个CRM系统(三)

在上一篇中我们基于cookiecutter-django创建了一个one_crm的项目&#xff0c;在本文中将在本地进行初始化&#xff0c;并成功运行起来。本地初始化之前先确保环境先安装了Python3.8、PostgreSQL&#xff0c;并创建了一个虚拟环境。1. 安装依赖库基于cookiecutter-django创建的项…

bzoj1053: [HAOI2007]反素数ant

51nod有一道类似的题。。。我至今仍然不会写暴搜&#xff01;&#xff01;&#xff01; #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define rep(i,s,t) for(int is;i<t;i) #define dwn(i,s…

ES6(二)——字符串模板、标签模板字符串、函数的默认参数、剩余参数、数组对象的展开语法、数值的表示、Symbol

一、字符串模板基本使用 在ES6之前&#xff0c;如果我们想要将字符串和一些动态的变量&#xff08;标识符&#xff09;拼接到一起&#xff0c;是非常麻烦和丑陋的&#xff08;ugly&#xff09;。 ES6允许我们使用字符串模板来嵌入JS的变量或者表达式来进行拼接&#xff1a; 首…

码云上传代码添加标签_eclipse上传代码到码云

本文将介绍如何将本地的项目提交到开源中国的码云上&#xff0c;提到码云大家是不是想到了咱们大佬“马云”&#xff1f;呵呵&#xff0c;这个也挺强大的不过不是一个人而是一个版本控制器。改教程讲解过程比较详细&#xff0c;跟着做实现起来很简单。由于自己本身也是一个新手…

codeforce gym 100548H The Problem to Make You Happy

题意&#xff1a; Alice和Bob在一个有向图上玩游戏&#xff0c;每个人各自操作一个棋子&#xff0c;如果两个棋子走到一个点上&#xff0c;判定Bob输&#xff1b;如果轮到任何一方走时&#xff0c;无法移动棋子&#xff0c;判定该方输 现在Bob先走&#xff0c;要求判断胜负 题解…

ES6(三)——Set、WeakSet、Map、WeakMap

一、Set的基本使用 在ES6之前&#xff0c;我们存储数据的结构主要有两种&#xff1a;数组、对象。 在ES6中新增了另外两种数据结构&#xff1a;Set、Map&#xff0c;以及它们的另外形式WeakSet、WeakMap。 Set是一个新增的数据结构&#xff0c;可以用来保存数据&#xff0c;类…

git gui怎么拉取项目代码_Git可视化极简易教程 — Git GUI使用方法

前言之前一直想一篇这样的东西&#xff0c;因为最初接触时&#xff0c;我也认真看了廖雪峰的教程&#xff0c;但是似乎我觉得讲得有点多&#xff0c;而且还是会给我带来很多多余且重复的操作负担&#xff0c;所以我希望能压缩一下它在我工作中的成本&#xff0c;但是搜索了一下…