可以为SVM(支持向量机)混合分类数据和连续数据吗?


14

我有一个像

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

我将其嵌入到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

功能指标:

  • 1是“收入”
  • 2是“年”
  • 3是“使用/商业示例”
  • 4是“使用/公寓”
  • 5是“使用/单身家庭”
  • 6是“使用/商店和房子”

可以训练像这样的连续(年,收入)和分类(使用)数据混合的支持向量机(SVM)吗?


3
您应该至少拼写一次“ SVM”。
彼得·弗洛姆

1
确保缩放数据!
帕特里克·卡尔登

Answers:


7

是! 但也许不是您的意思。在我的研究中,我经常使用递归分区之类的算法从连续值特征中创建分类特征。我通常将这种方法与支持向量机的SVMLight实现一起使用,但我也将其与LibSVM一起使用。您需要确保在训练和分类期间将分区的分类特征分配到特征向量中的特定位置,否则模型将变得笨拙。

编辑:也就是说,完成此操作后,我将向量的前n个元素分配给与递归分区的输出关联的二进制值。在二元特征建模中,您只有0和1的巨大向量,因此对于模型而言,一切看起来都是相同的,除非您明确指出不同特征的位置。这可能是过于具体的,因为我想大多数SVM实现都将自己执行此操作,但是,如果您想自己编程,则可能需要考虑一下!


1
谢谢Kyle,您能具体一点吗?您是什么意思“将分区的分类特征分配到特定位置”?
Seamus Abshere

@SeamusAbshere没问题!我修改了答案以解决此问题!
凯尔。

我感觉好像听说过libsvm会自动执行您在说什么-有什么想法吗?
Seamus Abshere

@SeamusAbshere我想你是对的,但我不确定。现在,我考虑了一下,现在不确定它如何以其他方式起作用。
凯尔。

受到@Kyle的回答的鼓舞,我编写了一个Ruby库(VectorEmbed),该库自动进行分类(使用Murmur32散列)和连续数据的转换(嵌入)。它输出libsvm格式的文件。
Seamus Abshere
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.