补充资料——自己实现极大似然估计(最大似然估计)MLE


#取出MASS包这中的数据
data(geyser,package="MASS")
head(geyser)
attach(geyser)
par(bg='lemonchiffon')
hist(waiting,freq=F,col="lightcoral")
#freq=F要加上,否则就无法添加线了
lines(density(waiting),lwd=2,col="cadetblue4")
#根据图像,我们认为其在前后分别是两个正态分布函数的组合
#定义 log‐likelihood 函数
LL<-function(params,data){
#参数"params"是一个向量,
#依次包含了五个参数: p,mu1,sigma1,mu2,sigma2.
#参数"data",是观测数据。
t1<-dnorm(data,params[2],params[3])
t2<-dnorm(data,params[4],params[5])
#f是概率密度函数
f<-params[1]*t1+(1-params[1])*t2
#混合密度函数
ll<-sum(log(f))
#log‐likelihood 函数
return(-ll)
#nlminb()函数是最小化一个函数的值,
#但我们是要最大化 log‐likeilhood 函数
#所以需要在“ ll”前加个“ ‐”号。
}
#估计函数####optim####
# debugonce(nlminb)
geyser.res<-nlminb(c(0.5,50,10,80,10),LL,data=waiting,
lower=c(0.0001,-Inf,0.0001,
-Inf,0.0001),
upper=c(0.9999,Inf,Inf,Inf,Inf))
#初始值为 p=0.5,mu1=50,sigma1=10,mu2=80,sigma2=10
#初始值也会被传递给LL
#LL 是被最小化的函数。
#data 是估计用的数据(传递给我们的LL)
#lower 和 upper 分别指定参数的上界和下界。
#查看拟合的参数
geyser.res$par
#拟合的效果
#解释变量
X<-seq(40,120,length=100)
#读出估计的参数
p<-geyser.res$par[1]
mu1<-geyser.res$par[2]
sig1<-geyser.res$par[3]
mu2<-geyser.res$par[4]
sig2<-geyser.res$par[5]
#将估计的参数函数代入原密度函数。
f<-p*dnorm(X,mu1,sig1)+(1-p)*dnorm(X,mu2,sig2)
#作出数据的直方图
hist(waiting,probability=T,col='lightpink3',
ylab="Density",ylim=c(0,0.04),
xlab="Eruption waiting times"
)
#画出拟合的曲线
lines(X,f,col='lightskyblue3',lwd=2)
detach(geyser)
function (start, objective, gradient = NULL, hessian = NULL,
..., scale = 1, control = list(), lower = -Inf, upper = Inf)
{
par <- setNames(as.double(start), names(start))
n <- length(par)
iv <- integer(78 + 3 * n)
v <- double(130 + (n * (n + 27))/2)
.Call(C_port_ivset, 2, iv, v)
if (length(control)) {
nms <- names(control)
if (!is.list(control) || is.null(nms))
stop("'control' argument must be a named list")
pos <- pmatch(nms, names(port_cpos))
if (any(nap <- is.na(pos))) {
warning(sprintf(ngettext(length(nap), "unrecognized control element named %s ignored",
"unrecognized control elements named %s ignored"),
paste(sQuote(nms[nap]), collapse = ", ")), domain = NA)
pos <- pos[!nap]
control <- control[!nap]
}
ivpars <- pos <= 4
vpars <- !ivpars
if (any(ivpars))
iv[port_cpos[pos[ivpars]]] <- as.integer(unlist(control[ivpars]))
if (any(vpars))
v[port_cpos[pos[vpars]]] <- as.double(unlist(control[vpars]))
}
obj <- quote(objective(.par, ...))
rho <- new.env(parent = environment())
assign(".par", par, envir = rho)
grad <- hess <- low <- upp <- NULL
if (!is.null(gradient)) {
grad <- quote(gradient(.par, ...))
if (!is.null(hessian)) {
if (is.logical(hessian))
stop("logical 'hessian' argument not allowed. See documentation.")
hess <- quote(hessian(.par, ...))
}
}
if (any(lower != -Inf) || any(upper != Inf)) {
low <- rep_len(as.double(lower), length(par))
upp <- rep_len(as.double(upper), length(par))
}
else low <- upp <- numeric()
.Call(C_port_nlminb, obj, grad, hess, rho, low, upp, d = rep_len(as.double(scale),
length(par)), iv, v)
iv1 <- iv[1L]
list(par = get(".par", envir = rho), objective = v[10L],
convergence = (if (iv1 %in% 3L:6L) 0L else 1L), iterations = iv[31L],
evaluations = c(`function` = iv[6L], gradient = iv[30L]),
message = if (19 <= iv1 && iv1 <= 43) {
if (any(B <- iv1 == port_cpos)) sprintf("'control' component '%s' = %g, is out of range",
names(port_cpos)[B], v[iv1]) else sprintf("V[IV[1]] = V[%d] = %g is out of range (see PORT docu.)",
iv1, v[iv1])
} else port_msg(iv1))
}

