似然函数 | 最大似然估计 | likelihood | maximum likelihood estimation | R代码

学贝叶斯方法时绕不过去的一个问题,现在系统地总结一下。

之前过于纠结字眼,似然和概率到底有什么区别?以及这一个奇妙的对等关系(其实连续才是f,离散就是p)。

 

似然函数 | 似然值

wiki:在数理统计学中,似然函数是一种关于统计模型中的参数的函数,表示模型参数中的似然性。

这里我们讨论的范围已经界定了,那就是在指定模型下(比如二项分布),我们观测数据和可能的模型参数之间的关系。

(传统的贝叶斯定理的适用范围很广,是高度的总结推广,在似然函数里就不要过于推广了)

 

似然函数在直觉上就很好理解了,L(θ|x)就是在给定模型下(这就是为什么贝叶斯是model specific的原因),在给定数据x时,不同模型参数θ出现的概率。(大错特错,是似然值)

 

如何理解似然函数?

很多都是错的,全部资料都要查英文,所有符号都要准确,不能乱写!!!!!符号书写的错误会带来极大的误解!!!!

似然函数的定义是什么?定义都不明确,还讨论研究个什么????

为什么(在函数值形式上) L(θ|x) = f(x|θ)?没必要问为什么对等,因为似然函数就是这么定义而来的。似然函数是为了方便,根据条件概率独立出来的一个新概念而已。

举个例子,对于X~binomial(2, 0.5)而言,P(X=2 | θ=0.5) = 0.25 = L(θ=0.5 | X=2) ,这就是定义。

你应该问为什么似然函数得出的关于θ的似然值之间可以比较?L(θ=1 | X=2) = 1 > L(θ=0.5 | X=2) 意味着什么?我的data X=2在θ=1时出现的概率更高。说明取θ=1时,我的模型能更好的预测结果。

为什么要用似然区分概率?X=2是事件所以有概率,而θ=1并不是事件,因为没有随机试验,而且总的似然值也不为1. 似然是一个我们主动尝试参数的结果,它的本质还是依赖概率。

 

L(θ|x) 和 f(θ|x)有什么本质的区别? 一个问题看你懂不懂条件概率和似然值

