Comment gérer un mélange d'entrées binaires et continues dans les réseaux de neurones?

14

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 Bathroomsne 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?

ChrisArmstrong
la source
1
La manière standard d'utiliser des données binaires ou catégorielles comme entrées de réseau neuronal consiste à étendre le champ aux vecteurs indicateurs. Par exemple, si vous aviez un champ qui pouvait prendre des valeurs 1,2 ou 3, un 1 serait étendu à [1,0,0], 2 -> [0,1,0] et 3 -> [ 0,0,1]. Les données à valeur réelle sont généralement conservées telles quelles.
user1149913
1
Maintenant que vous en parlez, je semble me souvenir d'avoir lu ceci quelque part lors de ma recherche d'une réponse. Donc, comme la source d'informations se trouve sur un fichier csv, dois-je réellement ajouter des colonnes pour accueillir les nouveaux champs pour chaque entrée binaire? Par exemple, si l'entrée de la chambre varie de 0 à 4, en utilisant votre exemple ci-dessus, je créerais 4 colonnes supplémentaires (5 au total, car «0» signifie studio) et un condo 3BR serait exprimé comme 0,0,0,1 , 0?
ChrisArmstrong

Réponses:

8

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:

La contribution d'un intrant dépendra fortement de sa variabilité par rapport aux autres intrants.

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.

shadowtalker
la source