Как использовать LibSVM с Weka в моем коде Java? - PullRequest
11 голосов
/ 07 марта 2011

Я хочу использовать в моем приложении классификатор LibSVM с Weka.Как я могу (или где найти хорошие примеры) сделать это?

Ответы [ 5 ]

17 голосов
/ 07 декабря 2012

Конечно, немного поздно, но я все равно отвечу. Вы должны использовать weka.jar, libsvm.jar и wlsvm.jar (оболочка libsvm) в вашем проекте. Так что просто включите все 3 фляги в ваш путь сборки или путь к классу или что-то еще.

Вы можете получить wlsvm.jar здесь: http://ailab.ist.psu.edu/yasser/wlsvm.html

Вы можете получить weka отсюда: http://www.cs.waikato.ac.nz/ml/weka/

И вы можете получить libsvm отсюда: http://www.csie.ntu.edu.tw/~cjlin/libsvm/

Мне не удалось заставить его работать с weka 3.7.7 или 3.7.8, но я смог заставить его работать с 3.6.8 (последняя стабильная версия на сегодняшний день).

Кроме того, так как мне нужно было получить файлы .class из svnlib, а также включить их в путь сборки для моего проекта. Чтобы собрать файлы .class, используйте файл make в SVNLib / java.

Вот небольшой фрагмент кода, с которого можно начать:

        DataSource source = new DataSource(new File("mycsvinputfile"));
        System.out.println(source.getStructure());
        Instances data = source.getDataSet();

        // setting class attribute if the data format does not provide this information
        // For example, the XRFF format saves the class attribute information as well
        if (data.classIndex() == -1)
            data.setClassIndex(data.numAttributes() - 1);

        //initialize svm classifier
        LibSVM svm = new LibSVM();
        svm.buildClassifier(data);

Удачи.

7 голосов
/ 10 августа 2015

В новой версии вам просто нужен weka.jar и вызывайте svm следующим образом:

WekaPackageManager.loadPackages( false, true, false );
AbstractClassifier classifier = ( AbstractClassifier ) Class.forName(
            "weka.classifiers.functions.LibSVM" ).newInstance();

Если вы предпочитаете указывать параметры, установите такие параметры, как этот

String options = ( "-S 0 -K 0 -D 3 -G 0.0 -R 0.0 -N 0.5 -M 40.0 -C 1.0 -E 0.001 -P 0.1" );
String[] optionsArray = options.split( " " );
    classifier.setOptions( optionsArray );

Наконец-то обучаем классификатор

classifier.buildClassifier( train );
4 голосов
/ 17 апреля 2015

Оказывается, что ребята из weka значительно облегчили нашу работу с последними версиями, сделав их доступными в Maven Central.

Просто получите зависимость отсюда: http://mvnrepository.com/artifact/nz.ac.waikato.cms.weka/LibSVM

и все будет работать, насколько зависимы. Не нужно возиться с обертками и добавлять фляги в classpath или что-то в этом роде.

Я использую версию 3.7.12, но я предполагаю, что она была доступна, так как функция менеджера пакетов была добавлена ​​в GUI.

4 голосов
/ 26 апреля 2013

Чтобы использовать библиотеку libSVM с новейшей версией weka (3.7.9), вам нужно всего лишь использовать «Диспетчер пакетов» приложения weka и установить пакет libSVM.

Наконец, из проекта java вы должны добавить библиотеку LibSVM, созданную «Диспетчером пакетов» в путь к классам.

Обычно она находится в « (HOME) \».Каталог wekafiles \ packages \ LibSVM".

2 голосов
/ 14 апреля 2013

перейдите по этой ссылке для объединения Weka и libsvm http://www.cs.iastate.edu/~yasser/wlsvm/

weka хорош для вычисления ROC, отзыва и т. Д. .... а libsvm хорош для классификации, регрессии и т. Д ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...