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

时间:2013-07-18 10:34:38

标签: machine-learning weka libsvm svm

所以我读了一篇论文,说正确处理你的数据集可以大大提高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

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

  1. 我应该规范化和/或标准化电源和电压数据值吗?
  2. 我应该在任何事情上使用离散滤镜吗?
  3. 我应该将电源/电压值合并到更少数量的垃圾箱中吗?
  4. 我应该使Light值二进制而不是数字吗?
  5. 我应该将Day值正常化吗?这样做甚至有意义吗?
  6. 我是否应该使用Nominal to Binary或Nominal来为“Range”类别过滤?
  7. 请就这些问题以及您认为我可能错过的任何其他事项提出建议......

    提前致谢!!

1 个答案:

答案 0 :(得分:6)

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

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

    1. 连续:无需工作,SVM会隐式处理这些工作。
    2. Ordinal :视为连续变量。例如 cold 不冷不热 hot 可以建模为123隐含地定义了一种不自然的结构。
    3. 标称:执行one-hot encoding,例如对于具有N个级别的输入,生成N个新的二进制输入维度。这是必要的,因为您必须避免隐式定义标称级别之间的变化距离。例如,将 cat dog bird 建模为123意味着 dog bird cat bird 更相似,这是无稽之谈。
    4. 在必要时替换输入后必须进行标准化。


      回答你的问题:

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

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

      2. 我应该对任何事物使用离散过滤器吗?

      3. 我是否应该将电源/电压值合并为少许数量 仓?

        否。将它们视为连续变量(例如每个输入一次)。

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

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

      5. 我应该规范日值吗?这样做是否有意义 那?

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

      6. 我是否应该使用Nominal to Binary或Nominal来为其他东西过滤类&#34; Range&#34;?

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