@Override public void addVote(Prediction vote, double [] error) { int numOutputs=vote.numOutputAttributes(); if(outputAttributesCount==null) outputAttributesCount=new int[numOutputs]; for(int i=0; i<numOutputs; i++) if(vote.hasVotesForAttribute(i)) outputAttributesCount[i]++; votes.add(vote); errors.add(error); }
@Override public void addPrediction(Prediction prediction, Prediction trueClass, double weight) { int numOutputs=prediction.numOutputAttributes(); if (!hasStarted){ sumError=new double[numOutputs]; hasStarted=true; for(int i=0; i<numOutputs;i++) if(prediction.hasVotesForAttribute(i)) ++numLearnedOutputs; hasStarted=true; } for(int i=0; i<numOutputs;i++){ if(prediction.hasVotesForAttribute(i)) sumError[i]=Math.abs(prediction.getVote(i, 0)-trueClass.getVote(i, 0))*weight+fadingErrorFactor*sumError[i]; } weightSeen=weight+fadingErrorFactor*weightSeen; }
protected double[] defaultRuleErrors(Prediction vote) { double [] errors=new double[vote.numOutputAttributes()]; for(int i=0; i<vote.numOutputAttributes(); i++){ if(vote.hasVotesForAttribute(i)) errors[i]=Double.MAX_VALUE; } return errors; }
protected double[] defaultRuleErrors(Prediction vote) { double [] errors=new double[vote.numOutputAttributes()]; for(int i=0; i<vote.numOutputAttributes(); i++){ if(vote.hasVotesForAttribute(i)) errors[i]=Double.MAX_VALUE; } return errors; }
@Override public void addPrediction(Prediction prediction, Prediction trueClass, double weight) { int numOutputs=prediction.numOutputAttributes(); if (!hasStarted){ sumSquaredError=new double[numOutputs]; hasStarted=true; for(int i=0; i<numOutputs;i++) if(prediction.hasVotesForAttribute(i)) ++numLearnedOutputs; hasStarted=true; } for(int i=0; i<numOutputs;i++){ if(prediction.hasVotesForAttribute(i)){ double errorOutput=prediction.getVote(i, 0)-trueClass.getVote(i, 0); sumSquaredError[i]=errorOutput*errorOutput*weight+fadingErrorFactor*sumSquaredError[i]; } } weightSeen=weight+fadingErrorFactor*weightSeen; }
if(votes.get(i).hasVotesForAttribute(o) && errors.get(i)!=null){ weights[i][o]=1.0/(errors.get(i)[o]+EPS); sumError[o]+=weights[i][o]; if(votes.get(i).hasVotesForAttribute(o)){ if(sumError[o]>0) weights[i][o]/=sumError[o];
@Override public void addPrediction(Prediction prediction, Prediction trueClass, double weight) { int numOutputs=prediction.numOutputAttributes(); if (!hasStarted){ sumError=new double[numOutputs]; sumY=new double[numOutputs]; sumErrorToTargetMean=new double[numOutputs]; hasStarted=true; for(int i=0; i<numOutputs;i++) if(prediction.hasVotesForAttribute(i)) ++numLearnedOutputs; hasStarted=true; } weightSeen=weight+fadingErrorFactor*weightSeen; for(int i=0; i<numOutputs;i++){ if(prediction.hasVotesForAttribute(i)){ sumError[i]=Math.abs(prediction.getVote(i, 0)-trueClass.getVote(i, 0))*weight+fadingErrorFactor*sumError[i]; sumY[i]=trueClass.getVote(i, 0)*weight+fadingErrorFactor*sumY[i]; double errorOutputTM=Math.abs(prediction.getVote(i, 0)-sumY[i]/weightSeen); //error to target mean sumErrorToTargetMean[i]=errorOutputTM*weight+fadingErrorFactor*sumErrorToTargetMean[i]; } } }
@Override public Prediction computeWeightedVote() { int n=votes.size(); if (n>0){ int numOutputs=outputAttributesCount.length; weights=new double[n][numOutputs]; weightedVote=new MultiLabelPrediction(numOutputs); //For each output attribute for (int o=0;o<numOutputs;o++) { //int numClasses=votes.get(0).numClasses(o); //For each vote for (int i=0; i<n; i++) { if(votes.get(i).hasVotesForAttribute(o)){ //set as weighted vote and set weight to 1 weights[i][o]=1; /*for(int j=0; j<numClasses; j++){ weightedVote.setVote(o, j, votes.get(i).getVote(o, j)); }*/ weightedVote.setVotes(o, votes.get(i).getVotes(o)); break; } } } } return weightedVote; } }
@Override public Prediction computeWeightedVote() { int n=votes.size(); if (n>0){ int numOutputs=outputAttributesCount.length; weights=new double[n][numOutputs]; weightedVote=new MultiLabelPrediction(numOutputs); //For each output attribute for (int o=0;o<numOutputs;o++) { //For each vote for (int i=0; i<n; i++) { int numClasses=votes.get(i).numClasses(o); if(votes.get(i).hasVotesForAttribute(o)) weights[i][o]=1.0/outputAttributesCount[o]; //else takes value 0 //For each class for(int j=0; j<numClasses; j++){ weightedVote.setVote(o, j, weightedVote.getVote(o, j)+votes.get(i).getVote(o, j)*weights[i][o]); } } } } return weightedVote; }
@Override public void addPrediction(Prediction prediction, Prediction trueClass, double weight) { int numOutputs=prediction.numOutputAttributes(); if (!hasStarted){ sumSquaredError=new double[numOutputs]; sumY=new double[numOutputs]; sumSquaredErrorToTargetMean=new double[numOutputs]; hasStarted=true; for(int i=0; i<numOutputs;i++) if(prediction.hasVotesForAttribute(i)) ++numLearnedOutputs; hasStarted=true; } weightSeen=weight+fadingErrorFactor*weightSeen; for(int i=0; i<numOutputs;i++){ if(prediction.hasVotesForAttribute(i)){ sumY[i]=trueClass.getVote(i, 0)*weight+fadingErrorFactor*sumY[i]; //sum target double errorOutput=prediction.getVote(i, 0)-trueClass.getVote(i, 0); double errorOutputTM=prediction.getVote(i, 0)-sumY[i]/weightSeen; //error to target mean sumSquaredError[i]=errorOutput*errorOutput*weight+fadingErrorFactor*sumSquaredError[i]; sumSquaredErrorToTargetMean[i]=errorOutputTM*errorOutputTM*weight+fadingErrorFactor*sumSquaredErrorToTargetMean[i]; } } }
Prediction fixVote= new MultiLabelPrediction(vote.numOutputAttributes()); for (int i=0; i<vote.numOutputAttributes(); i++){ if(!vote.hasVotesForAttribute(i)){ fixVote.setVotes(i, defaultVote.getVotes(i)); fixErrors[i]=defaultErrors[i];
Prediction fixVote= new MultiLabelPrediction(vote.numOutputAttributes()); for (int i=0; i<vote.numOutputAttributes(); i++){ if(!vote.hasVotesForAttribute(i)){ fixVote.setVotes(i, defaultVote.getVotes(i)); fixErrors[i]=defaultErrors[i];