【问题标题】:Using libsvm in Java for String classification在 Java 中使用 libsvm 进行字符串分类
【发布时间】:2015-10-27 23:31:52
【问题描述】:

环顾四周,我找不到将 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 看起来需要由 double 组成的名为 Node 的东西。我所做的是从 String 中获取 byte[],然后将它们转换为 Double。对吗?

3) 如何使用自定义内核?我找到了这行代码

 KernelManager.setCustomKernel(custom_kernel);      

但我的 libsvm.jar 找不到。我必须使用哪个库?

对于多个问题,我很抱歉,我希望您能给我简要介绍一下这里发生的事情。 谢谢。

【问题讨论】:

  • 您能给我们一些示例代码来说明您对#2 的含义吗?您是否希望直接从 csv 读取字符串,并将它们传递到 LibSVM 而不对它们做任何事情?对于#3,您在哪里找到该代码?维卡?
  • @NBartley 帖子已更新,对于#3,我发现使用 google 的帖子。我不记得在哪里

标签: java weka libsvm text-classification


【解决方案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

【讨论】:

    猜你喜欢
    • 2013-08-27
    • 2014-04-07
    • 2017-03-05
    • 2011-01-25
    • 2014-04-07
    • 2012-02-19
    • 2012-04-27
    • 2011-09-04
    • 2015-06-13
    相关资源
    最近更新 更多