libsvm-javaは、トレーニングのいくつかの反復後にNullPointerExceptionをスローする -- machine-learning フィールド と svm フィールド と libsvm フィールド 関連 問題

libsvm-java throws NullPointerException after a few iteration of training












0
vote

問題

日本語

文分類タスクのために libsvm javaパッケージを使用しています。私は3つのクラスがあります。すべての文はサイズ435のベクトルとして表されます。 vector_file の形式は次のとおりです。

1 0 0.12 0 0.5 0.24 0.32 0 0 0 ... 0.43 0 最初の桁はクラスラベルを示し、残りはベクトルです。

次は SVM_PROBLEM を作っている方法です。 <事前> <コード> public void makeSvmProb(ArrayList<Float> inputVector,float label,int p){ // p is 0 to 77 (total training sentences) int idx=0,count=0; svm_prob.y[p]=label; for(int i=0;i<inputVector.size();i++){ if(inputVector.get(i)!=0) { count++; // To get the count of non-zero values } } svm_node[] x = new svm_node[count]; for(int i=0;i<inputVector.size();i++){ if(inputVector.get(i)!=0){ x[idx] = new svm_node(); x[idx].index = i; x[idx].value = inputVector.get(i); idx++; } } svm_prob.x[p]=x; }

パラメータ設定:

<事前> <コード> param.svm_type = svm_parameter.C_SVC; param.kernel_type = svm_parameter.RBF; param.degree = 3; param.gamma = 0.5; param.coef0 = 0; param.nu = 0.5; param.cache_size = 40; param.C = 1; param.eps = 1e-3; param.p = 0.1; param.shrinking = 1; param.probability = 0; param.nr_weight = 0; param.weight_label = new int[0]; param.weight = new double[0];

2回の反復後にプログラムを実行している間、私は nullpointerexception になっています。何が間違っているのかを理解できませんでした。

これは来るエラーです:

<事前> <コード> optimization finished, #iter = 85 nu = 0.07502654779820772 obj = -15.305162227093849, rho = -0.03157808477381625 nSV = 47, nBSV = 1 * optimization finished, #iter = 88 nu = 0.08576821199868506 obj = -17.83925196551639, rho = 0.1297986754900152 nSV = 51, nBSV = 3 Exception in thread "main" java.lang.NullPointerException at libsvm.Kernel.dot(svm.java:207) at libsvm.Kernel.<init>(svm.java:199) at libsvm.SVC_Q.<init>(svm.java:1156) at libsvm.svm.solve_c_svc(svm.java:1333) at libsvm.svm.svm_train_one(svm.java:1510) at libsvm.svm.svm_train(svm.java:2067) at SvmOp.<init>(SvmOp.java:130) at Main.main(Main.java:8) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

何が間違っているのかについての考え?

英語

I am using libsvm java package for a sentence classification task. I have 3 classes. Every sentence is represented as a vector of size 435. The format of vector_file is as follows:

1 0 0.12 0 0.5 0.24 0.32 0 0 0 ... 0.43 0 First digit indicates class label and remaining is the vector.

The following is how I am making the svm_problem:

public void makeSvmProb(ArrayList<Float> inputVector,float label,int p){         // p is 0 to 77 (total training sentences)          int idx=0,count=0;          svm_prob.y[p]=label;         for(int i=0;i<inputVector.size();i++){             if(inputVector.get(i)!=0) {                 count++; // To get the count of non-zero values             }          }         svm_node[] x = new svm_node[count];         for(int i=0;i<inputVector.size();i++){            if(inputVector.get(i)!=0){                 x[idx] = new svm_node();               x[idx].index = i;               x[idx].value = inputVector.get(i);                  idx++;            }          }         svm_prob.x[p]=x; } 

Parameter settings:

param.svm_type = svm_parameter.C_SVC; param.kernel_type = svm_parameter.RBF; param.degree = 3; param.gamma = 0.5; param.coef0 = 0; param.nu = 0.5; param.cache_size = 40; param.C = 1; param.eps = 1e-3; param.p = 0.1; param.shrinking = 1; param.probability = 0; param.nr_weight = 0; param.weight_label = new int[0]; param.weight = new double[0]; 

While executing the program, After 2 iterations, I am getting a NullPointerException. I couldn't figure out what is going wrong.

This is the error coming:

optimization finished, #iter = 85 nu = 0.07502654779820772 obj = -15.305162227093849, rho = -0.03157808477381625 nSV = 47, nBSV = 1 * optimization finished, #iter = 88 nu = 0.08576821199868506 obj = -17.83925196551639, rho = 0.1297986754900152 nSV = 51, nBSV = 3 Exception in thread "main" java.lang.NullPointerException     at libsvm.Kernel.dot(svm.java:207)     at libsvm.Kernel.<init>(svm.java:199)     at libsvm.SVC_Q.<init>(svm.java:1156)     at libsvm.svm.solve_c_svc(svm.java:1333)     at libsvm.svm.svm_train_one(svm.java:1510)     at libsvm.svm.svm_train(svm.java:2067)     at SvmOp.<init>(SvmOp.java:130)     at Main.main(Main.java:8)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     at java.lang.reflect.Method.invoke(Method.java:498)     at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 

Any idea on what is going wrong?

</div
        
   
   

回答リスト

5
 
vote

svm.class には、207行目にスローされます。ソースコードを調べることを調べる:

<事前> <コード> static double dot(svm_node[] x, svm_node[] y) { double sum = 0; int xlen = x.length; ... }

行207は<コード> int xlen = x.length; です。そのため、この場合、<コード> svm_node (またはベクトル)のいずれかが<コード> null です。

この理由のために、私たちはそれをデバッグするためのより多くの情報/ソースコードが必要なので、私たちはここで本当にあなたを助けることはできません。

私は次の戦略のために行きます:

  1. デバッガの svm_problem の構築を完了した後、<コード> svm_node オブジェクトを調べ、 null 値を探します。

  2. <コード> svm_problem のビルドプロセスを確認してください。問題はそこにあるかもしれません。

  3. 他の可能性はあなたのデータフォーマットを変更し、公式libsvm形式に準拠することです:

    ドキュメントに記載されているように、データフォーマットはスパースデータ形式を使用し、そのようにする必要があります。

    <事前> <コード> svm.class0

    昇順整数は、ベクトルの内部表現に必要な属性IDまたは機能IDを指します。

    私は以前に似たような質問に返信しましたここそしてデータ形式の例を追加しました。

    このフォーマットは、 svm.class1 を構築するコードとしてボックスから読み出すことができます。

 

The NullPointerException is thrown in Line 207 in svm.class. Investigating the source code shows:

static double dot(svm_node[] x, svm_node[] y)     {         double sum = 0;         int xlen = x.length;         ...     } 

Line 207 is int xlen = x.length;. So in this case, we see, that one of your svm_node (or vectors) is null.

For this reason, we cannot really help you here, as we would need more information / source code to debug it.

I would go for the following strategy:

  1. Investigate the svm_node objects after you completed the building of the svm_problem in a debugger and look for null values.

  2. Check the build process of your svm_problem. The problem might be there.

An other possibility would be to change your data-format and be compliant to the official LIBSVM format:

As stated in the documentation, the data format uses sparse-data format and should be like that:

<label> 0:i 1:K(xi,x1) ... L:K(xi,xL)  

The ascending integer refers to the attribute or feature id, which is necessary for internal representation of the vector.

I previously replied to a similar question here and added an example for the data format.

This format can be read out of the box as the code to construct the svm_problem is included in the library.

</div
 
 
 
 

関連する質問

7  どちらが良い方法ですか? libsvmまたはsvmclassify?  ( Which is a better method libsvm or svmclassify ) 
最近、特徴分類にSVMを使用しようとしています。私がそうしていた間に、質問は私の心にやって来ました。 これは、 <コード> LIBSVM または <コード> svmclassify >? svmclassify が意味するのは、 svmtrain および...

-2  libsvmから余白を取得する方法  ( How to get the margin from libsvm ) 
.NETのlibsvmを使用しています。 SVMトレーニングを実行した後、Alphasのベクトルを取得します。 私が理解しているように、マージンは最小距離です 任意の点と決定超平面の間。 アルファスを使ってそれをする方法はわかりません。 ありがとう。 ...

0  libsvmの事前計算カーネルのテスト行列(Scikit Learn)  ( Test matrix for pre computed kernel in libsvm scikit learn ) 
WeisFeiler-Lehman Graph Kernels からプレッケープを取得するSCIKITのカーネルSVM 説明 。 テスト時に、私のデータの形式は何ですか?私は本当にそれについて混乱しています。 寸法要件を参照してください。 ありがとうござい...

1  Liblinearは、WekaとLinuxでは、ClassParhにはありません  ( Liblinear not in classparh on linux with weka ) 
私はliblinear.1.92をダウンロードします http://liblinear.bwaldvogel.de/ 、.jar の下のファイル <事前> <コード> $HOME/lib/liblinear-1.92/liblinear-1.92.jar ...

1  model.parameters libsvmの意味  ( Meaning of model parameters libsvm ) 
私はMATLABのlibsvmを使っています。 model-structには、5つの値を含む "Parameters"という名前のフィールドがあります。それぞれの意味は何ですか?どの分野では、ラジアルベースカーネルに使用されたパラメータ「C」と「ガンマ」があり...

3  マルチクラスの分類のために1つの正確さを残します  ( Leave one out accuracy for multi class classification ) 
私は、マルチクラスの場合の精度を計算するための残量の1つ( LOO )の使用方法についての少し混乱しています、1 v / sの休止分類。 私は、各カテゴリの30ビデオ(合計420ビデオ)を含む14カテゴリを含むYupenn Dynamic Sc​​ene認識デ...

1  常に同じ予測確率(libsvm)  ( Always getting same predicted probability libsvm ) 
私はバイナリ問題のいくつかのインスタンスのクラスを予測しようとしています(私は2つのクラスを持っています:c +とc-)。リニアカーネルで訓練されたlibsvm分類子を使用しています。 メソッドの実行方法:Instance(インスタンス)同じ分類子と異なるイン...

4  Scikit - OpenMP libsvmを学びました  ( Scikit learn openmp libsvm ) 
Scikit-Learn SVCを使用してデータを分類しています。トレーニングパフォーマンスを向上させたいのですが。 clf = svm.svc(cache_size = 4000、確率= true、verbose = true) libsvmとli...

7  ユーザーの信頼性を予測するためにlibsvmを使用してください  ( Using libsvm to predict authenticity of the user ) 
私は、Webアプリケーションのユーザーの信頼性を予測するためにlibsvmを使用して計画しています。 (1)特定のユーザーの動作に関するデータを収集する(例。ログイン時刻、IPアドレス、国など) (2)収集したデータを使用してSVMを訓練する (3)実際のデー...

1  libsvm:モデルファイルからのサポートベクトルを取得します  ( Libsvm get support vectors from model file ) 
これは奇妙な要求であるので説明が最初にあります。私は最近突然のHDクラッシュをして、libsvmを使用してモデルファイルを生成するために使用していたデータファイルを失った。私はこのデータファイルから生成したSVMモデルとスケーリングファイルを持っています、そし...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有