Разглеждайки се, не успях да намеря добър начин да използвам 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 не намирам. Коя библиотека трябва да използвам?
Извинете за множеството въпроси, надявам се, че ще ми дадете кратък преглед на случващото се тук. Благодаря.