θ^N
minθ∈ΘN−1∑i=1Nq(wi,θ)
θ^NΘH^
N−1∑Ni=1q(wi,θ)θ0
minθ∈ΘEq(w,θ).
N−1∑Ni=1q(wi,θ)Θ जिसमें उद्देश्य समारोह के हेस्सियन सकारात्मक निश्चित नहीं की जरूरत है।
अपनी पुस्तक में आगे वोल्ड्रिज हेसियन के अनुमानों का एक उदाहरण देता है जो कि संख्यात्मक रूप से सकारात्मक निश्चित होने की गारंटी है। व्यवहार में हेसियन की गैर-सकारात्मक निश्चितता को इंगित करना चाहिए कि समाधान या तो सीमा बिंदु पर है या समाधान खोजने में विफल एल्गोरिथ्म। जो आमतौर पर एक और संकेत है कि फिट किया गया मॉडल किसी दिए गए डेटा के लिए अनुपयुक्त हो सकता है।
यहाँ संख्यात्मक उदाहरण है। मैं गैर-रैखिक कम से कम वर्गों की समस्या उत्पन्न करता हूं:
yi=c1xc2i+εi
X[1,2]εσ2set.seed(3)
एक्समैंyमैं
मैंने सामान्य गैर-रैखिक कम से कम वर्गों के उद्देश्य फ़ंक्शन को चुना है:
क्ष( w , θ ) = ( y )- सी1एक्ससी2मैं)4
यहाँ समारोह के अनुकूलन के लिए आर में कोड है, इसकी ढाल और हेसियन।
##First set-up the epxressions for optimising function, its gradient and hessian.
##I use symbolic derivation of R to guard against human error
mt <- expression((y-c1*x^c2)^4)
gradmt <- c(D(mt,"c1"),D(mt,"c2"))
hessmt <- lapply(gradmt,function(l)c(D(l,"c1"),D(l,"c2")))
##Evaluate the expressions on data to get the empirical values.
##Note there was a bug in previous version of the answer res should not be squared.
optf <- function(p) {
res <- eval(mt,list(y=y,x=x,c1=p[1],c2=p[2]))
mean(res)
}
gf <- function(p) {
evl <- list(y=y,x=x,c1=p[1],c2=p[2])
res <- sapply(gradmt,function(l)eval(l,evl))
apply(res,2,mean)
}
hesf <- function(p) {
evl <- list(y=y,x=x,c1=p[1],c2=p[2])
res1 <- lapply(hessmt,function(l)sapply(l,function(ll)eval(ll,evl)))
res <- sapply(res1,function(l)apply(l,2,mean))
res
}
पहला परीक्षण कि ढाल और हेसियन विज्ञापित के रूप में काम करता है।
set.seed(3)
x <- runif(10,1,2)
y <- 0.3*x^0.2
> optf(c(0.3,0.2))
[1] 0
> gf(c(0.3,0.2))
[1] 0 0
> hesf(c(0.3,0.2))
[,1] [,2]
[1,] 0 0
[2,] 0 0
> eigen(hesf(c(0.3,0.2)))$values
[1] 0 0
एक्सy
> df <- read.csv("badhessian.csv")
> df
x y
1 1.168042 0.3998378
2 1.807516 0.5939584
3 1.384942 3.6700205
4 1.327734 -3.3390724
5 1.602101 4.1317608
6 1.604394 -1.9045958
7 1.124633 -3.0865249
8 1.294601 -1.8331763
9 1.577610 1.0865977
10 1.630979 0.7869717
> x <- df$x
> y <- df$y
> opt <- optim(c(1,1),optf,gr=gf,method="BFGS")
> opt$par
[1] -114.91316 -32.54386
> gf(opt$par)
[1] -0.0005795979 -0.0002399711
> hesf(opt$par)
[,1] [,2]
[1,] 0.0002514806 -0.003670634
[2,] -0.0036706345 0.050998404
> eigen(hesf(opt$par))$values
[1] 5.126253e-02 -1.264959e-05
ग्रेडिएंट शून्य है, लेकिन हेसियन गैर सकारात्मक है।
नोट: यह उत्तर देने का मेरा तीसरा प्रयास है। मुझे उम्मीद है कि मैं आखिरकार सटीक गणितीय बयान देने में कामयाब रहा, जिसने मुझे पिछले संस्करणों में हटा दिया।