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 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); }
public double [] sumVoteDistrib() { int numOutputs=vote.numOutputAttributes(); double [] sum= new double[numOutputs]; for (int j=0; j<numOutputs;j++){ for (int i=0; i<vote.numClasses(j); ++i) sum[j]+=vote.getVote(j, i); } return sum; }
@Override public Prediction targetPredictionToSource(Prediction targetPrediction) { Prediction sourcePrediction=new MultiLabelPrediction(this.numSourceInstancesOutputs); for (int i=0; i<targetPrediction.numOutputAttributes();i++){ sourcePrediction.setVotes(this.targetOutputIndices[i], targetPrediction.getVotes(i)); } return sourcePrediction; }
for (int j = 0; j < y.numOutputAttributes(); j++) { System.out.print( (int)x.classValue(j)); for (int j = 0; j < y.numOutputAttributes(); j++) { System.out.print( (y.getVote(j,0) > t) ? 1 : 0); System.err.print("[WARNING] Prediction is null! (Ignoring this prediction)"); else if (y.numOutputAttributes() < x.numOutputAttributes()) { System.err.println("[WARNING] Only "+y.numOutputAttributes()+" labels found! (Expecting "+x.numOutputAttributes()+")\n (Ignoring this prediction)"); for (int j = 0; j < y.numOutputAttributes(); j++) { int yp = (y.getVote(j,0) > t) ? 1 : 0; correct += ((int)x.classValue(j) == yp) ? 1 : 0;
@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; }
public void normalize() { double [] sum=sumVoteDistrib(); for (int j=0; j<vote.numOutputAttributes();j++) for (int i=0; i<vote.numClasses(j); ++i) if(sum[j]!=0) vote.setVote(j, i, vote.getVote(j, i)/sum[j]); } }
@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; }
@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 void addResult(Example<Instance> example, Prediction prediction) { MultiLabelInstance inst = (MultiLabelInstance) example.getData(); if (numberOutputs == 0) { numberOutputs = inst.numberOutputTargets(); } if (inst.weight() > 0.0) { this.weightObserved += inst.weight(); if (prediction != null ) { for (int i = 0; i< numberOutputs;i++){ double err = inst.classValue(i) - ((prediction.numOutputAttributes()==0) ? 0.0 : prediction.getVote(i,0)); this.squareError += (err) * (err); this.averageError += Math.abs(err); } } //System.out.println(inst.classValue()+", "+prediction); } }
@Override public void addResult(Example<Instance> example, Prediction prediction) { MultiLabelInstance inst = (MultiLabelInstance) example.getData(); if (numberOutputs == 0) { numberOutputs = inst.numberOutputTargets(); } if(this.squareError==null){ this.squareError = new double[numberOutputs]; this.averageError = new double[numberOutputs]; this.averageErrorToTargetMean=new double[numberOutputs]; this.squareErrorToTargetMean=new double[numberOutputs]; this.sumY=new double[numberOutputs]; } if (inst.weight() > 0.0) { this.weightObserved += inst.weight(); if (prediction != null && prediction.numOutputAttributes()>0) { for (int i = 0; i< numberOutputs;i++){ double error=(inst.valueOutputAttribute(i) - prediction.getVote(i, 0)); this.sumY[i]+=inst.valueOutputAttribute(i); double errorTM=(inst.valueOutputAttribute(i) - this.sumY[i]/this.weightObserved); this.averageErrorToTargetMean[i]+=Math.abs(errorTM); this.squareErrorToTargetMean[i]+=errorTM*errorTM; this.averageError[i]+=Math.abs(error); this.squareError[i]+=error*error; } } //System.out.println(inst.classValue()+", "+prediction); } }
@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]; } } }
defaultErrors=defaultRuleErrors(defaultVote); double [] fixErrors=new double[vote.numOutputAttributes()]; Prediction fixVote= new MultiLabelPrediction(vote.numOutputAttributes()); for (int i=0; i<vote.numOutputAttributes(); i++){ if(!vote.hasVotesForAttribute(i)){ fixVote.setVotes(i, defaultVote.getVotes(i));
if(defaultErrors==null) defaultErrors=defaultRuleErrors(defaultVote); double [] fixErrors=new double[vote.numOutputAttributes()]; Prediction fixVote= new MultiLabelPrediction(vote.numOutputAttributes()); for (int i=0; i<vote.numOutputAttributes(); i++){ if(!vote.hasVotesForAttribute(i)){ fixVote.setVotes(i, defaultVote.getVotes(i));