0

機能要素と重み要素の 2 つのマトリックスがあります。学習アルゴリズムを実装しています。arraylist(フィーチャーの1つのサンプルを表すベクトル)の要素を更新したい。以下はコードです。しかし、行列の要素(ベクトル要素はそうではありません)が更新されました。サンプル溶液も置いてあります。更新の前後で同じ値になることは想定されていません。コードのどこに欠陥があるか教えてください。

    for(int i =0 ; i< N ; i++){  //N is a large real number
    ArrayList<Double> featureVector = new ArrayList<Double>();
    featureVector = FeatureMatrix.get(i);
    System.out.println("Before::"+ featureVector);
    if(testList.contains(i)){
    for(int j=0 ; j< testList.size(); j++){
        if(i == testList.get(j)){       
        int indexInTestList= j;
        List<Double> subListNextCandidate ;
        subListNextCandidate =  weightVectorNextCandidate.subList((10*indexIntTestList),((10)*(indexInTestList+1))); //clips a portion of member from long list of members
        List<Double> approxWeight = new ArrayList<Double>();
        approxWeight = getApproxWeight(FeatureVector, indexInTestList, FeatureMatrix,WeightMatrix, bias); //approxWeight is a vector of same dimension as of featureVector

        for(int l=0 ; l< 10;l++){                 
            double Update = featureVector.get(l)+ Rate*((subListCandidate.get(l)-approxWeight.get(l))-(lambda*featureVector.get(l)*(1/M)));//M is large real number
            featureVector.set(l,Update);

        }                   
        }
    }
    }

    else{
    for(int l=0 ; l< 10;l++){
        double Update = featureVector.get(l)  -Rate*(lambda*featureVector.get(l)*(1/M));
        featureVector.set(l, Update);
    }                   
    }
    System.out.println("After:::"+ FeatureMatrix.get(i) );  
}

サンプル出力は::

 Before::[0.04539928251182193, -0.16233604402485394, 0.905018369795912, -1.2817141994528614, 0.7065420460225843, -0.8946090188977665, -1.74892020689701, -2.1539901172158187, 1.8229765478806985, -1.8109945435256574]
 After:::[0.04539928251182193, -0.16233604402485394, 0.905018369795912, -1.2817141994528614, 0.7065420460225843, -0.8946090188977665, -1.74892020689701, -2.1539901172158187, 1.8229765478806985, -1.8109945435256574]
4

2 に答える 2

2

これが発生する合理的な理由は、次の 2 つだけです。

  1. 率 == 0
  2. testList.contains(i) は常に false

これをデバッグするには、ブレークポイントを使用することを強くお勧めします。少なくとも、featureVector.set() が呼び出される場所に System.out.println を配置して、確実に呼び出されるようにします。条件が真になることはないため、呼び出されることはないと思います。

ブレークポイントを使用してください。命の恩人になります...

于 2012-04-24T20:25:10.357 に答える
0

の返品タイプはtestList.get(j)何ですか?あなたは整数を私が疑うものと比較しています。それはうまくいかない可能性が高いです...

于 2012-05-06T13:16:48.233 に答える