环顾四周,我无法找到一个使用libsvm和Java的好方法,我还有一些未解决的问题:
1)可以只使用libsvm或者我也必须使用weka?如果有的话,有什么区别?
2)使用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但是java的libsvm看起来像是想要一个名为Node的由double构成的东西。我所做的是从String中获取byte []然后将它们转换为Double。这是对的吗?
3)如何使用自定义内核?我找到了这行代码
KernelManager.setCustomKernel(custom_kernel);
但我的libsvm.jar我找不到。我必须使用哪个lib?
对于多个问题感到抱歉,我希望您能简要介绍一下这里发生了什么。 感谢。
答案 0 :(得分:2)
请注意,我已将LIBSVM用于MATLAB,但不是用于Java。我只能回答问题1,但希望这仍有帮助: