2016-08-12 40 views
0

从weka.classifiers M5P树模型:蟒蛇,秧鸡,包装 在我的ARFF文件中的每一行包括与第六属性被分配为模型正在训练的目标变量6个属性。 我正在使用weka.core.converters.ArffLoader将arff文件进行训练。 训练结束后,如果我想用一些测试数据做出预测,我将创建实例并将其传递给构建的模型以进行预测。在实例中,我只传递5个属性的值而不是目标变量的值。我得到一个Java异常:回归:用于预测的测试数据需要类别值?在Weka中

回溯(最近通话最后一个): 文件 “C:/Users/Sethuraman/PycharmProjects/Test_printer/m_M5P.py”,行85,在 pred_dict1 [索引+ 1 ] = cls.classify_instance(实例) 文件 “C:\用户\ Sethuraman \ Anaconda2 \ lib中\站点包\ python_weka_wrapper-0.3.8-py2.7.egg \ WEKA \ classifiers.py”,线105,在classify_instance 回归自我.__分类(inst.jobject) 文件 “C:\用户\ Sethuraman \ Anaconda2 \ LIB \站点包\ JavaBridge的-1.0.14-py2.7共赢 - amd64.egg \为JavaBridge \ jutil.py” ,线852,在FN 加注JavaException(X) javabridge.jutil.JavaException:Src和目的地在#ö不同f属性:5!= 6

为什么要提供目标变量值?是否有必要通过目标值?基本上在训练之后,模型应该预测目标值。如果是,为什么?如果没有,该如何处理? 请帮忙!

回答

1

可以使用Add滤波器,以引入新的属性。默认情况下,此过滤器会将新属性的所有值标记为缺失(“?”)。只要确保这个新属性的名称,以及在名义类别的情况下,类别标签的顺序与在训练数据中的顺序完全相同。

+0

您为添加过滤器提供的链接是用于在Java中实现的。你能告诉我如何在py-weka中实现这个吗?举一些例子?我正在使用[此示例](https://github.com/fracpete/python-weka-wrapper3-examples/blob/master/src/wekaexamples/core/dataset.py)创建属性和实例,但对于数字属性,如何添加'?'在旅途中? – Sethuraman

+0

谢谢你的回答。有效 :-) – Sethuraman

0

如果你想验证,你一定要提供目标值;算法如何知道它做得多好呢?但是如果你只是想让它预测那个集合,最好的方法是用'?'填充目标点,这样数据仍然有6个属性,而目标只是标记为未知。有关更多信息,请参阅http://weka.wikispaces.com/Making+predictions

+0

谢谢你的评论。我编辑了我的问题。我不想验证模型。只需对测试数据进行预测即可。我正在使用'python weka wrapper'并通过使用从.csv文件中分别读取的数据创建实例。由于我没有目标价值信息,我该怎么办? – Sethuraman

+0

请参阅编辑答案。该文档似乎表明,使这项工作的唯一方法是标记每个数据点的未知目标属性。 –

+0

如果我听起来很傻,请耐心等待。我试图在python中创建实例,所以如果我必须添加第6个属性,它需要添加为字符串'?'。在实例列表的末尾。在试图预测的时候,包装器会抛出一个Value错误,说它不能将字符串转换为float;这是可以理解的,因为我的目标变量是float。我在这里错过了什么吗?如何处理这个? – Sethuraman