Оглядываясь вокруг, я не смог найти хороший способ использования 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 я не нахожу. Какую библиотеку мне нужно использовать?
Извините за многочисленные вопросы, я надеюсь, вы дадите мне краткий обзор того, что здесь происходит. Спасибо.