在 Java 中使用 libsvm 进行字符串分类

Using libsvm in Java for String classification

环顾四周,我找不到将 libsvm 与 Java 结合使用的好方法,我还有一些悬而未决的问题:

1) 可以只使用 libsvm 还是我还必须使用 weka?如果有的话,有什么区别?

2) 使用字符串类型数据时,如何将训练集作为字符串传递?我正在使用 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 我没有找到。我必须使用哪个库?

抱歉提出了多个问题,我希望您能简要概述一下这里发生的事情。 谢谢

请注意,我已经将 LIBSVM 用于 MATLAB,但未用于 Java。我只能真正回答问题 1,但希望这仍然对您有所帮助:

  1. 只用libsvm肯定是可以的,代码在这里:https://www.csie.ntu.edu.tw/~cjlin/libsvm/. Note that jlibsvm is a port of libsvm, and it seems to be easier to use and more optimized for Java. As far as I can tell, weka just has a wrapper class that runs libsvm anyways (it even requires the libsvm.jar), though I mainly based it off of this: https://weka.wikispaces.com/LibSVM.