如何在java中对libsvm的svm_predict()输出进行排序?

如何在java中对libsvm的svm_predict()输出进行排序?,java,ranking,libsvm,Java,Ranking,Libsvm,我正在用JAVA中的LIBSVM做一个分类任务(-1和+1)。在LIBSVM中,我使用kernel_type=RBF和svm_type=C_SVC,所有其他参数值都是默认值 如何在java中对svm_predict()的输出进行排序? svm_predict()生成此文件: labels 1 -1 -1.0 0.019641780896603997 0.9803582191033958 -1.0 0.021318683904391962 0.9786813160956079 -1.0 0.

我正在用JAVA中的LIBSVM做一个分类任务(-1和+1)。在LIBSVM中,我使用kernel_type=RBF和svm_type=C_SVC,所有其他参数值都是默认值

如何在java中对svm_predict()的输出进行排序?

svm_predict()生成此文件:

 labels 1 -1
-1.0 0.019641780896603997 0.9803582191033958 
-1.0 0.021318683904391962 0.9786813160956079 
-1.0 0.01977828600663557 0.9802217139933644 
-1.0 0.0282631732179981 0.9717368267820019 
-1.0 5.286175141886943E-7 0.9999994713824858 
-1.0 0.004980730957033338 0.9950192690429667 
-1.0 0.004500990037742634 0.9954990099622574 
-1.0 0.013496219124888747 0.9865037808751113 
-1.0 0.0033941767601432665 0.9966058232398568 
-1.0 0.004436071705624729 0.9955639282943753 
-1.0 2.425758250037033E-10 0.9999999997574243 
-1.0 5.4261670963815676E-8 0.999999945738329 
-1.0 4.736895864616017E-9 0.9999999952631042 
-1.0 1.3239231249757209E-5 0.9999867607687501 
-1.0 2.3084949252003764E-7 0.9999997691505075

我按照以下步骤进行排名:

d=Math.abs( label(1) - label(-1) ) 
(例如0.96071=0.01964-0.98035)

(例如,rank=0.4803)

svm_predict()为您提供了每个图像为正的概率(在第二列中)。 只需按概率顺序排列你的图像


您的计算相当于
rank=Math.abs(标签(1)-0.5)
。很难看出这是如何有用的,因为接近零的概率最终比高于0.5的概率大

这里的“排名”是什么意思?你想干什么?顺便说一句,你会很幸运地得到c和g参数默认值的好结果-你需要使用验证进行网格搜索以找到好的参数。假设我想要检索正面图像,SVM给我10个图像(8个正面和2个负面)。从这8张正面图片中,如何对最相关的图片进行排名?与任何基于内容的图像检索(CBIR)系统一样,它提供最相关的图像。
rank=d/2