来自weka.classifiers的M5P树模型:python-weka-wrapper 我的arff文件中的每一行由6个属性组成,第6个属性是正在训练模型的目标变量。 我正在使用weka.core.converters.ArffLoader来训练arff文件。 在训练之后,如果我想用一些测试数据进行预测,我正在创建实例并将其传递给构建的模型进行预测。在实例中,我只传递5个属性的值而不传递目标变量的值。我得到一个java异常:
追踪(最近一次通话): 文件“C:/Users/Sethuraman/PycharmProjects/Test_printer/m_M5P.py”,第85行,in pred_dict1 [index + 1] = cls.classify_instance(instance) classify_instance中的文件“C:\ Users \ Sethuraman \ Anaconda2 \ lib \ site-packages \ python_weka_wrapper-0.3.8-py2.7.egg \ weka \ classifiers.py”,第105行 return self .__ classify(inst.jobject) 文件“C:\ Users \ Sethuraman \ Anaconda2 \ lib \ site-packages \ javabridge-1.0.14-py2.7-win-amd64.egg \ javabridge \ jutil.py”,第852行,in fn 提出JavaException(x) javabridge.jutil.JavaException:Src和Dest的属性数不同:5!= 6
为什么要提供目标变量值?是否有必要传递目标值?基本上在训练之后,模型应该预测目标值。如果是,为什么?如果没有,该怎么处理呢? 请帮忙!
答案 0 :(得分:1)
您可以使用Add过滤器来引入新属性。默认情况下,此过滤器会将新属性的所有值标记为缺失(“?”)。只需确保这个新属性的名称,并且在标称类的情况下,类标签的顺序与训练数据中的顺序完全相同。
答案 1 :(得分:0)
如果您想要验证,您绝对应该提供目标值;该算法如何知道它做得多好呢?但是如果你只是想让它在那个集合上进行预测,那么最好的方法是用“'”填充目标点,这样数据仍然具有6个属性,目标只是标记为未知。有关详情,请参阅http://weka.wikispaces.com/Making+predictions。