Estoy usando el paquete nnet en R para intentar construir un ANN para predecir los precios inmobiliarios de condominios (proyecto personal). Soy nuevo en esto y no tengo experiencia en matemáticas, así que por favor, descuida conmigo.
Tengo variables de entrada que son binarias y continuas. Por ejemplo, algunas variables binarias que originalmente eran sí / no se convirtieron a 1/0 para la red neuronal. Otras variables son continuas como Sqft
.
He normalizado todos los valores para que estén en una escala de 0-1. ¿Tal vez Bedrooms
y Bathrooms
no debería normalizarse ya que su rango es solo 0-4?
¿Estas entradas mixtas presentan un problema para el ANN? He obtenido buenos resultados, pero después de un examen más detallado, los pesos que el ANN ha elegido para ciertas variables no parecen tener sentido. Mi código está abajo, ¿alguna sugerencia?
ANN <- nnet(Price ~ Sqft + Bedrooms + Bathrooms + Parking2 + Elevator +
Central.AC + Terrace + Washer.Dryer + Doorman + Exercise.Room +
New.York.View,data[1:700,], size=3, maxit=5000, linout=TRUE, decay=.0001)
ACTUALIZACIÓN: Según los comentarios a continuación sobre la separación de las entradas binarias en campos separados para cada clase de valor, mi código ahora se ve así:
ANN <- nnet(Price ~ Sqft + Studio + X1BR + X2BR + X3BR + X4BR + X1Bath
+ X2Bath + X3Bath + X4bath + Parking.Yes + Parking.No + Elevator.Yes + Elevator.No
+ Central.AC.Yes + Central.AC.No + Terrace.Yes + Terrace.No + Washer.Dryer.Yes
+ Washer.Dryer.No + Doorman.Yes + Doorman.No + Exercise.Room.Yes + Exercise.Room.No
+ New.York.View.Yes + New.York.View.No + Healtch.Club.Yes + Health.Club.No,
data[1:700,], size=12, maxit=50000, decay=.0001)
Los nodos ocultos en el código anterior son 12, pero he intentado un rango de nodos ocultos de 3 a 25 y todos dan peores resultados que los parámetros originales que tenía anteriormente en el código original publicado. También lo he intentado con salida lineal = verdadero / falso.
Supongo que necesito alimentar los datos a nnet de una manera diferente porque no está interpretando la entrada binaria correctamente. O eso, o necesito darle diferentes parámetros.
¿Algunas ideas?
fuente
Respuestas:
Una forma de manejar esta situación es reescalar las entradas para que sus variaciones sean aproximadamente de la misma escala. Este consejo generalmente se da para el modelado de regresión, pero realmente se aplica a todas las situaciones de modelado que involucran variables medidas en diferentes escalas. Esto se debe a que la varianza de una variable binaria es a menudo bastante diferente de la varianza de una variable continua. Gelman y Hill (2006) recomiendan reescalar entradas continuas por dos desviaciones estándar para obtener paridad con entradas binarias (sin escala). Esta recomendación también se refleja en una publicación en papel y blog .
Una recomendación más específica para las redes neuronales es usar "codificación de efectos" para entradas binarias (es decir, -1 y 1) en lugar de "codificación ficticia" (0 y 1), y dar el paso adicional de centrar variables continuas. Estas recomendaciones provienen de un extenso FAQ de Warren Sarle, en particular las secciones "¿Por qué no codificar entradas binarias como 0 y 1?" y "¿Debo estandarizar las variables de entrada?" La esencia, sin embargo, es la misma:
En cuanto a las variables categóricas desordenadas, debe dividirlas en indicadores binarios. Simplemente no tienen sentido de lo contrario.
fuente