Est-il OK de mélanger des données catégorielles et continues pour SVM (Support Vector Machines)?

14

J'ai un jeu de données comme

+--------+------+-------------------+
| income | year |        use        |
+--------+------+-------------------+
|  46328 | 1989 | COMMERCIAL EXEMPT |
|  75469 | 1998 | CONDOMINIUM       |
|  49250 | 1950 | SINGLE FAMILY     |
|  82354 | 2001 | SINGLE FAMILY     |
|  88281 | 1985 | SHOP & HOUSE      |
+--------+------+-------------------+

Je l'intègre dans un espace vectoriel au format LIBSVM

+1 1:46328 2:1989 3:1
-1 1:75469 2:1998 4:1
+1 1:49250 2:1950 5:1
-1 1:82354 2:2001 5:1
+1 1:88281 2:1985 6:1

Indices de fonctionnalités:

  • 1 est "revenu"
  • 2 est "année"
  • 3 est "utiliser / EXEMPT COMMERCIAL"
  • 4 est "utiliser / CONDOMINIUM"
  • 5 est "utiliser / FAMILLE UNIQUE"
  • 6 est "utiliser / SHOP & HOUSE"

Est-il acceptable de former une machine à vecteurs de support (SVM) avec un mélange de données continues (année, revenu) et catégoriques (utilisation) comme celle-ci?

Seamus Abshere
la source
3
Vous devez épeler "SVM", au moins une fois.
Peter Flom - Réintègre Monica
1
Assurez-vous de mettre à l'échelle ces données!
Patrick Caldon

Réponses:

7

Oui! Mais peut-être pas comme vous l'entendez. Dans mes recherches, je crée fréquemment des caractéristiques catégorielles à partir de valeurs à valeur continue en utilisant un algorithme comme le partitionnement récursif . J'utilise généralement cette approche avec l' implémentation SVMLight des machines à vecteurs de support, mais je l'ai également utilisée avec LibSVM. Vous devrez vous assurer d'affecter vos entités catégorielles catégorisées à un endroit spécifique de votre vecteur d'entités lors de la formation et de la classification, sinon votre modèle va finir par se mélanger.

Edit: c'est-à-dire que lorsque j'ai fait cela, j'affecte les n premiers éléments du vecteur aux valeurs binaires associées à la sortie du partitionnement récursif. Dans la modélisation d'entités binaires, vous n'avez qu'un vecteur géant de 0 et de 1, donc tout est identique pour le modèle, sauf si vous indiquez explicitement où se trouvent différentes entités. C'est probablement trop spécifique, car j'imagine que la plupart des implémentations SVM le feront de leur propre chef, mais, si vous aimez programmer le vôtre, cela pourrait être quelque chose à penser!

Kyle.
la source
1
merci Kyle, pouvez-vous être un peu plus précis? Que voulez-vous dire par "attribuer vos caractéristiques catégorielles partitionnées à un endroit spécifique"?
Seamus Abshere
@SeamusAbshere Aucun problème! J'ai modifié ma réponse pour répondre à cela!
Kyle.
J'ai l'impression d'avoir entendu dire que libsvm fait ce dont vous parlez automatiquement - des pensées?
Seamus Abshere
@SeamusAbshere J'imagine que vous avez raison, mais je n'en suis pas sûr. Maintenant que j'y pense, je ne sais pas comment cela pourrait fonctionner d'une autre manière.
Kyle.
Enhardi par la réponse de @ Kyle, j'ai écrit une bibliothèque Ruby ( VectorEmbed ) qui effectue cette conversion (incorporation) automatiquement, à la fois pour les données catégoriques (en utilisant des hachages Murmur32) et continues. Il génère des fichiers au format libsvm.
Seamus Abshere