2014-01-19 58 views
2

假设我向WEKA输入了一些数据集并为属性设置了一个归一化过滤器,因此这些值在0和1之间。然后假设归一化通过除以最大值完成,然后建立模型。那么,如果我部署模型并在新实例中进行分类,则实例的特征值大于训练集中的最大值。如何处理这种情况?它只需要1或是否需要超过1?或者它抛出异常?WEKA如何标准化属性?

+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中指定它们的库,你永远不知道下一个版本会做什么。因此,如果您非常依赖特定的行为,那么编写一个自动化测试来回归测试库的行为并不是一个坏主意。

0

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

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

为欧文Bolwidt说,WEKA使用

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

一定要规范你的属性。

不要忘记,规范化类有这两方法:

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

返回计算出的最小值/最大值在数据的属性。

而且您可以存储最小/最大值。然后使用该公式来自己标准化数据。

记住,你可以设置属性,Instance类,你可以通过Evaluation.evaluationForSingleInstance

您的结果进行分类我会稍后给你的链接,这可能会帮助你。 谢谢