2012-04-24 2 views
0

J'ai deux matrices pour les éléments de caractéristiques et de poids. Je suis en train de mettre en œuvre un algorithme d'apprentissage. Je veux mettre à jour des éléments d'arraylist (vecteur pour représenter un échantillon d'entité). Voici le code. Mais mes éléments de matrices (les éléments vectoriels ne sont pas) mis à jour. J'ai mis la solution d'échantillon aussi. même valeur avant et après la mise à jour n'est pas prévu. Pourriez-vous s'il vous plaît laissez-moi savoir où est la faille dans le code?Impossible de mettre à jour les éléments dans arrayList

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)); 
} 

sortie de l'échantillon est ::

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] 
+3

Vous devez utiliser le débogueur et parcourir les lignes dans votre code. –

+1

1. formatez votre code 2. d'où vient le 'testList'? (pas d'initialisation dans le code que vous avez posté.) – aviad

+0

La liste de test est fournie en tant que paramètre de la méthode. – thetna

Répondre

2

Je ne vois que deux raisons raisonnables pourquoi cela se passerait-il:

  1. Taux == 0
  2. testList.contains (i) est toujours faux

Je suggère fortement d'utiliser des points d'arrêt pour déboguer ceci. À tout le moins, mettez un System.out.println où featureVector.set() est appelé pour s'assurer qu'il est jamais appelé. Je suppose qu'il n'est jamais appelé parce que les conditions ne deviennent jamais vraies.

Do points d'arrêt d'utilisation, ce sera un épargnant de vie ...

0

Quel est le type de retour testList.get(j)? Vous comparez un entier à ce que je soupçonne être un double. Cela ne va pas très bien se passer ...

Questions connexes