附件列表
补充资料——自己实现极大似然估计(最大似然估计)MLE的更多相关文章
- 最大似然估计(Maximum Likelihood,ML)
先不要想其他的,首先要在大脑里形成概念! 最大似然估计是什么意思?呵呵,完全不懂字面意思,似然是个啥啊?其实似然是likelihood的文言翻译,就是可能性的意思,所以Maximum Likeliho ...
- 最大似然估计 (MLE)与 最大后验概率(MAP)在机器学习中的应用
最大似然估计 MLE 给定一堆数据,假如我们知道它是从某一种分布中随机取出来的,可是我们并不知道这个分布具体的参,即“模型已定,参数未知”. 例如,对于线性回归,我们假定样本是服从正态分布,但是不知道 ...
- 【模式识别与机器学习】——最大似然估计 (MLE) 最大后验概率(MAP)和最小二乘法
1) 极/最大似然估计 MLE 给定一堆数据,假如我们知道它是从某一种分布中随机取出来的,可是我们并不知道这个分布具体的参,即“模型已定,参数未知”.例如,我们知道这个分布是正态分布,但是不知道均值和 ...
- 最大似然估计 (MLE) 最大后验概率(MAP)
1) 最大似然估计 MLE 给定一堆数据,假如我们知道它是从某一种分布中随机取出来的,可是我们并不知道这个分布具体的参,即"模型已定,参数未知". 例如,我们知道这个分布是正态分布 ...
- 深度学习中交叉熵和KL散度和最大似然估计之间的关系
机器学习的面试题中经常会被问到交叉熵(cross entropy)和最大似然估计(MLE)或者KL散度有什么关系,查了一些资料发现优化这3个东西其实是等价的. 熵和交叉熵 提到交叉熵就需要了解下信息论 ...
- 机器学习的MLE和MAP:最大似然估计和最大后验估计
https://zhuanlan.zhihu.com/p/32480810 TLDR (or the take away) 频率学派 - Frequentist - Maximum Likelihoo ...
- 最大似然估计和最大后验概率MAP
最大似然估计是一种奇妙的东西,我觉得发明这种估计的人特别才华.如果是我,觉得很难凭空想到这样做. 极大似然估计和贝叶斯估计分别代表了频率派和贝叶斯派的观点.频率派认为,参数是客观存在的,只是未知而矣. ...
- 似然函数 | 最大似然估计 | likelihood | maximum likelihood estimation | R代码
学贝叶斯方法时绕不过去的一个问题,现在系统地总结一下. 之前过于纠结字眼,似然和概率到底有什么区别?以及这一个奇妙的对等关系(其实连续才是f,离散就是p). 似然函数 | 似然值 wiki:在数理统计 ...
- 机器学习基础系列--先验概率 后验概率 似然函数 最大似然估计(MLE) 最大后验概率(MAE) 以及贝叶斯公式的理解
目录 机器学习基础 1. 概率和统计 2. 先验概率(由历史求因) 3. 后验概率(知果求因) 4. 似然函数(由因求果) 5. 有趣的野史--贝叶斯和似然之争-最大似然概率(MLE)-最大后验概率( ...
随机推荐
- linux c tcp p2p
江湖上一直都有这位哥哥的传说,也有很多人说自己就他的真身! 但是... 今天分享一下TCP连接的P2P demo,江湖的规矩也要与时俱进... ———————————————————————————— ...
- tensorflow(4)踩过的一些坑
版本问题 1.1 版本的一个BUG ValueError: Variable rnn/basic_lstm_cell/weights already exists, disallowed. 结合这个文 ...
- HTTP 返回状态代码
一.HTTP状态码 如果某项请求发送到您的服务器要求显示您网站上的某个网页(例如,用户通过浏览器访问您的网页或 Googlebot 抓取网页时),服务器将会返回 HTTP 状态代码以响应请求. 此状态 ...
- PL/SQL Block中对单引号进行转义
可以使用如下的方式: STR := q'[ CREATE TABLE TNAME AS SELECT ... FROM INPUT_TABLE IP WHERE ((IP.DATE_FIELD = T ...
- sitecore8.2 基于站点来查询item
树形结构: /sitecore /content /foo-site /home /my-account /bar-site /home /my-account /baz-site /home /my ...
- you've successfully authenticated, but Gitee.com does not provide she access.
如果都是正常的生成ssh的操作,还是会报这个错误,那么就是.... 你没更改文件夹的权限,这个坑跳了很久(汗...) sudo chmod 777 -r 文件夹
- 2018-2019-20175205 实验三敏捷开发与XP实践《Java开发环境的熟悉》实验报告
2018-2019-20175205 实验三敏捷开发与XP实践<Java开发环境的熟悉>实验报告 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)>&l ...
- java问题排查之Load CPU很高
1首先 找到对应的java进程id ps -aux | grep java 这个命令可以找到 2.接下来就是查找比较耗CPU的线程id top -H -p pid 这里可以观察出来耗时最多的几个进程中 ...
- Redis做分布式锁
在分布式系统中,在接口没有保证幂等性或者在某些场景下相同的服务需要有且仅有一个服务执行的情况下,需要使用分布式锁来保证系统的安全执行. 分布式锁的执行顺序,有服务A,分别部署了三个节点为A1.A2.A ...
- LINUX 编程定位工具gstack,pstack
pstack: pstack命令可显示每个进程的栈跟踪. pstack 命令必须由相应进程的属主或 root 运行. 可以使用 pstack 来确定进程挂起的位置. 此命令允许使用的唯一选项是要检查的 ...