Argh! I keep getting the following error when attempting to compute
with my neural network:
> net.compute <- compute(net, matrix.train2)
Error in neurons[[i]] %*% weights[[i]] : non-conformable arguments
I can't figure out what the problem is. Below I'll provide you with an example data and formatting from my matrices and then I'll show you the code I'm attempting to run.
matrix.train1
is used for training the network> matrix.train1 (Intercept) survived pclass sexmale age sibsp parch fare embarkedC embarkedQ embarkedS 1 1 0 3 1 22.00 1 0 7.2500 0 0 1 2 1 1 1 0 38.00 1 0 71.2833 1 0 0 3 1 1 3 0 26.00 0 0 7.9250 0 0 1 4 1 1 1 0 35.00 1 0 53.1000 0 0 1 5 1 0 3 1 35.00 0 0 8.0500 0 0 1 6 1 0 3 1 999.00 0 0 8.4583 0 1 0 7 1 0 1 1 54.00 0 0 51.8625 0 0 1 8 1 0 3 1 2.00 3 1 21.0750 0 0 1 9 1 1 3 0 27.00 0 2 11.1333 0 0 1 10 1 1 2 0 14.00 1 0 30.0708 1 0 0 11 1 1 3 0 4.00 1 1 16.7000 0 0 1
matrix.train2
is a slice of the training data used for testing the model> matrix.train2 (Intercept) pclass sexmale age sibsp parch fare embarkedC embarkedQ embarkedS 1 1 1 1 49.00 1 1 110.8833 1 0 0 2 1 3 1 42.00 0 0 7.6500 0 0 1 3 1 1 0 18.00 1 0 227.5250 1 0 0 4 1 1 1 35.00 0 0 26.2875 0 0 1 5 1 3 0 18.00 0 1 14.4542 1 0 0 6 1 3 1 25.00 0 0 7.7417 0 1 0 7 1 3 1 26.00 1 0 7.8542 0 0 1 8 1 2 1 39.00 0 0 26.0000 0 0 1 9 1 2 0 45.00 0 0 13.5000 0 0 1 10 1 1 1 42.00 0 0 26.2875 0 0 1 11 1 1 0 22.00 0 0 151.5500 0 0 1
The only real difference between the two matrices is that matrix.train2
doesn't contain the survived
column.
Here's the R code I'm attempting to run:
#Build a matrix from training data
matrix.train1 <- model.matrix(
~ survived + pclass + sex + age + sibsp + parch + fare + embarked,
data=train1
)
library(neuralnet)
#Train the neural net
net <- neuralnet(
survived ~ pclass + sexmale + age + sibsp + parch + fare + embarkedC +
embarkedQ + embarkedS, data=matrix.train1, hidden=10, threshold=0.01
)
#Build a matrix from test data
matrix.train2 <- model.matrix(
~ pclass + sex + age + sibsp + parch + fare + embarked,
data=train2
)
#Apply neural net to test matrix
net.results <- compute(
net, matrix.train2
)
Error in neurons[[i]] %*% weights[[i]] : non-conformable arguments
Can anyone tell me what I'm doing wrong here?
Thanks!
Updates based on comments so far:
Using the solution from "Predicting class for new data using neuralnet" doesn't seem to work.
> net.compute <- compute(net, matrix.train2[,1:10]) Error in neurons[[i]] %*% weights[[i]] : non-conformable arguments
I'm manually putting my
train1
andtrain2
data frames into matrices viamodel.matrix
because if I don't I get the following error:> Error in neurons[[i]] %*% weights[[i]] : requires numeric/complex matrix/vector arguments
Note: see the following thread for more details on why I'm using model.matrix
: "Working with neuralnet in R for the first time: get “requires numeric/complex matrix/vector arguments” but don't know how to correct".
It looks like you need to remove the predictor variable. Try this:
Try the answer used for this questions,predicting class for new data using neuralnet
I haven't used the neuralnet ackage, but unless it's doing something weird you shouldn't be calling
model.matrix
like that.neuralnet
has a formula interface, so it will callmodel.matrix
for you. You just have to give it the training data frametrain1
.This also applies for predicting on test data. Don't create a model matrix; just pass it the data frame
train2
.I tried this with the neuralnet package as well. I think if you instead of
do
it should work. The names of the variables needs to be in the exact order of the
model.list$variables
, so you can also typeI hope this helps. The reason is - I think - that neuralnet has a problem finding out which variables are in your net and which in the matrix... so you match them explicitly instead.
change the
neuralnet
train to thischange the predictor variable to
it should have the same order of the data taken in a model