【发布时间】:2019-02-07 14:54:15
【问题描述】:
我想最小化一个函数,但不能成功。
问题设置:
mtcars$gender <- c(rep(1, 10), rep(0, 4), rep(1, 6), rep(0 , 12))
predictions <- data.frame(
c(0.05, 0.03, 0.99, 0.07, 0.00, 0.10, 0.00, 0.84, 0.92, 0.01, 0.03, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 0.97, 0.00, 0.00, 0.00, 0.00, 1.00, 0.86, 0.84, 0.01, 0.08, 0.00, 0.86),
c(0.95, 0.97, 0.01, 0.80, 0.07, 0.82, 0.00, 0.14, 0.08, 0.95, 0.94, 0.03, 0.03, 0.03, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.03, 0.02, 0.07, 0.02, 0.01, 0.00, 0.12, 0.16, 0.10, 0.79, 0.05, 0.13),
c(0.00, 0.00, 0.00, 0.13, 0.93, 0.08, 1.00, 0.02, 0.00, 0.04, 0.03, 0.97, 0.97, 0.97, 1.00, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.98, 0.93, 0.98, 0.99, 0.00, 0.02, 0.00, 0.89, 0.13, 0.95, 0.01))
colnames(predictions) <- c(4, 6, 8)
actual.probs <- apply(predictions, 1, which.max)
actual.probs <- as.data.frame.matrix(prop.table(table(mtcars$gender, actual.probs)))
real.probs <- data.frame(matrix(c(0.1, 0.1, 0.2, 0.2, 0.2, 0.2), nrow = 2, ncol = 3))
我使用了一种预测算法,它让我知道汽车有 4,6 或 8 个气缸的概率。结果存储在“预测”中。但是分布 (actual.probs) 与现实中的分布 (real.probs) 不同。为了调整它,我想将概率乘以权重,得到概率最高的那个并重新计算表格。我想要的结果是获得与真实分布的最小偏差所需的权重。
optimresult <- predictions
fn <- function(v) {
weight1 <- v[1]
weight2 <- v[2]
weight3 <- v[3]
optimresult[,1] <- optimresult[,1] * weight1
optimresult[,2] <- optimresult[,2] * weight2
optimresult[,3] <- optimresult[,3] * weight3
result <- apply(optimresult, 1, which.max) # get highest probablity
actualprobs <- prop.table(table(mtcars[["gender"]], result))
return <- sum(abs(real.probs - actualprobs))
}
optim(c(1, 1, 1), fn)
起始值都是一,但该功能似乎不起作用。我做错了什么?
【问题讨论】:
-
所以,您想将实际概率乘以一个常数,以使新矩阵值尽可能接近真实概率,这是否正确?您要乘以一个常数还是 6 个常数(每个数字一个)?我的意思是,要获得每个数字的常数就像将实际概率中的每个数字除以实际概率一样简单,从该矩阵中除以 6 个常数。但我可能误解了这个问题。
-
是的,这是正确的,我希望新的矩阵值尽可能接近真实概率。我希望通过使用不同的数字或 weight1、weight2 和 weight3 来实现这一点,因为它们会改变概率的原始值。我已经尝试过使用随机数的 bruce force 方法,但这在计算上相当昂贵
-
另一个观察:在你的函数“result
-
如果除掉 actual.probs/real.probs 会发生什么?这些数字不是使矩阵相等的常数吗? (我的意思是,在矩阵乘法的 R 标准下)
-
是的,但最高概率的索引为我提供了算法将预测的实际类别。我需要它来建表。概率只是帮助我到达那里,它们是我必须操纵的价值观
标签: r optimization minimization