假设我向WEKA输入了一些数据集并为属性设置了规范化过滤器,因此值介于0和1之间。然后假设通过除以最大值来完成规范化,然后建立模型。然后,如果我部署模型,并且在要分类的新实例中,实例的特征值大于训练集中的最大值,会发生什么。如何处理这种情况?它只需1或者它需要超过1吗?或者是否会引发异常?
答案 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
来规范化您的数据。
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
我稍后会给你链接,这可能对你有所帮助。 谢谢