【发布时间】:2018-09-28 09:20:37
【问题描述】:
此问题与Applying Cost Functions in R有关
我想知道如何保存为optim 的每次迭代生成的系数。 trace=TRUE 使我能够打印出每次迭代的系数,但如何保存它们?
示例代码:
set.seed(1)
X <- matrix(rnorm(1000), ncol=10) # some random data
Y <- sample(0:1, 100, replace=TRUE)
# Implement Sigmoid function
sigmoid <- function(z) {
g <- 1/(1+exp(-z))
return(g)
}
cost.glm <- function(theta,X) {
m <- nrow(X)
g <- sigmoid(X%*%theta)
(1/m)*sum((-Y*log(g)) - ((1-Y)*log(1-g)))
}
X1 <- cbind(1, X)
df <- optim(par=rep(0,ncol(X1)), fn = cost.glm, method='CG',
X=X1, control=list(trace=TRUE))
哪些输出:
Conjugate gradients function minimizer Method: Fletcher Reeves tolerance used in gradient test=2.00089e-11 0 1 0.693147 parameters 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 i> 1 3 0.662066 parameters -0.01000 -0.01601 -0.06087 0.14891 0.04123 0.03835 -0.01898 0.00637 0.02954 -0.01423 -0.07544 i> 2 5 0.638548 parameters -0.02366 -0.03733 -0.13803 0.32782 0.09034 0.08082 -0.03978 0.01226 0.07120 -0.02925 -0.16042 i> 3 7 0.630501 parameters -0.03478 -0.05371 -0.19149 0.43890 0.11960 0.10236 -0.04935 0.01319 0.10648 -0.03565 -0.20408 i> 4 9 0.627570.......
而df不包含任何有关系数的信息,而只显示最终的系数和最终的成本:
str(df)
List of 5 $ par : num [1:11] -0.0679 -0.1024 -0.2951 0.6162 0.124 ... $ value : num 0.626 $ counts : Named int [1:2] 53 28 ..- attr(*, "names")= chr [1:2] "function" "gradient" $ convergence: int 0 $ message : NULL
【问题讨论】:
标签: r