Je me demande simplement si quelqu'un est familier avec le regroupement des entrées nominales. J'ai regardé SOM comme une solution mais apparemment, cela ne fonctionne qu'avec des fonctionnalités numériques. Existe-t-il des extensions pour les fonctionnalités catégorielles? Plus précisément, je me posais des questions sur les «jours de la semaine» comme fonctionnalités possibles. Bien sûr, il est possible de le convertir en une caractéristique numérique (c.-à-d. Du lundi au dimanche correspondant aux n ° 1 à 7), mais la distance euclidienne entre le soleil et le lundi (1 et 7) ne serait pas la même que la distance du lundi au mardi (1 et 2). ). Toutes suggestions ou idées seraient très appréciées.
11
Réponses:
Contexte:
Le moyen le plus logique de transformer l'heure est en deux variables qui oscillent dans les deux sens hors de la synchronisation. Imaginez la position de la fin de l'aiguille des heures d'une horloge de 24 heures. La
x
position oscille d'avant en arrière par rapport à lay
position. Pour une horloge de 24 heures , vous pouvez y arriver avecx=sin(2pi*hour/24)
,y=cos(2pi*hour/24)
.Vous avez besoin des deux variables ou le bon mouvement dans le temps est perdu. Cela est dû au fait que la dérivée de sin ou cos change dans le temps tandis que la
(x,y)
position varie en douceur lorsqu'elle se déplace autour du cercle unitaire.Enfin, examinez s'il vaut la peine d'ajouter une troisième fonctionnalité pour tracer le temps linéaire, qui peut être construite en heures (ou minutes ou secondes) à partir du début du premier enregistrement ou un horodatage Unix ou quelque chose de similaire. Ces trois caractéristiques fournissent ensuite des indicateurs pour la progression cyclique et linéaire du temps, par exemple, vous pouvez extraire des phénomènes cycliques tels que les cycles de sommeil dans le mouvement des personnes et également une croissance linéaire comme la population en fonction du temps.
Exemple de réalisation:
Essayons maintenant:
Vous pouvez à peine voir qu'il y a des heures après minuit incluses avec le cluster vert avant minuit. Réduisons maintenant le nombre de clusters et montrons qu'avant et après minuit peuvent être connectés en un seul cluster plus en détail:
Voyez comment le cluster bleu contient des heures antérieures et postérieures à minuit regroupées dans le même cluster ...
Vous pouvez le faire pour l'heure, le jour de la semaine ou la semaine du mois, le jour du mois ou la saison, etc.
la source
Les variables nominales courantes sont codées de manière factice lorsqu'elles sont utilisées dans SOM (par exemple, une variable pour avec 1 pour lundi 0 pour pas lundi, une autre pour mardi, etc.).
Vous pouvez incorporer des informations supplémentaires en créant des catégories combinées de jours adjacents. Par exemple: lundi et mardi, mardi et mercredi, etc. Cependant, si vos données se rapportent au comportement humain, il est souvent plus utile d'utiliser Weekday et Weekend comme catégories.
la source
Pour les variables nominales, l'encodage typique dans un réseau de neurones ou dans un contexte d'ingénierie électrique est appelé "one-hot" - un vecteur de tous les 0, avec un 1 dans la position appropriée pour la valeur de la variable. Pour les jours de la semaine, par exemple, il y a sept jours, donc vos vecteurs one-hot auraient une longueur de sept. Lundi serait alors représenté comme [1 0 0 0 0 0 0], mardi comme [0 1 0 0 0 0 0], etc.
Comme l'a laissé entendre Tim, cette approche peut être facilement généralisée pour englober des vecteurs de caractéristiques booléennes arbitraires, où chaque position dans le vecteur correspond à une caractéristique d'intérêt dans vos données, et la position est définie sur 1 ou 0 pour indiquer la présence ou l'absence de cette fonctionnalité.
Une fois que vous avez des vecteurs binaires, la distance de Hamming devient une métrique naturelle, bien que la distance euclidienne soit également utilisée. Pour les vecteurs binaires à chaud, le SOM (ou un autre approximateur de fonction) interpolera naturellement entre 0 et 1 pour chaque position de vecteur. Dans ce cas, ces vecteurs sont souvent traités comme les paramètres d'une distribution de Boltzmann ou softmax sur l'espace de la variable nominale; ce traitement permet également d'utiliser les vecteurs dans une sorte de scénario de divergence KL.
Les variables cycliques sont beaucoup plus délicates. Comme Arthur l'a dit dans les commentaires, vous devez définir vous-même une mesure de distance qui incorpore la nature cyclique de la variable.
la source
En supposant que le jour de la semaine (dow) passe de [0, 6], au lieu de projeter des données sur un cercle, une autre option consiste à utiliser:
Pour comprendre pourquoi, considérez le Dow comme une horloge
le différentiel entre 6 et 1 pourrait être 6 - 1 = 5 (aller dans le sens horaire de 1 à 6) ou 7 - (6 - 1) = 2. Prendre min des deux options devrait faire l'affaire.
En général, vous pouvez utiliser:
min(abs(diff), range - abs(diff))
la source
J'ai réussi à encoder les jours de la semaine (et les mois de l'année) en tant que tuple de (cos, sin) comme le souligne Whuber dans son commentaire. Que la distance euclidienne utilisée.
Voici un exemple de code dans r:
La distance euclidienne entre 0 et 6 est égale à 0 et 1.
la source