【发布时间】:2013-09-11 09:47:37
【问题描述】:
是否可以在公式中指定条件,例如
out1 + out2 ~ in1 + in2 + in3 <with all (out1 + out2 = 1)>
一个可能的例子:
试图预测由red、green 和blue 组合而成的颜色。当没有关于模型的假设时,这可以通过神经网络来完成:
library("neuralnet")
red <- runif(n=50)
green <- (1 - red) * runif(n=50)
blue <- 1 - red - green
input1 <- green^2
input2 <- sin(red)
trainingdata <- data.frame(red, green, blue, input1, input2)
color.net <- neuralnet(red + green + blue ~ input1 + input2, trainingdata)
test.red <- runif(10)
test.green <- (1 - test.red) * runif(n=10)
test.input1 <- test.green^2
test.input2 <- sin(test.red)
testdata <- data.frame(test.input1, test.input2)
testoutcolor <- as.data.frame(compute(color.net, testdata)[2])
colnames(testoutcolor) <- c("red", "green", "blue")
testoutcolor$sum <- testoutcolor$red + testoutcolor$green + testoutcolor$blue
testoutcolor
即使trainingdata 具有red + green + blue = 1,神经网络也很可能不会自行“学习”这个条件,而只会输出接近这个条件的值。
是否可以强制神经网络满足这个条件?
[编辑]
正如@Spacedman 所说,在此示例中,blue 不会将信息添加到模型中 - 它可以仅使用 1 - red - green 进行计算。我仍然需要一种方法来“告诉”模型存在某种条件:
red + green <= 1
【问题讨论】:
-
如果您的三个变量加起来为 1,则第三个变量中没有额外信息,您可以将其关闭。你能举个例子吗,因为在
lm中你需要cbindlhs 上的多重响应来阻止它们被简单地添加。 -
嗯,我必须考虑一下。一方面,第三个变量中可能真的没有额外的信息。另一方面,算法如何知道
out1 + out3加上模型中未指定的第三个变量加起来是一个?我编辑我的帖子以提供示例 -
@Spacedman 请检查我的编辑
-
好吧,这看起来像是一个特定的神经网络/机器学习的东西,而不是一般的公式(包括线性模型和 GLM)。建议您稍微修改一下标题并添加“神经网络”或“机器学习”标签?
-
我认为,如果您提出您想要解决的实际问题,而不是询问如何使用公式来解决问题,您会走得更远。可能有更好的方法来做到这一点(或构建公式的更好方法)
标签: r machine-learning conditional formula