【问题标题】:How to save WEKA classifier errors to arff file using Python?如何使用 Python 将 WEKA 分类器错误保存到 arff 文件?
【发布时间】:2020-12-13 12:46:35
【问题描述】:

我想使用 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 包装器保存分类器错误?

【问题讨论】:

    标签: python weka


    【解决方案1】:

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

    ...
    
    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()

    【讨论】:

      猜你喜欢
      • 2013-10-22
      • 2016-12-13
      • 1970-01-01
      • 2020-06-04
      • 2019-05-19
      • 2020-12-19
      • 2013-11-01
      • 2015-07-13
      • 2014-08-12
      相关资源
      最近更新 更多