已知有事件x发生,运用似然函数,我们估计参数θ的可能性。形式上,似然函数也是一种条件概率函数。一个是似然值,一个是概率值,完全不同的东西。(别看中文wiki

存在L(x|θ)吗?(不存在)

似然函数和密度函数是完全不同的两个数学对象:前者是关于theta的函数,后者是关于x的函数。所以这里的等号= 理解为函数值形式的相等,而不是两个函数本身是同一函数(根据函数相等的定义,函数相等当且仅当定义域相等并且对应关系相等)。- 知乎

wiki案例:图2. 三次投掷中头两次正面朝上,第三次反面朝上时的似然函数。可以看到似然函数的积分并不等于1,需要关注的只是大小的相对变化.


最大似然估计

An Introductory Guide to Maximum Likelihood Estimation (with a case study in R)

最大似然估计就是已知数据来求模型的最适参数,maximize the probability of observing the data。

Given the observed data and a model of interest, we need to find the one Probability Density Function/Probability Mass Function (f(x|θ)), among all the probability densities that are most likely to have produced the data.

To solve this inverse problem, we define the likelihood function by reversing the roles of the data vector x and the (distribution) parameter vector θ in f(x| θ), i.e.,
L(θ;x) = f(x| θ)

相互独立的试验下的联合似然函数:

最大似然下的θ求解方法:

  • Newton’s method,
  • Fisher scoring,
  • various conjugate gradient-based approaches,
  • steepest descent,
  • Nelder-Mead type (simplex) approaches,
  • BFGS

我们要求这个似然函数最大值情况下的θ,用高中函数知识就知道要求导,导数为0是最大值的必要不充分条件。

但大部分情况是似然函数不可导!

MLE using R

代码可直接执行,解释见上面链接。

# Modelling Poisson Distrinution using Singla variables
library(dplyr)
library(ggplot2)
library(caret)
library(ModelMetrics)
library(stats4)
#Read training data

# X <- read.csv("Train_Tickets.csv", header = T)
X <- read.table("https://s3-ap-south-1.amazonaws.com/av-blog-media/wp-content/uploads/2018/07/Train_Tickets.csv", header = T, sep = ",")

#Call Formatfile fun to calculate derived variables
Y <- Formatfile(X)

#Plot density of the sale
hist(Y$Count, breaks = 50,probability = T ,main = "Histogram of Count Variable")
lines(density(Y$Count), col="red", lwd=2) 

X$dt <- as.POSIXct(X$Datetime, format="%d-%m-%Y %H:%M")

#Plot of Sale over time
ggplot(data=X,aes(x=dt, y=Count)) + 
  geom_path(colour="blue") + 
  ylab("Count of Tickets Sold") + 
  xlab("Date") + 
  labs(title="Ticket Sale over time") 

#Partition data into test and train set
set.seed(200)
idx <- createDataPartition(Y$Count, p=0.25,list=FALSE)

#Negative log likelihood Function using Poisson Distribution
nll <- function(theta0,theta1) {
  
  x <- Y$age[-idx]
  y <- Y$Count[-idx]
  
  mu = exp(theta0 + x*theta1)
  
  -sum(y*(log(mu)) - mu)
}

#Parameter Estimation
est <- stats4::mle(minuslog=nll, start=list(theta0=2,theta1=0))
summary(est)

#Prediction on test set and RMSE
pred.ts <- (exp(coef(est)['theta0'] + Y$age[idx]*coef(est)['theta1'] ))
rmse(pred.ts, Y$Count[idx])
#86.95227

#Comparison with standard linear model
lm.fit <-  lm(log(Count)~age, data=Y[-idx,])
pred.lm <- predict(lm.fit, Y[idx,])
rmse(exp(pred.lm), Y$Count[idx]) 
#93.77393

Formatfile <- function(File){
  ## Separate columns and format them
  File1 <- File
  File1$Datetime <- as.character(File1$Datetime)
  File1 <- mutate(File1, tdate = substr(Datetime, 1,10), thr = substr(Datetime, 12,13))
  ## convert Hour as factor
  File1$thr <- as.factor(File1$thr)
  ## FInd Weekday of the date
  Dt <- as.Date("25-08-2012", "%d-%m-%Y")
  File1 <- mutate(File1, weekday = weekdays(as.Date(File1$tdate, "%d-%m-%Y")), 
                  age = -difftime(Dt, as.Date(File1$tdate, "%d-%m-%Y"), units = "weeks"),
                  Mon = months(as.Date(File1$tdate, "%d-%m-%Y")),
                  Day = substr(File1$tdate,1,2))
  
  File1$weekday <- as.factor(File1$weekday)
  File1$Mon <- factor(File1$Mon)
  File1$Day <- factor(as.character(File1$Day))
  File1$age <- as.numeric(File1$age)
  ## Remove Date coulmns
  File1 <- select(File1, thr, weekday, age, Mon, Day, Count)
  
  ## Return File1
  File1 
}

   


一些错误:

举个明确的例子,假设我们的抛两次硬币,出现H的次数x服从binomial(2, p)的二项分布,又假设我们我们观测了一次发现x=2,那么p=0.5的概率有多大?(必须是区间,单点的概率是~0

注:算了一半天对不上,才发现,我把很多概念混淆了。

f(x|θ),按照定义就是当我们已知θ=p=0.5时,x=5出现的概率,根据二项分布;计算可得:f(x=2|θ=0.5) = 0.25

f(θ|x),按照定义就是当我们已知x=2时,p=0.5出现的概率,此时的限定空间是x=2;f(θ=0.5|x=2) ,这就是贝叶斯的后验概率。

f(θ|x) = f(x|θ) * f(θ) / f(x),一定要好好理解这个公式。

这里括号里所有的都是分布了,不是单个值。

 

L(θ|x),按照定义就是给定数据x=5时,p=0.4~0.5出现的概率(显然不能这么定义,这就和f(θ|x)一模一样了)。

 

真的很坑人,这个属于学术界定义的问题,不明所以的人很容易走火入魔栽进去 ,必须了解这方面的历史,先看定义。

必须明确数学语言,不可含糊。


基础知识回顾

事件之间的相互独立:在概率论里,说两个事件是独立的,直觉上是指一次实验中一事件的发生不会影响到另一事件发生的概率。例如,在一般情况下可以认为连续两次掷骰子得到的点数结果是相互独立的。类似地,两个随机变量是独立的,若其在一事件给定观测量的条件概率分布和另一事件没有被观测的概率分布是一样的。

概率定义:两个事件A和B是独立的当且仅当Pr(A ∩ B) = Pr(A)*Pr(B)

 

事件之间互斥:A和B之间不能同时发生。

概率定义:P(A+B)=P(A)+P(B),或者P(AB) = 0.

 

韦恩图里的交集到底是什么?不管A和B是否独立,都不影响韦恩图的交集。有交集代表A和B不互斥。所以韦恩图是看不出来事件之间的关系的,只能判断是否互斥。

 

贝叶斯定理很健壮,当A和B相互独立时,也是成立的,此时的条件概率就没有意义了。互斥时也是成立的,只是等式为0.

条件概率是用于衡量事件之间相互关系的,当A和B事件之间不互斥也不相互独立,也就是某种程度的相互影响。

 

只怪当时学得太肤浅,不求甚解。。。

 

突然明白为什么数学和逻辑学会费力气造出这么多独立的符号和语言,因为语言不精准的话思考到后面就是一团浆糊了

随机试验:定义里包括了三个必要条件,可重复、结果空间已知、单次结果不可知;不随机试验有很多种,不可重复,比如历史;样本空间无限,无穷;单次结果已知,单面硬币。随机是针对第三条的,单次结果在试验前不可知。

随机事件:也叫事件,在随机试验里,基本上,只要样本空间是有限的,则在样本空间内的任何一个子集合,都可以被称为是一个事件。

概率里的事件很复杂,需要分情况考虑。

  • 同一次随机试验下的随机事件,A1,B1
  • 不同随机试验下的随机事件,A1,A2

这里要来继续讨论独立和互斥。

用日常语言来思考非常难受,还是用数学用语吧。

独立:Pr(A ∩ B) = Pr(A)*Pr(B),独立就没有条件概率,独立一般描述不同随机试验之间的关系。可以随机变量之间独立,可以事件独立。不独立就是有关系,有点复杂。

互斥:P(A+B)=P(A)+P(B),不互斥就是A和B有交集,可能同时发生。互斥描述的是同一次随机试验下的随机事件之间的关系。

 

条件概率:AB发生的条件下发生的概率。当A和B既不独立,也不互斥,此时贝叶斯定理和推断才有意义。

 

P(A, B)和P(A|B)本质的区别?P(AB) ,没错最终的效果是一样的A和B都会发生,但是出发点不一样,一个是全集,一个是B空间。

 

posted @ 2019-05-15 21:11  Life·Intelligence  阅读(2200)  评论(0编辑  收藏  举报
TOP