Я пишу проект на C ++ и создал файлы ARFF в коде C ++, поэтому мне нужно передать эти файлы в классификаторы WEKA с использованием C ++.
Я пытался использовать системный вызов, но обнаружил ошибки.
Я собираюсь иногда использовать системный вызов в WEKA, чтобы получить информацию о машинном обучении. Сначала я хотел бы убедиться, что модель обучения (training.model
) до даты. Итак, в начале main()
, Я звоню:
system("\"java weka.classifiers.trees.J48 -t ML_data.arff -d training.model\"");
Как я могу вызвать классификатор WEKA из кода C ++?
Я думаю, что ошибка с двойными кавычками:
system("\"java weka.classifiers.trees.J48 -t ML_data.arff -d training.model\"");
// ^^ ^^
Этот кусок кода должен быть следующим:
system("java weka.classifiers.trees.J48 -t ML_data.arff -d training.model");
Вы, кажется, используете \"
чтобы передать двойные кавычки в system()
вызов, но это чрезмерно и вызывает ошибку. (Синтаксис для избежания двойной кавычки правильный, но вам не нужно передавать дополнительные кавычки system()
функция).
Вот минимальный тестовый пример, чтобы показать, что происходит в Linux с использованным вами синтаксисом:
#include <cstdlib>
int main(void)
{
system("\"ls -l\"");
}
Выход:
sh: ls -l: команда не найдена
С другой стороны, код system("ls -l");
правильно звонит ls -l
и отображает вывод в консоли.
Редактировать:
Насколько ваше второе сообщение об ошибке идет:
Ошибка: не удалось найти или загрузить основной класс weka.classifiers.functions.Logistic
Это очень распространенная проблема: Что означает «Не удалось найти или загрузить основной класс»?. Вы должны установить classpath, чтобы указать weka.jar
в вашей системе, например, вот так (измените точный путь на путь в вашем дистрибутиве):
system("java -cp /usr/share/java/weka.jar weka.classifiers.trees.J48 -t ML_data.arff -d training.model");
или в командной строке (обратите внимание на использование export
команда здесь)
export CLASSPATH=/usr/share/java/weka.jar:$CLASSPATH
./name_of_your_cpp_executable_file
или положить CLASSPATH
в вашем ~/.bashrc
:
CLASSPATH=/usr/share/java/weka.jar:$CLASSPATH
export CLASSPATH
Других решений пока нет …