python - 如何使用 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()
如果变量不是字符串,也可以使用。
推荐阅读
- python - 用于切片 DataFrame 的布尔值列表
- python - 当我用 f.write 写入 txt 文件中的 Python 向上箭头
- neo4j - 我可以在 APOC.export 中指定我自己的标识符 ID 作为关系 ID 吗?
- html - Angular mat-error 不弹出,隐藏(包括图片)
- c# - 当目标是具有一些已填充属性的现有对象时,AutoMapper 会清空目标对象中的属性
- php - 在页面中停止 Php 执行
- augmented-reality - 在 RealityKit 中向 USDZ 模型添加地面阴影?
- r - 定位字符串 [R] 中第一个数字的位置
- javascript - ElectronJS npm start / bash:电子锻造:找不到命令
- python - 刽子手代码中途停止工作