WEKA如何规范化属性?

时间:2014-01-19 08:42:23

标签: java machine-learning data-mining weka

假设我向WEKA输入了一些数据集并为属性设置了规范化过滤器,因此值介于0和1之间。然后假设通过除以最大值来完成规范化,然后建立模型。然后,如果我部署模型,并且在要分类的新实例中,实例的特征值大于训练集中的最大值,会发生什么。如何处理这种情况?它只需1或者它需要超过1吗?或者是否会引发异常?

2 个答案:

答案 0 :(得分:3)

文档没有为一般的过滤器指定这个。所以它必须依赖于过滤器。我查看了我假设您正在使用的weka.filters.unsupervised.attribute.Normalize的源代码,并且我没有看到任何边界检查。

实际的缩放代码位于Normalize.convertInstance() method

value = (vals[j] - m_MinArray[j]) / (m_MaxArray[j] - m_MinArray[j])
              * m_Scale + m_Translation;

除非在此方法之外进行任何(不太可能的)额外检查,否则我会说在您描述的情况下它将扩展为大于1的值。要100%确定你最好的选择是编写一个测试用例,自己调用过滤器,然后找出答案。对于未在Javadoc中指定其工作的库,您永远不知道下一个版本将执行的操作。因此,如果您非常依赖于特定行为,那么编写一个回归测试库行为的自动化测试并不是一个坏主意。

答案 1 :(得分:0)

我和你说的问题一样。我做了如下,这个方法可以帮助你:

我想您使用weka.filters.unsupervised.attribute.Normalize来规范化您的数据。

正如Erwin Bolwidt所说,weka使用

value = (vals[j] - m_MinArray[j]) / (m_MaxArray[j] - m_MinArray[j])
          * m_Scale + m_Translation;

标准化您的属性。

不要忘记Normalize类有这两种方法:

public double[] getMinArray()
public double[] getMaxArray()

其中返回数据中属性的计算最小值/最大值。

您可以存储最小值/最大值。然后使用公式自行规范化数据。

请记住,您可以在Instance课程中设置属性,然后按Evaluation.evaluationForSingleInstance

对结果进行分类

我稍后会给你链接,这可能对你有所帮助。 谢谢