2017-01-27 14 views
0

私はSVMを初めて使用しています。私はマルチクラスの分類の問題のためにjlibsvmを使用しています。基本的に、私は文分類の問題をやっています。 3クラスがあります。私が理解していることは、私がやっていることです1対1すべての分類。私は比較的小さな電車を持っています。合計75文、25文が各クラスに属します。マルチクラス分類でjlibsvm予測確率を得る方法

私はトレーニングしながら、SVM_Aで、文章がクラスAに属し、3つのSVMを(その3種類のモデルが)、真のラベルを持って作っています、すなわち、およびその他の文章はを持っています - 1ラベル。これに対応してSVM_BおよびSVM_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

同じモデルを3回生成するため、同じ出力が得られます。

この理由は、jlibsvmは、提供されたデータ(LIBSVM自体もこれをサポートしています)に基づいて、マルチクラスの分類を実行することができるからです。それが検出された場合、与えられたデータに2つ以上のクラスラブが提供されると、自動的にマルチクラス分類を実行します。したがって、手動で1vsNのアプローチは必要ありません。各カテゴリにクラスラベルを付けるだけです。

しかし、jlibsvmベータにまだあるとLIBSVMのかなり古いバージョン(2.88)に依存しています。多くはchangedです。より敏感なJavaバインディング(デフォルトのLIBSVMバージョンと比較して)はzlibsvmを見ることができます。zlibsvmは、Maven Central経由で入手可能で、最新のLIBSVMバージョンに基づいています。

関連する問題