我试图在一些权重上优化一个函数,这应该都是正数并且加起来一个。
因此,我正在通过函数转换(不受约束的)值:
# Transformation of parameters (FOR ONLY 3 PARAMETRES)
g <- function(v) {
# Ensure they in [0,1]
v <- 1/(1+exp(v))
# Ensure they add up to 1
v <- c( v[1], v[2] * (1-v[1]) )
u <- c(v, 1-sum(v))
u
}
我怎样才能将这个概括为$ d $参数而不是3?
有各种各样的方法,但一般来说我们可以认识到两个主要步骤:使值非负(通过取绝对值,平方等)并归一化为总和为1。一个非常自然的选择
g <- function(v) abs(v) / sum(abs(v))
g(1:5)
# [1] 0.06666667 0.13333333 0.20000000 0.26666667 0.33333333
sum(g(1:5))
# [1] 1
我选择使用abs
来使权重为非负,而x / sum(x)
是使得到的向量总和为1的方法。
如果您希望输入的尺寸减少一个,则可以在函数内添加一个额外的值。由于它是优化的一部分,我认为你不希望这个值是随机的。因此,它可能是固定的,或者以确定的方式依赖于v
。所以,我们可以使用,例如,
g <- function(v) {
v <- c(v, mean(v))
abs(v) / sum(abs(v))
}
g(1:4)
# [1] 0.08 0.16 0.24 0.32 0.20
sum(g(1:4))
# [1] 1
但是在你的问题中,最有可能的是这个额外值是什么,甚至在输出向量的哪个位置,所以我建议确保它有意义。