J'utilise le package nnet dans R pour tenter de construire un ANN pour prédire les prix immobiliers des condos (projet personnel). Je suis nouveau dans ce domaine et je n'ai pas de formation en mathématiques, alors s'il vous plaît, mettez-moi à nu.
J'ai des variables d'entrée qui sont à la fois binaires et continues. Par exemple, certaines variables binaires qui étaient à l'origine oui / non ont été converties en 1/0 pour le réseau neuronal. D'autres variables sont continues comme Sqft
.
Échantillon de données d'entrée
J'ai normalisé toutes les valeurs pour qu'elles soient sur une échelle de 0-1. Peut Bedrooms
- être et Bathrooms
ne devrait pas être normalisé puisque leur plage n'est que de 0 à 4?
Ces intrants mixtes posent-ils un problème pour l'ANN? J'ai obtenu de bons résultats, mais en y regardant de plus près, les poids que l'ANN a choisis pour certaines variables ne semblent pas avoir de sens. Mon code est ci-dessous, des suggestions?
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)
MISE À JOUR: Sur la base des commentaires ci-dessous concernant la répartition des entrées binaires dans des champs séparés pour chaque classe de valeur, mon code ressemble maintenant à:
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)
Les nœuds cachés dans le code ci-dessus sont 12, mais j'ai essayé une gamme de nœuds cachés de 3 à 25 et tous donnent des résultats pires que les paramètres d'origine que j'avais ci-dessus dans le code d'origine publié. Je l'ai également essayé avec une sortie linéaire = vrai / faux.
Je suppose que j'ai besoin de fournir les données à nnet d'une manière différente, car cela n'interprète pas correctement l'entrée binaire. Soit ça, soit je dois lui donner différents paramètres.
Des idées?
la source
Réponses:
Une façon de gérer cette situation consiste à redimensionner les entrées de sorte que leurs variances soient à peu près à la même échelle. Ce conseil est généralement donné pour la modélisation de régression, mais il s'applique vraiment à toutes les situations de modélisation qui impliquent des variables mesurées à différentes échelles. En effet, la variance d'une variable binaire est souvent très différente de la variance d'une variable continue. Gelman et Hill (2006) recommandent de redimensionner les entrées continues de deux écarts-types pour obtenir la parité avec les entrées binaires (non mises à l'échelle). Cette recommandation est également reflétée dans un article et un blog .
Une recommandation plus spécifique pour les réseaux de neurones consiste à utiliser le "codage d'effet" pour les entrées binaires (c'est-à-dire -1 et 1) au lieu du "codage factice" (0 et 1) et à prendre l'étape supplémentaire de centrer les variables continues. Ces recommandations proviennent d'une FAQ détaillée de Warren Sarle, en particulier des sections "Pourquoi ne pas coder les entrées binaires en 0 et 1?" et "Dois-je standardiser les variables d'entrée?" L'essentiel, cependant, est le même:
Quant aux variables catégorielles non ordonnées - vous devez les décomposer en indicateurs binaires. Ils n'ont tout simplement pas de sens autrement.
la source