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]
Vous devez utiliser le débogueur et parcourir les lignes dans votre code. –
1. formatez votre code 2. d'où vient le 'testList'? (pas d'initialisation dans le code que vous avez posté.) – aviad
La liste de test est fournie en tant que paramètre de la méthode. – thetna