Я хочу использовать классификатор LibSVM с Weka в своем приложении. Как я могу (или где я могу найти хорошие примеры) сделать это?
Как использовать LibSVM с Weka в моем Java-коде?
Ответы (5)
Немного поздно, конечно, но я все равно отвечу. Вы должны использовать в своем проекте 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);
Удачи.
В новой версии вам просто нужен 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 );
Чтобы использовать библиотеку libSVM с новейшей версией weka (3.7.9), вам нужно всего лишь использовать «Диспетчер пакетов» приложения weka и установить пакет libSVM.
Наконец, из проекта java вы должны добавить библиотеку LibSVM, созданную «Диспетчером пакетов», в путь к классам.
Обычно он находится в каталоге "(HOME)\wekafiles\packages\LibSVM".
Оказывается, ребята из weka НАМНОГО облегчили нашу работу с самыми последними версиями, предоставив доступ к Maven Central.
Просто получите зависимость отсюда: http://mvnrepository.com/artifact/nz.ac.waikato.cms.weka/LibSVM
и все будет работать, пока идут зависимости. Не нужно возиться с обертками и добавлять банки в путь к классам или что-то в этом роде.
Я использую версию 3.7.12, но я предполагаю, что она была доступна с тех пор, как функция диспетчера пакетов была добавлена в графический интерфейс.
перейдите по этой ссылке для объединения Weka и libsvm http://www.cs.iastate.edu/~yasser/wlsvm/
weka хорошо вычисляет ROC, отзыв и т. д., а libsvm хорош для классификации, регрессии и т. д.