Использование libsvm в Java для классификации строк

Оглядываясь вокруг, я не смог найти хороший способ использования libsvm с Java, и у меня все еще есть несколько открытых вопросов:

1) Можно использовать только libsvm или я должен использовать и weka? Если есть, то какая разница?

2) При использовании данных типа String, как я могу передать тренировочный набор в виде строк? Я использовал Matlab для аналогичной задачи по классификации белков, и там я просто без проблем передал строки машине. Есть ли способ сделать это на Java?

Вот неполный пример того, что я сделал в матлабе (работает):

[~,posTrain] = fastaread('dataset/1.25.1.3_d1ilk__.pos-train.seq');
[~,posTest] = fastaread('dataset/1.25.1.3_d1ilk__.pos-test.seq');
trainKernel = spectrumKernel(trainData,k);
testKernel =  spectrumKernel(testData,k);
trainKf =[(1:length(trainData))', trainKernel];
testKf = [(1:length(testData))', testKernel];
disp('custom');
model = libsvmtrain(trainLabel,trainKf,'-t 4');
[~, accuracy, ~] = libsvmpredict(testLabel,testKf,model)

Как видите, я прочитал файл в формате fasta и передал его в libsvm, но libsvm для java выглядит так, будто ему нужно что-то под названием Node, состоящее из double. Что я сделал, так это взял byte[] из String, а затем преобразовал их в Double. Это правильно?

3) Как использовать кастомное ядро? Я нашел эту строку кода

 KernelManager.setCustomKernel(custom_kernel);      

но с моим libsvm.jar я не нахожу. Какую библиотеку мне нужно использовать?

Извините за многочисленные вопросы, я надеюсь, вы дадите мне краткий обзор того, что здесь происходит. Спасибо.


person Dario    schedule 05.08.2015    source источник
comment
Можете ли вы дать нам пример кода того, что вы имеете в виду для # 2? Ожидаете ли вы читать строки непосредственно из csv и передавать их в LibSVM, ничего с ними не делая? И для № 3, где вы нашли этот код? Weka?   -  person NBartley    schedule 06.08.2015
comment
Сообщение @NBartley обновлено, и для № 3 я нашел его с помощью Google. я не помню где   -  person Dario    schedule 08.08.2015


Ответы (1)


Обратите внимание, что я использовал LIBSVM для MATLAB, но не для Java. Я могу только действительно ответить на вопрос 1, но, надеюсь, это все еще помогает:

  1. Определенно можно использовать только libsvm, и код находится здесь: https://www.csie.ntu.edu.tw/~cjlin/libsvm/. Обратите внимание, что jlibsvm — это порт libsvm, который кажется более простым в использовании и более оптимизированным для Java. Насколько я могу судить, у weka просто есть класс-оболочка, который в любом случае запускает libsvm (для этого даже требуется libsvm.jar), хотя я в основном основывал его на этом: https://weka.wikispaces.com/LibSVM.
person needarubberduck    schedule 06.08.2015