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

问题描述 投票:1回答: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?

r optimization constraints
1个回答
2
投票

有各种各样的方法,但一般来说我们可以认识到两个主要步骤:使值非负(通过取绝对值,平方等)并归一化为总和为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

但是在你的问题中,最有可能的是这个额外值是什么,甚至在输出向量的哪个位置,所以我建议确保它有意义。

© www.soinside.com 2019 - 2024. All rights reserved.