从R ^ d注入到[0,1] ^ d

时间:2019-03-14 13:58:19

标签: r optimization constraints

我正在尝试在某些权重上优化函数,这些权重都应该是正数并加起来为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个?

1 个答案:

答案 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

但是在您的问题中,这个额外值是什至很重要,甚至在输出矢量的位置上也很重要,所以我建议确保它有意义。