#python #weka
#python #weka
Вопрос:
Я хочу сохранить ошибки классификатора в файл arff, используя оболочку python3 от weka. Чтобы выполнить это с помощью графического интерфейса weka, я сначала запускаю любой классификатор, затем щелкаю правой кнопкой мыши элемент из списка результатов и нажимаю «Визуализировать ошибки классификатора». Откроется окно (см. изображение). Затем, чтобы сохранить файл 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))
Но как я буду сохранять ошибки классификатора, используя оболочку python3 от 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()
, если переменная if не строка.