@Override public void trainOnInstanceImpl(MultiLabelInstance instance) { int numOutputs=instance.numberOutputTargets(); if(countVector==null){ countVector=new double[numOutputs]; } double weight=instance.weight(); for(int i=0; i<numOutputs;i++){ countVector[i]+=weight*instance.valueOutputAttribute(i); } numInstances+=weight; }
protected double [] getNormalizedOutput(MultiLabelInstance instance) { int numOutputs=instance.numOutputAttributes(); double [] normalizedOutput=new double[numOutputs]; for(int i=0; i<numOutputs; i++){ double mean=outAttrSum[i]/count; double std=Utils.computeSD(outAttrSquaredSum[i], outAttrSum[i], count); normalizedOutput[i]=instance.valueOutputAttribute(i)-mean; if (std > SD_THRESHOLD) normalizedOutput[i]/=std; } return normalizedOutput; }
public double normalizeTargetValue(MultiLabelInstance inst, int i) { if (normalize()) { if (examplesSeen > 1) { double value = inst.valueOutputAttribute(i); double sd = computeSD(sumOfSquares.getValue(i), sumOfValues.getValue(i), examplesSeen); double average = sumOfValues.getValue(i) / examplesSeen; if (sd > 0) return (value - average) / (3 * sd); else return 0; } return 0; } else return inst.valueOutputAttribute(i); }
@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); } }
public void addPrediction(Prediction prediction, MultiLabelInstance inst){ int numOutputs=inst.numberOutputTargets(); Prediction trueClass= new MultiLabelPrediction(numOutputs); for (int i=0; i<numOutputs; i++){ trueClass.setVotes(i, new double[]{inst.valueOutputAttribute(i)}); } addPrediction(prediction, trueClass, inst.weight()); }
public double[] normalizedTargetVector(MultiLabelInstance inst) { double[] out = new double[getModelContext().numOutputAttributes()]; if (normalize()) { for (int i = 0; i < inst.numOutputAttributes(); i++) { double value = inst.valueOutputAttribute(i); double sd = computeSD(sumOfSquares.getValue(i), sumOfValues.getValue(i), examplesSeen); double average = sumOfValues.getValue(i) / examplesSeen; if (sd > 0 && examplesSeen > 1) out[i] = (value - average) / (sd); else out[i] = 0; } } else { for (int i = 0; i < inst.numOutputAttributes(); i++) { out[i] = inst.valueOutputAttribute(i); } } return out; }
sumOfValues.addToValue(i, inst.weight() * inst.valueOutputAttribute(i)); sumOfSquares.addToValue(i, inst.weight() * inst.valueOutputAttribute(i) * inst.valueOutputAttribute(i)); errorP.setValue(i, errorP.getValue(i) * 0.95 + Math.abs(predictionP[i] - inst.valueOutputAttribute(i))); errorM.setValue(i, errorM.getValue(i) * 0.95 + Math.abs(predictionM[i] - inst.valueOutputAttribute(i))); observations[j] = new DoubleVector(); observations[j].setValue(0, inst.weight()); observations[j].setValue(1, inst.weight() * inst.valueOutputAttribute(j)); observations[j].setValue(2, inst.weight() * inst.valueOutputAttribute(j) * inst.valueOutputAttribute(j));
correct += ((int)x.classValue(j) == yp) ? 1 : 0; int y_true = (int)x.valueOutputAttribute(j); if (y_true == yp) correct++;
/** * Method for updating (training) the model using a new instance */ public void trainOnInstanceImpl(MultiLabelInstance inst) { if (inst.weight() > 0) { checkRoot(); double[] prediction = treeRoot.getPrediction(inst); double[] normalError = getNormalizedError(inst, prediction); //normalError.scaleValues(inst.weight()); processInstance(inst, treeRoot, prediction, normalError, true, false); examplesSeen += inst.weight(); for (int i = 0; i < inst.numberOutputTargets(); i++) { sumOfValues.addToValue(i, inst.weight() * inst.valueOutputAttribute(i)); sumOfSquares.addToValue(i, inst.weight() * inst.valueOutputAttribute(i) * inst.valueOutputAttribute(i)); } for (int i = 0; i < inst.numInputAttributes(); i++) { sumOfAttrValues.addToValue(i, inst.weight() * inst.valueInputAttribute(i)); sumOfAttrSquares.addToValue(i, inst.weight() * inst.valueInputAttribute(i) * inst.valueInputAttribute(i)); } } }
@Override public void addResult(Example<Instance> testInst, Prediction prediction) { MultiLabelInstance inst=(MultiLabelInstance) testInst.getData(); double weight = inst.weight(); if (numberOutputs == 0) { numberOutputs = inst.numberOutputTargets(); } if (weight > 0.0) { if (TotalweightObserved == 0) { reset(inst.dataset().numClasses()); } this.TotalweightObserved += weight; this.weightObserved.add(weight); if (prediction!=null) { for (int i = 0; i< numberOutputs;i++){ double error=(inst.valueOutputAttribute(i) - prediction.getVote(i, 0)); this.squareError.add( error*error); this.averageError.add(Math.abs(error)); } } //System.out.println(inst.classValue()+", "+prediction[0]); } } }
double value=instance.valueOutputAttribute(i); outAttrSum[i]+=value*w; outAttrSquaredSum[i]+=value*value*w;
double error=(inst.valueOutputAttribute(i) - prediction.getVote(i, 0)); this.sumY[i].add(inst.valueOutputAttribute(i)); double errorTM=(inst.valueOutputAttribute(i) - this.sumY[i].total()/this.weightObserved.total());
for(int i=0; i<outputsToLearn.length; i++){ literalStatistics[i]=new DoubleVector(new double[5]); varianceShift[i]=instance.valueOutputAttribute(outputsToLearn[i]); DoubleVector []exampleStatistics=new DoubleVector[outputsToLearn.length]; for (int i=0; i<outputsToLearn.length; i++){ double target=instance.valueOutputAttribute(outputsToLearn[i]); double sum=weight*target; double squaredSum=weight*target*target;
for(int i=0; i<outputsToLearn.length; i++){ literalStatistics[i]=new DoubleVector(new double[5]); EntropyShift[i]=instance.valueOutputAttribute(outputsToLearn[i]); DoubleVector []exampleStatistics=new DoubleVector[outputsToLearn.length]; for (int i=0; i<outputsToLearn.length; i++){ double target=instance.valueOutputAttribute(outputsToLearn[i]);
instance.setClassValue(inst.valueOutputAttribute(outputIndex));
instance.setClassValue(inst.valueOutputAttribute(outputIndex));
if(instance.valueOutputAttribute(m)==Double.NEGATIVE_INFINITY){ isUnlabeled=true; break; if(instance.valueOutputAttribute(m)==Double.NEGATIVE_INFINITY ){