2017-01-27 161 views
0

我是SVM的新手。我使用jlibsvm多級分類問題。基本上,我正在做一個句子分類問題。有3類。我的理解是我在做一對一的分類。我有一個相對較小的火車。總共75個句子​​,其中25個句子屬於每個類別。如何在多類分類中獲得jlibsvm預測概率

我提出3個支持向量機(所以3個不同的型號),其中,在訓練中,SVM_A,句子屬於A類將有一個真正的標籤,即和其他句子將有- 1標籤。相應地爲SVM_BSVM_C完成。

在測試時,爲了得到句子的真實標籤,我給了3個模型的句子,並且我將這3個模型返回的預測概率。哪一個返回最高將是句子所屬的班級。

這就是我所做的。但是對於所有模型的測試集中的每個句子,我都得到相同的預測概率

A predicted:0.012820514 
B predicted:0.012820514 
C predicted:0.012820514 

這些值對訓練集中的所有句子重複。

下面是我如何設置訓練參數:

C_SVC svm = new C_SVC(); 
MutableBinaryClassificationProblemImpl problem; 

ImmutableSvmParameterGrid.Builder builder = ImmutableSvmParameterGrid.builder(); 

// create training parameters ------------ 
HashSet<Float> cSet; 
HashSet<LinearKernel> kernelSet; 

cSet = new HashSet<Float>(); 
cSet.add(1.0f); 

kernelSet = new HashSet<LinearKernel>(); 
kernelSet.add(new LinearKernel()); 

// configure finetuning parameters 

builder.eps = 0.001f; // epsilon 
builder.Cset = cSet; // C values used 
builder.kernelSet = kernelSet; //Kernel used 
builder.probability=true; // To get the prediction probability 
ImmutableSvmParameter params = builder.build(); 

我在做什麼錯?

還有其他更好的辦法嗎多級分類除此之外呢?

回答

2

您得到相同的輸出,因爲您生成三次相同的模型。

原因是,jlibsvm能夠基於提供的數據開箱即用地執行多類分類(LIBSVM本身也支持這一點)。如果它檢測到,在給定的數據中提供了兩個以上的班級實驗室,它會自動執行多類別分類。所以不需要手動1vsN方法。只需爲每個類別提供具有類標籤的數據。

但是,jlibsvm仍然在測試版並依靠相當老版本的LIBSVM(2.88)。很多有changed。要獲得更直觀的Java綁定(與默認版本LIBSVM版本相比),您可以查看zlibsvm,該版本可通過Maven Central以及最新的LIBSVM版本獲得。

相關問題