我正在尝试在某些权重上优化函数,这些权重都应该是正数并加起来为1。
因此,我正在通过以下函数转换(无约束)值:
# 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个?
答案 0 :(得分:2)
有多种方法,但是通常我们可以识别两个主要步骤:使值成为非负值(通过取绝对值,平方等)并将其归一化为一。一种很自然的选择是
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
但是在您的问题中,这个额外值是什至很重要,甚至在输出矢量的位置上也很重要,所以我建议确保它有意义。