2012-06-07 21 views
11

Estoy intentando predecir la clase (0 ó 1) para un conjunto de datos de prueba utilizando una red neuronal entrenada utilizando el paquete NeuralNet en R.clase de predicción para los nuevos datos utilizando NeuralNet

los datos que tengo miradas de la siguiente :

Por tren:

x1   x2   x3   x4   y 
0.557  0.6217009 0.4839  0.5606936 0 
0.6549  0.6826347 0.4424  0.4117647 1 
0.529  0.5744681 0.5017  0.4148148 1 
0.6016771 0.5737052 0.3526971 0.3369565 1 
0.6353945 0.6445013 0.5404255 0.464  1 
0.5735294 0.6440678 0.4385965 0.5698925 1 
0.5252  0.5900621 0.4412  0.448  0 
0.7258687 0.7022059 0.5347222 0.4498645 1 

y más.

El conjunto de pruebas se ve exactamente igual que los datos de entrenamiento, solo con valores diferentes (si es necesario, publicaré algunas muestras).

El código que uso es el siguiente:

> library(neuralnet) 
> nn <- neuralnet(y ~ x1+x2+x3+x4, data=train, hidden=2, err.fct="ce", linear.output=FALSE) 
> plot(nn) 
> compute(nn, test) 

Los trenes de la red y que pueda representar con éxito la red de cómputo, pero no funciona. Cuando corro calcular que me da el siguiente error:

Error in neurons[[i]] %*% weights[[i]] : non-conformable arguments 

Así que básicamente estoy tratando de formar una red neuronal para clasificar con éxito los nuevos datos de prueba.

Cualquier ayuda es apreciada.

Editar:

Un muestreo del objeto de prueba es:

x1   x2 x3   x4   y 
0.5822 0.6591 0.6445013 0.464  1 
0.4082 0.5388 0.5384616 0.4615385 0 
0.4481 0.5438 0.6072289 0.5400844 1 
0.4416 0.5034 0.5576923 0.3757576 1 
0.5038 0.6878 0.7380952 0.5784314 1 
0.4678 0.5219 0.5609756 0.3636364 1 
0.5089 0.5775 0.6183844 0.5462555 1 
0.4844 0.7117 0.6875  0.4823529 1 
0.4098 0.711 0.6801471 0.4722222 1 

También he probado con la columna y vacío de cualquier valor.

+5

Es necesario probar con ninguna columna y en absoluto. Que estén vacíos o no, no afectará la prueba para matrices conformables. –

Respuesta

20

difícil de decir, en ausencia de una buena descripción de la 'test'-objeto, pero puede que ver si esto da mejores resultados:

compute(nn, test[, 1:4]) 
+2

Eso lo hizo, al igual que eliminar la columna y del conjunto de prueba. ¡Muchas gracias! – user1074057

+1

gracias DWin, ¡esto fue de ayuda! –

+0

Piggy-backing sobre esto: si usó una fórmula que no incluía TODAS las columnas en su marco de datos, querrá hacer algo como: 'mf <- model.frame (fmla, data = DF); calcular (nn, mf [, 2: ncol (mf)]) '(dependiendo de qué columna es su objetivo) – rhombidodecahedron

7

que tenían el mismo problema. Puse debugonce(neuralnet) y descubrí que neuralnet estaba multiplicando matrices de diferentes tamaños.

He resuelto el problema de retirar la columna y de prueba con esta función

columns <- c("x1","x2","x3","x4") 
covariate <- subset(test, select = columns) 
+0

nunca escuché de 'debugonce()' antes. ¡Gran herramienta! – Ant

0

Sé que esto es una entrada antigua, pero me encontré con una pieza única que puede ayudar a alguien en el futuro. Pensé que esta publicación era más aplicable ya que arroja el mismo error.

Escalado de un conjunto de datos debe ser convertido de nuevo en un hoja.de.datos para su uso en cómputo

#scaled data 
scaledData=scale(data) 
nn=neuralnet(y~x,data=scaledData[train,]) 

#this repeatedly failed for me 
compute(nn,scaledData[test,]) 

#this worked 
compute(nn,as.data.frame(scaledData)[test,]) 
Cuestiones relacionadas