Mélanger des données continues et binaires avec SVM linéaire?

15

J'ai donc joué avec les SVM et je me demande si c'est une bonne chose à faire:

J'ai un ensemble de fonctionnalités continues (0 à 1) et un ensemble de fonctionnalités catégorielles que j'ai converties en variables factices. Dans ce cas particulier, j'encode la date de la mesure dans une variable fictive:

Il y a 3 périodes sur lesquelles j'ai des données et je leur ai réservé 3 numéros de fonction:

20: 21: 22:

Ainsi, en fonction de la période d'où proviennent les données, différentes fonctionnalités se verront attribuer 1; les autres obtiendront 0.

Le SVM fonctionnera-t-il correctement avec ceci ou c'est une mauvaise chose à faire?

J'utilise SVMLight et un noyau linéaire.

user3010273
la source
Cela fonctionne bien.
Marc Claesen
Ce que vous avez fait est assez bon. J'ai donné une réponse légèrement détaillée ici - quora.com/Machine-Learning/…
TenaliRaman
@TenaliRaman, veuillez ne pas publier de liens vers des sites qui en nécessitent un pour vous connecter avant de pouvoir lire quoi que ce soit.
Marc Claesen
@MarcClaesen J'ai reproduit la réponse ci-dessous.
TenaliRaman

Réponses:

8

Les SVM géreront à la fois les variables binaires et continues tant que vous effectuez un prétraitement: toutes les fonctionnalités doivent être mises à l'échelle ou normalisées. Après cette étape, du point de vue des algorithmes, peu importe si les fonctionnalités sont continues ou binaires: pour les binaires, il voit des échantillons qui sont soit "éloignés", soit très similaires; pour continu, il y a aussi les valeurs intermédiaires. Le noyau n'a pas d'importance en ce qui concerne le type de variables.

iliasfl
la source
1
et quelle serait la meilleure technique de normalisation?
Shlomi Schwartz
23

Réplication de ma réponse depuis http://www.quora.com/Machine-Learning/What-are-good-ways-to-handle-discrete-and-continuous-inputs-together/answer/Arun-Iyer-1

  • Redimensionner les fonctions continues limitées: toutes les entrées continues qui sont limitées, redimensionnez-les à à x = 2 x - max - min[-1,1] .X=2X-max-minmax-min
  • Normaliser toutes les caractéristiques continues: Toutes les entrées continues doivent être normalisées et j'entends par là, pour chaque caractéristique continue, calculer sa moyenne ( ) et son écart type ( σ ) et faire x = x - μμσ .X=X-μσ
  • Binariser les entités catégorielles / discrètes: pour toutes les entités catégorielles, représentez-les comme plusieurs entités booléennes. Par exemple, au lieu d'avoir une fonction appelée marriage_status, ayez 3 fonctions booléennes - marié_status_single, marié_status_married, marié_status_divorced et définissez correctement ces fonctionnalités à 1 ou -1. Comme vous pouvez le voir, pour chaque entité catégorielle, vous ajoutez k entité binaire où k est le nombre de valeurs que prend l'entité catégorielle.

Maintenant, vous pouvez représenter toutes les fonctionnalités dans un seul vecteur que nous pouvons supposer incorporées dans et commencer à utiliser des packages standard pour la classification / régression, etc.Rn

Rn

TenaliRaman
la source
Eh bien, cet article est assez intéressant en ce qui concerne les fonctionnalités catégorielles. On ne dit pas que l'encodage à chaud est le meilleur choix pour les fonctionnalités catégorielles, c'est ce que j'en retire.
displayname
1
c'est une excellente réponse, j'ai lu le lien dans le commentaire @displayname et c'est une comparaison utile. D'après l'article, il apparaît que l'encodage binaire est le meilleur, (pas celui chaud décrit dans cette réponse) et assez simple aussi) Du lien "Binaire: d'abord les catégories sont encodées comme ordinales, puis ces entiers sont convertis en binaires », puis les chiffres de cette chaîne binaire sont divisés en colonnes distinctes. Cela encode les données en moins de dimensions qu'une seule, mais avec une certaine distorsion des distances."
shelbypereira
L'article donné par @displayname est un bon article, mais ne doit pas être pris à sa valeur nominale. La première chose à retenir est que presque toutes les méthodes ML fonctionnent avec une mesure de similitude ou de distance. Le choix de la méthode de codage influence directement la façon dont les distances ou similitudes sont mesurées entre deux points. Un encodage à chaud 1 indique qu'un objet d'une catégorie est similaire à lui-même ou de manière équivalente, il met toutes les catégories à égale distance les unes des autres. Cependant, il existe des cas où certaines catégories sont plus proches que d'autres. Dans ce cas, un codage différent peut vous aider.
TenaliRaman