2013-09-07 2 views
2

Можно ли указать условия в формуле, напримерусловие в формуле в машинном обучении

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 нейронную сеть, скорее всего, не «узнать» это состояние самого по себе и только значению выходных аппроксимируя это условие.

Можно ли заставить нейронную сеть соответствовать этому условию?

[EDIT]

Как указано @Spacedman, в этом примере blue не добавляет информацию к модели - она ​​может быть вычислена только с 1 - red - green. Тем не менее я должен был бы способ «сказать» модель, в которой есть условие:

red + green <= 1 
+0

Если ваши три переменные составляют до 1, то в третьей переменной нет дополнительной информации, и вы можете ее оставить. Можете ли вы привести рабочий пример, потому что в 'lm' вам нужно« cbind »множественный отклик на lhs, чтобы остановить их простым добавлением. – Spacedman

+0

Хм, мне нужно подумать об этом. С одной стороны, в третьей переменной, возможно, нет дополнительной информации. С другой стороны, как должен алгоритм знать, что 'out1 + out3' плюс третья переменная, не указанная в модели, составляет до одного? Я отредактировал свою публикацию, чтобы предоставить пример – speendo

+0

@Spacedman, пожалуйста, проверьте мои изменения. – speendo

ответ

0

Просто добавьте функцию в набор данных, который возвращает 1, если условие истинно, и 0 (или -1 в зависимости от вашей активации функция), если false, или наоборот. Если вы когда-либо захотите заставить алгоритм ML рассмотреть что-то, просто добавьте его как функцию. Он будет игнорироваться, если он не будет прогностическим большинством алгоритмов.

Смежные вопросы