Estou usando o pacote nnet no R para tentar construir uma ANN para prever preços de imóveis para condomínios (projeto pessoal). Eu sou novo nisso e não tenho formação em matemática, então, por favor, fique comigo.
Eu tenho variáveis de entrada que são binárias e contínuas. Por exemplo, algumas variáveis binárias que eram originalmente sim / não foram convertidas em 1/0 para a rede neural. Outras variáveis são como contínuas Sqft
.
Eu normalizei todos os valores em uma escala de 0-1. Talvez Bedrooms
e Bathrooms
não deva ser normalizado, pois o intervalo é de apenas 0-4?
Essas entradas mistas apresentam um problema para a RNA? Eu obtive bons resultados, mas após uma análise mais detalhada, os pesos que a RNA escolheu para determinadas variáveis não parecem fazer sentido. Meu código está abaixo, alguma sugestão?
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)
ATUALIZAÇÃO: Com base nos comentários abaixo sobre a divisão das entradas binárias em campos separados para cada classe de valor, meu código agora se parece com:
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)
Os nós ocultos no código acima são 12, mas eu tentei um intervalo de nós ocultos de 3 a 25 e todos apresentam resultados piores que os parâmetros originais que eu tinha acima no código original postado. Eu também tentei com saída linear = true / false.
Meu palpite é que eu preciso alimentar os dados para nnet de uma maneira diferente, porque não está interpretando a entrada binária corretamente. Ou isso, ou eu preciso fornecer parâmetros diferentes.
Alguma ideia?
fonte
Respostas:
Uma maneira de lidar com essa situação é redimensionar os insumos para que suas variações estejam aproximadamente na mesma escala. Esse conselho geralmente é dado para modelagem de regressão, mas realmente se aplica a todas as situações de modelagem que envolvem variáveis medidas em diferentes escalas. Isso ocorre porque a variação de uma variável binária geralmente é bem diferente da variação de uma variável contínua. Gelman e Hill (2006) recomendam o redimensionamento de entradas contínuas por dois desvios-padrão para obter paridade com entradas binárias (sem escala). Essa recomendação também se reflete em uma publicação em papel e blog .
Uma recomendação mais específica para redes neurais é usar "codificação de efeito" para entradas binárias (isto é, -1 e 1) em vez de "codificação fictícia" (0 e 1) e dar o passo adicional de centralizar variáveis contínuas. Essas recomendações vêm de uma extensa FAQ de Warren Sarle, em particular as seções "Por que não codificar entradas binárias como 0 e 1?" e "Devo padronizar as variáveis de entrada?" A essência, no entanto, é a mesma:
Quanto às variáveis categóricas não ordenadas - você deve dividi-las em indicadores binários. Eles simplesmente não são significativos de outra maneira.
fonte