1

所以我读了一篇论文,说正确处理你的数据集可以显着提高 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 来过滤“范围”类的其他东西吗?

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

提前致谢!!

4

1 回答 1

6

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

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

至于处理输入类型:

  1. 连续:不需要工作,SVM 隐式处理这些。
  2. 序数:视为连续变量。例如,冷不热、可以建模为123无需隐式定义不自然的结构。
  3. Nominal:执行one-hot 编码,例如对于具有 N 个级别的输入,生成 N 个新的二进制输入维度。这是必要的,因为您必须避免隐式定义标称水平之间的变化距离。例如,将cat , dog , bird建模为1,23暗示更相似,这是胡说八道。

在必要时替换输入后必须进行规范化。


要回答您的问题:

  1. 我应该标准化和/或标准化功率和电压数据值吗?

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

  2. 我应该对任何东西使用离散化过滤器吗?

    不。

  3. 我应该将功率/电压值分箱到数量更少的箱中吗?

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

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

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

  5. 我应该标准化 Day 值吗?这样做有意义吗?

    如果要使用 1 个输入维度,则必须像所有其他维度一样对其进行规范化。

  6. 我应该使用 Nominal to Binary 或 Nominal 来过滤“范围”类的其他东西吗?

    标称到二进制,使用 one-hot 编码。

于 2013-07-18T11:08:07.730 回答