微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用Python将WEKA分类器错误保存到arff文件?

如何解决如何使用Python将WEKA分类器错误保存到arff文件?

我想使用weka的python3包装器将分类错误保存到arff文件中。为了使用weka GUI完成此操作,我首先运行任何分类器,然后在结果列表中右键单击该项目,然后单击“可视化分类错误”。这将打开一个窗口(请参阅图像)。然后,要保存arff文件,只需单击“保存”按钮。由于我需要对许多文件和不同的分类器执行此操作,因此无法手动执行此操作。

因此,我编写了以下代码

from weka.core.converters import Loader
from weka.classifiers import FilteredClassifier,Classifier
from weka.filters import Filter
from weka.classifiers import Evaluation
from weka.core.classes import Random

PATH = "file.arff"

loader = Loader(classname="weka.core.converters.ArffLoader")
data = loader.load_file(PATH)
data.class_is_last()

remove = Filter(classname="weka.filters.unsupervised.attribute.Remove",options=["-R","1"])
cls = Classifier(classname="weka.classifiers.trees.J48",options=["-C","0.25","-M","2"])

fc = FilteredClassifier()
fc.filter = remove
fc.classifier = cls

evl = Evaluation(data)
evl.crossvalidate_model(classifier=fc,data=data,num_folds=10,rnd=Random(1))

但是,如何使用weka的python3包装器保存分类错误

解决方法

我通过向数据模型添加属性并根据预测修改每个实例的值来解决了这个问题。

...

data.no_class()
data.insert_attribute(
    att=Attribute.create_nominal(name='Predicted',labels=['True','False']),index=data.num_attributes
)

for index,pred in enumerate(evl.predictions):
    tmp = 'True' if pred.predicted else 'False'
    inst = data.get_instance(index)
    inst.set_string_value(data.num_attributes - 1,tmp)

with open("results.arff"),'w') as fp:
    fp.write(str(data))

如果变量不是字符串,则也可以使用inst.set_value()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。