如何使用LibSVM Weka实现预处理数据集以获得最大效果

ste*_*l12 1 machine-learning svm weka libsvm

所以我读了一篇论文,说正确处理你的数据集可以大大提高LibSVM分类的准确性......我正在使用Weka实现,并希望有一些帮助确保我的数据集是最优的.

这是我的(示例)属性:

Power Numeric (real numbers, range is from 0 to 1.5132, 9000+ unique values)
Voltage Numeric (similar to Power)
Light Numeric (0 and 1 are the only 2 possible values)
Day Numeric (1 through 20 are the possible values, equal number of each value)
Range Nominal {1,2,3,4,5} <----these are the classes
Run Code Online (Sandbox Code Playgroud)

我的问题是:我应该应用哪些Weka预处理过滤器来使这个数据集对LibSVM更有效?

  1. 我应该规范化和/或标准化电源和电压数据值吗?
  2. 我应该在任何事情上使用Discretization过滤器吗?
  3. 我应该将电源/电压值合并到更少数量的垃圾箱中吗?
  4. 我应该使Light值二进制而不是数字吗?
  5. 我应该规范日值吗?这样做甚至有意义吗?
  6. 我是否应该使用Nominal to Binary或Nominal来对其他类别的"Range"类进行过滤?

请就这些问题以及您认为我可能错过的任何其他问题提出建议......

提前致谢!!

Mar*_*sen 6

归一化非常重要,因为它影响SVM使用的距离概念.规范化的两种主要方法是:

  1. 例如,将每个输入维度缩放到相同的间隔[0, 1].到目前为止,这是最常用的方法.有必要防止某些输入维度完全支配其他维度.LIBSVM作者在其初学者指南中推荐(附录B为示例).
  2. 将每个实例缩放到给定长度.这在文本挖掘/计算机视觉中很常见.

至于处理输入类型:

  1. 连续:无需工作,SVM隐含地对这些工作.
  2. 序数:视为连续变量.例如,,可以被建模为1,2,3毫不隐晦地限定的不自然的结构.
  3. 标称:执行单热编码,例如对于具有N个级别的输入,生成N个新的二进制输入维度.这是必要的,因为您必须避免隐式定义标称级别之间的变化距离.例如,模拟,,1,23暗示了一个比一个更接近这是无稽之谈.

必要时,必须在替换输入后进行归一化.


回答你的问题:

  1. 我应该规范化和/或标准化电源和电压数据值吗?

    是的,将所有(最终)输入尺寸标准化为相同的间隔(包括假人!).

  2. 我应该在任何事情上使用Discretization过滤器吗?

    没有.

  3. 我应该将电源/电压值合并到更少数量的垃圾箱中吗?

    不.将它们视为连续变量(例如每个输入一个).

  4. 我应该使Light值二进制而不是数字吗?

    不,SVM没有二进制变量的概念,并将所有内容都视为数字.所以转换它只会导致内部额外的类型转换.

  5. 我应该规范日值吗?这样做甚至有意义吗?

    如果要使用1个输入维度,则必须像其他维度一样对其进行标准化.

  6. 我是否应该使用Nominal to Binary或Nominal来对其他类别的"Range"类进行过滤?

    标称为二进制,使用单热编码.