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

Разглеждайки се, не успях да намеря добър начин да използвам libsvm с Java и все още имам някои отворени въпроси:

1) Възможно е да използвам само libsvm или трябва да използвам и weka? Ако има, каква е разликата?

2) Когато използвам данни от тип String, как мога да предам набора за обучение като String? Използвах matlab за подобен проблем за класификация на протеини и там просто дадох низовете на машината без проблем. Има ли начин да направите това в Java?

Ето непълен пример за това, което направих в matlab (работи):

[~,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