是否可以在公式中指定条件,例如
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