Format java source files according to the eclipse-format.xml standard - spaces, no tabs - indent size = 2 spaces - line wrap at 120
Project: http://git-wip-us.apache.org/repos/asf/incubator-samoa/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-samoa/commit/23a35dbe Tree: http://git-wip-us.apache.org/repos/asf/incubator-samoa/tree/23a35dbe Diff: http://git-wip-us.apache.org/repos/asf/incubator-samoa/diff/23a35dbe Branch: refs/heads/master Commit: 23a35dbeb6c991b66293cc8138313b7651c831a2 Parents: 5af84c1 Author: Matthieu Morel <[email protected]> Authored: Tue Jan 27 13:56:17 2015 +0100 Committer: Matthieu Morel <[email protected]> Committed: Tue Jan 27 13:56:17 2015 +0100 ---------------------------------------------------------------------- .../com/yahoo/labs/samoa/core/ContentEvent.java | 33 +- .../com/yahoo/labs/samoa/core/DoubleVector.java | 148 +- .../labs/samoa/core/EntranceProcessor.java | 59 +- .../java/com/yahoo/labs/samoa/core/Globals.java | 44 +- .../com/yahoo/labs/samoa/core/Processor.java | 57 +- .../labs/samoa/core/SerializableInstance.java | 54 +- ...BasicClassificationPerformanceEvaluator.java | 198 +- .../BasicRegressionPerformanceEvaluator.java | 182 +- .../ClusteringEvaluationContentEvent.java | 83 +- .../ClusteringEvaluatorProcessor.java | 438 ++--- .../ClusteringResultContentEvent.java | 66 +- .../samoa/evaluation/EvaluatorProcessor.java | 373 ++-- .../samoa/evaluation/PerformanceEvaluator.java | 46 +- ...indowClassificationPerformanceEvaluator.java | 291 ++- .../labs/samoa/evaluation/measures/CMM.java | 872 ++++----- .../evaluation/measures/CMM_GTAnalysis.java | 1457 +++++++-------- .../evaluation/measures/EntropyCollection.java | 257 +-- .../labs/samoa/evaluation/measures/F1.java | 147 +- .../labs/samoa/evaluation/measures/General.java | 295 +-- .../labs/samoa/evaluation/measures/SSQ.java | 109 +- .../samoa/evaluation/measures/Separation.java | 156 +- .../measures/SilhouetteCoefficient.java | 192 +- .../measures/StatisticalCollection.java | 281 +-- .../samoa/examples/HelloWorldContentEvent.java | 66 +- .../HelloWorldDestinationProcessor.java | 33 +- .../examples/HelloWorldSourceProcessor.java | 70 +- .../labs/samoa/examples/HelloWorldTask.java | 114 +- .../labs/samoa/learners/AdaptiveLearner.java | 36 +- .../samoa/learners/InstanceContentEvent.java | 337 ++-- .../samoa/learners/InstancesContentEvent.java | 304 ++-- .../com/yahoo/labs/samoa/learners/Learner.java | 58 +- .../labs/samoa/learners/ResultContentEvent.java | 347 ++-- .../learners/classifiers/LocalLearner.java | 80 +- .../classifiers/LocalLearnerProcessor.java | 346 ++-- .../samoa/learners/classifiers/NaiveBayes.java | 426 ++--- .../classifiers/SimpleClassifierAdapter.java | 204 ++- .../learners/classifiers/SingleClassifier.java | 127 +- .../classifiers/ensemble/AdaptiveBagging.java | 184 +- .../learners/classifiers/ensemble/Bagging.java | 188 +- .../ensemble/BaggingDistributorProcessor.java | 325 ++-- .../learners/classifiers/ensemble/Boosting.java | 199 +- .../ensemble/BoostingDistributorProcessor.java | 15 +- .../BoostingPredictionCombinerProcessor.java | 252 +-- .../ensemble/PredictionCombinerProcessor.java | 273 +-- .../classifiers/rules/AMRulesRegressor.java | 253 +-- .../rules/HorizontalAMRulesRegressor.java | 376 ++-- .../rules/VerticalAMRulesRegressor.java | 302 ++-- .../centralized/AMRulesRegressorProcessor.java | 919 +++++----- .../classifiers/rules/common/ActiveRule.java | 383 ++-- .../classifiers/rules/common/LearningRule.java | 164 +- .../rules/common/NonLearningRule.java | 26 +- .../classifiers/rules/common/PassiveRule.java | 72 +- .../classifiers/rules/common/Perceptron.java | 889 ++++----- .../learners/classifiers/rules/common/Rule.java | 157 +- .../rules/common/RuleActiveLearningNode.java | 10 +- .../rules/common/RuleActiveRegressionNode.java | 553 +++--- .../rules/common/RulePassiveLearningNode.java | 9 +- .../rules/common/RulePassiveRegressionNode.java | 84 +- .../rules/common/RuleRegressionNode.java | 518 +++--- .../classifiers/rules/common/RuleSplitNode.java | 52 +- .../classifiers/rules/common/TargetMean.java | 314 ++-- .../distributed/AMRDefaultRuleProcessor.java | 578 +++--- .../rules/distributed/AMRLearnerProcessor.java | 421 ++--- .../rules/distributed/AMRRuleSetProcessor.java | 634 +++---- .../distributed/AMRulesAggregatorProcessor.java | 943 +++++----- .../distributed/AMRulesStatisticsProcessor.java | 340 ++-- .../distributed/AssignmentContentEvent.java | 70 +- .../distributed/PredicateContentEvent.java | 91 +- .../rules/distributed/RuleContentEvent.java | 88 +- .../classifiers/trees/ActiveLearningNode.java | 337 ++-- .../trees/AttributeBatchContentEvent.java | 206 +-- .../trees/AttributeContentEvent.java | 377 ++-- .../classifiers/trees/ComputeContentEvent.java | 222 +-- .../classifiers/trees/ControlContentEvent.java | 78 +- .../classifiers/trees/DeleteContentEvent.java | 30 +- .../classifiers/trees/FilterProcessor.java | 289 +-- .../learners/classifiers/trees/FoundNode.java | 96 +- .../classifiers/trees/InactiveLearningNode.java | 43 +- .../classifiers/trees/LearningNode.java | 52 +- .../trees/LocalResultContentEvent.java | 123 +- .../trees/LocalStatisticsProcessor.java | 374 ++-- .../trees/ModelAggregatorProcessor.java | 1341 +++++++------- .../samoa/learners/classifiers/trees/Node.java | 141 +- .../learners/classifiers/trees/SplitNode.java | 160 +- .../trees/VerticalHoeffdingTree.java | 5 +- .../clusterers/ClusteringContentEvent.java | 93 +- .../clusterers/ClustreamClustererAdapter.java | 232 +-- .../clusterers/LocalClustererAdapter.java | 86 +- .../clusterers/LocalClustererProcessor.java | 275 +-- .../learners/clusterers/SingleLearner.java | 107 +- .../simple/ClusteringDistributorProcessor.java | 106 +- .../clusterers/simple/DistributedClusterer.java | 141 +- .../yahoo/labs/samoa/moa/AbstractMOAObject.java | 89 +- .../com/yahoo/labs/samoa/moa/MOAObject.java | 52 +- .../moa/classifiers/AbstractClassifier.java | 624 +++---- .../labs/samoa/moa/classifiers/Classifier.java | 81 +- .../labs/samoa/moa/classifiers/Regressor.java | 7 +- .../core/AttributeSplitSuggestion.java | 57 +- .../AttributeClassObserver.java | 82 +- ...BinaryTreeNumericAttributeClassObserver.java | 253 +-- ...NumericAttributeClassObserverRegression.java | 211 +-- .../DiscreteAttributeClassObserver.java | 12 +- .../FIMTDDNumericAttributeClassObserver.java | 365 ++-- .../GaussianNumericAttributeClassObserver.java | 253 +-- ...waldKhannaNumericAttributeClassObserver.java | 146 +- .../NominalAttributeClassObserver.java | 244 +-- .../NullAttributeClassObserver.java | 74 +- .../NumericAttributeClassObserver.java | 9 +- .../VFMLNumericAttributeClassObserver.java | 338 ++-- .../InstanceConditionalBinaryTest.java | 13 +- .../InstanceConditionalTest.java | 83 +- .../NominalAttributeBinaryTest.java | 67 +- .../NominalAttributeMultiwayTest.java | 65 +- .../NumericAttributeBinaryTest.java | 99 +- .../classifiers/core/driftdetection/ADWIN.java | 975 +++++----- .../driftdetection/ADWINChangeDetector.java | 56 +- .../driftdetection/AbstractChangeDetector.java | 226 +-- .../core/driftdetection/ChangeDetector.java | 131 +- .../core/driftdetection/CusumDM.java | 118 +- .../classifiers/core/driftdetection/DDM.java | 146 +- .../classifiers/core/driftdetection/EDDM.java | 174 +- .../core/driftdetection/EWMAChartDM.java | 149 +- .../GeometricMovingAverageDM.java | 116 +- .../core/driftdetection/PageHinkleyDM.java | 122 +- .../core/splitcriteria/GiniSplitCriterion.java | 85 +- .../splitcriteria/InfoGainSplitCriterion.java | 139 +- .../InfoGainSplitCriterionMultilabel.java | 34 +- .../core/splitcriteria/SDRSplitCriterion.java | 14 +- .../core/splitcriteria/SplitCriterion.java | 51 +- .../VarianceReductionSplitCriterion.java | 115 +- .../classifiers/functions/MajorityClass.java | 78 +- .../moa/classifiers/rules/core/Predicate.java | 8 +- ...IMTDDNumericAttributeClassLimitObserver.java | 183 +- .../NumericAttributeBinaryRulePredicate.java | 217 +-- .../splitcriteria/SDRSplitCriterionAMRules.java | 106 +- .../core/voting/AbstractErrorWeightedVote.java | 123 +- .../rules/core/voting/ErrorWeightedVote.java | 103 +- .../core/voting/InverseErrorWeightedVote.java | 126 +- .../rules/core/voting/UniformWeightedVote.java | 74 +- .../rules/driftdetection/PageHinkleyFading.java | 99 +- .../rules/driftdetection/PageHinkleyTest.java | 117 +- .../yahoo/labs/samoa/moa/cluster/CFCluster.java | 274 +-- .../yahoo/labs/samoa/moa/cluster/Cluster.java | 268 ++- .../labs/samoa/moa/cluster/Clustering.java | 426 +++-- .../yahoo/labs/samoa/moa/cluster/Miniball.java | 80 +- .../labs/samoa/moa/cluster/SphereCluster.java | 670 ++++--- .../samoa/moa/clusterers/AbstractClusterer.java | 498 ++--- .../samoa/moa/clusterers/ClusterGenerator.java | 566 +++--- .../labs/samoa/moa/clusterers/Clusterer.java | 34 +- .../yahoo/labs/samoa/moa/clusterers/KMeans.java | 308 ++-- .../moa/clusterers/clustream/Clustream.java | 593 +++--- .../clusterers/clustream/ClustreamKernel.java | 462 ++--- .../moa/clusterers/clustream/WithKmeans.java | 854 ++++----- .../labs/samoa/moa/core/AutoClassDiscovery.java | 279 ++- .../labs/samoa/moa/core/AutoExpandVector.java | 184 +- .../yahoo/labs/samoa/moa/core/DataPoint.java | 182 +- .../yahoo/labs/samoa/moa/core/DoubleVector.java | 264 +-- .../com/yahoo/labs/samoa/moa/core/Example.java | 13 +- .../yahoo/labs/samoa/moa/core/FastVector.java | 58 +- .../labs/samoa/moa/core/GaussianEstimator.java | 166 +- .../core/GreenwaldKhannaQuantileSummary.java | 430 ++--- .../moa/core/InputStreamProgressMonitor.java | 174 +- .../labs/samoa/moa/core/InstanceExample.java | 46 +- .../yahoo/labs/samoa/moa/core/Measurement.java | 132 +- .../yahoo/labs/samoa/moa/core/MiscUtils.java | 106 +- .../labs/samoa/moa/core/ObjectRepository.java | 4 +- .../labs/samoa/moa/core/SerializeUtils.java | 114 +- .../yahoo/labs/samoa/moa/core/Statistics.java | 1122 ++++++------ .../yahoo/labs/samoa/moa/core/StringUtils.java | 110 +- .../com/yahoo/labs/samoa/moa/core/Utils.java | 1709 ++++++++++-------- .../samoa/moa/evaluation/LearningCurve.java | 162 +- .../moa/evaluation/LearningEvaluation.java | 42 +- .../LearningPerformanceEvaluator.java | 55 +- .../samoa/moa/evaluation/MeasureCollection.java | 450 ++--- .../samoa/moa/evaluation/MembershipMatrix.java | 219 ++- .../yahoo/labs/samoa/moa/learners/Learner.java | 199 +- .../samoa/moa/options/AbstractClassOption.java | 406 +++-- .../moa/options/AbstractOptionHandler.java | 277 ++- .../labs/samoa/moa/options/ClassOption.java | 249 +-- .../labs/samoa/moa/options/OptionHandler.java | 82 +- .../labs/samoa/moa/options/OptionsHandler.java | 293 ++- .../labs/samoa/moa/streams/ArffFileStream.java | 256 +-- .../labs/samoa/moa/streams/ExampleStream.java | 83 +- .../labs/samoa/moa/streams/InstanceStream.java | 9 +- .../moa/streams/clustering/ClusterEvent.java | 13 +- .../clustering/ClusterEventListener.java | 2 - .../streams/clustering/ClusteringStream.java | 38 +- .../clustering/RandomRBFGeneratorEvents.java | 1588 ++++++++-------- .../streams/generators/HyperplaneGenerator.java | 217 +-- .../streams/generators/RandomTreeGenerator.java | 384 ++-- .../yahoo/labs/samoa/moa/tasks/NullMonitor.java | 144 +- .../samoa/moa/tasks/ResultPreviewListener.java | 22 +- .../com/yahoo/labs/samoa/moa/tasks/Task.java | 56 +- .../yahoo/labs/samoa/moa/tasks/TaskMonitor.java | 230 +-- .../labs/samoa/streams/ArffFileStream.java | 160 +- .../streams/ClusteringEntranceProcessor.java | 326 ++-- .../yahoo/labs/samoa/streams/FileStream.java | 259 +-- .../streams/PrequentialSourceProcessor.java | 334 ++-- .../yahoo/labs/samoa/streams/StreamSource.java | 94 +- .../samoa/streams/StreamSourceProcessor.java | 288 +-- .../labs/samoa/streams/fs/FileStreamSource.java | 67 +- .../samoa/streams/fs/HDFSFileStreamSource.java | 210 +-- .../samoa/streams/fs/LocalFileStreamSource.java | 186 +- .../labs/samoa/tasks/ClusteringEvaluation.java | 209 ++- .../labs/samoa/tasks/PrequentialEvaluation.java | 254 +-- .../java/com/yahoo/labs/samoa/tasks/Task.java | 60 +- .../AbstractEntranceProcessingItem.java | 164 +- .../samoa/topology/AbstractProcessingItem.java | 265 +-- .../labs/samoa/topology/AbstractStream.java | 162 +- .../labs/samoa/topology/AbstractTopology.java | 193 +- .../labs/samoa/topology/ComponentFactory.java | 90 +- .../samoa/topology/EntranceProcessingItem.java | 31 +- .../labs/samoa/topology/IProcessingItem.java | 30 +- .../yahoo/labs/samoa/topology/ISubmitter.java | 31 +- .../topology/LocalEntranceProcessingItem.java | 105 +- .../labs/samoa/topology/ProcessingItem.java | 71 +- .../com/yahoo/labs/samoa/topology/Stream.java | 63 +- .../com/yahoo/labs/samoa/topology/Topology.java | 116 +- .../labs/samoa/topology/TopologyBuilder.java | 383 ++-- .../labs/samoa/utils/PartitioningScheme.java | 5 +- .../labs/samoa/utils/StreamDestination.java | 69 +- .../java/com/yahoo/labs/samoa/utils/Utils.java | 280 +-- .../yahoo/labs/samoa/core/DoubleVectorTest.java | 139 +- .../streams/fs/HDFSFileStreamSourceTest.java | 507 +++--- .../streams/fs/LocalFileStreamSourceTest.java | 458 ++--- .../yahoo/labs/samoa/instances/ArffLoader.java | 599 +++--- .../yahoo/labs/samoa/instances/Attribute.java | 280 +-- .../labs/samoa/instances/DenseInstance.java | 76 +- .../labs/samoa/instances/DenseInstanceData.java | 134 +- .../yahoo/labs/samoa/instances/Instance.java | 101 +- .../labs/samoa/instances/InstanceData.java | 26 +- .../samoa/instances/InstanceInformation.java | 144 +- .../yahoo/labs/samoa/instances/Instances.java | 410 +++-- .../labs/samoa/instances/InstancesHeader.java | 167 +- .../instances/SingleClassInstanceData.java | 90 +- .../samoa/instances/SingleLabelInstance.java | 449 +++-- .../labs/samoa/instances/SparseInstance.java | 37 +- .../samoa/instances/SparseInstanceData.java | 178 +- .../com/yahoo/labs/samoa/instances/Utils.java | 105 +- .../java/com/yahoo/labs/samoa/LocalDoTask.java | 81 +- .../topology/impl/SimpleComponentFactory.java | 30 +- .../labs/samoa/topology/impl/SimpleEngine.java | 10 +- .../impl/SimpleEntranceProcessingItem.java | 12 +- .../topology/impl/SimpleProcessingItem.java | 86 +- .../labs/samoa/topology/impl/SimpleStream.java | 94 +- .../samoa/topology/impl/SimpleTopology.java | 29 +- .../java/com/yahoo/labs/samoa/AlgosTest.java | 103 +- .../impl/SimpleComponentFactoryTest.java | 105 +- .../samoa/topology/impl/SimpleEngineTest.java | 45 +- .../impl/SimpleEntranceProcessingItemTest.java | 239 +-- .../topology/impl/SimpleProcessingItemTest.java | 150 +- .../samoa/topology/impl/SimpleStreamTest.java | 132 +- .../samoa/topology/impl/SimpleTopologyTest.java | 101 +- .../samoa/topology/impl/S4ComponentFactory.java | 93 +- .../labs/samoa/topology/impl/S4DoTask.java | 369 ++-- .../topology/impl/S4EntranceProcessingItem.java | 168 +- .../yahoo/labs/samoa/topology/impl/S4Event.java | 102 +- .../samoa/topology/impl/S4ProcessingItem.java | 292 +-- .../labs/samoa/topology/impl/S4Stream.java | 288 +-- .../labs/samoa/topology/impl/S4Submitter.java | 197 +- .../labs/samoa/topology/impl/S4Topology.java | 70 +- .../samoa/topology/impl/SamoaSerializer.java | 107 +- .../topology/impl/SamoaSerializerModule.java | 10 +- .../java/com/yahoo/labs/samoa/SamzaDoTask.java | 355 ++-- .../samoa/topology/impl/SamoaSystemFactory.java | 31 +- .../topology/impl/SamzaComponentFactory.java | 44 +- .../labs/samoa/topology/impl/SamzaEngine.java | 309 ++-- .../impl/SamzaEntranceProcessingItem.java | 349 ++-- .../topology/impl/SamzaProcessingItem.java | 221 +-- .../topology/impl/SamzaProcessingNode.java | 54 +- .../labs/samoa/topology/impl/SamzaStream.java | 401 ++-- .../labs/samoa/topology/impl/SamzaTopology.java | 58 +- .../labs/samoa/utils/SamzaConfigFactory.java | 951 +++++----- .../labs/samoa/utils/SamzaKryoSerdeFactory.java | 230 +-- .../samoa/utils/SerializableSerializer.java | 54 +- .../yahoo/labs/samoa/utils/SystemsUtils.java | 665 +++---- .../com/yahoo/labs/samoa/LocalStormDoTask.java | 53 +- .../samoa/topology/impl/StormBoltStream.java | 57 +- .../topology/impl/StormComponentFactory.java | 90 +- .../labs/samoa/topology/impl/StormDoTask.java | 159 +- .../impl/StormEntranceProcessingItem.java | 298 +-- .../samoa/topology/impl/StormJarSubmitter.java | 64 +- .../topology/impl/StormProcessingItem.java | 237 ++- .../samoa/topology/impl/StormSamoaUtils.java | 141 +- .../samoa/topology/impl/StormSpoutStream.java | 2 +- .../labs/samoa/topology/impl/StormStream.java | 97 +- .../labs/samoa/topology/impl/StormTopology.java | 39 +- .../samoa/topology/impl/StormTopologyNode.java | 13 +- .../topology/impl/StormTopologySubmitter.java | 174 +- .../java/com/yahoo/labs/samoa/AlgosTest.java | 70 +- .../topology/impl/StormProcessingItemTest.java | 69 +- .../java/com/yahoo/labs/samoa/TestParams.java | 394 ++-- .../java/com/yahoo/labs/samoa/TestUtils.java | 205 ++- .../yahoo/labs/samoa/LocalThreadsDoTask.java | 92 +- .../topology/impl/ThreadsComponentFactory.java | 43 +- .../labs/samoa/topology/impl/ThreadsEngine.java | 127 +- .../impl/ThreadsEntranceProcessingItem.java | 17 +- .../topology/impl/ThreadsEventRunnable.java | 62 +- .../topology/impl/ThreadsProcessingItem.java | 120 +- .../impl/ThreadsProcessingItemInstance.java | 47 +- .../labs/samoa/topology/impl/ThreadsStream.java | 131 +- .../samoa/topology/impl/ThreadsTopology.java | 62 +- .../java/com/yahoo/labs/samoa/AlgosTest.java | 72 +- .../impl/ThreadsComponentFactoryTest.java | 141 +- .../samoa/topology/impl/ThreadsEngineTest.java | 190 +- .../impl/ThreadsEntranceProcessingItemTest.java | 202 ++- .../topology/impl/ThreadsEventRunnableTest.java | 60 +- .../impl/ThreadsProcessingItemInstanceTest.java | 58 +- .../impl/ThreadsProcessingItemTest.java | 261 +-- .../samoa/topology/impl/ThreadsStreamTest.java | 166 +- .../topology/impl/ThreadsTopologyTest.java | 85 +- .../labs/samoa/utils/StreamDestinationTest.java | 64 +- 312 files changed, 32820 insertions(+), 32075 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-samoa/blob/23a35dbe/samoa-api/src/main/java/com/yahoo/labs/samoa/core/ContentEvent.java ---------------------------------------------------------------------- diff --git a/samoa-api/src/main/java/com/yahoo/labs/samoa/core/ContentEvent.java b/samoa-api/src/main/java/com/yahoo/labs/samoa/core/ContentEvent.java index a3ef92a..d9bb944 100644 --- a/samoa-api/src/main/java/com/yahoo/labs/samoa/core/ContentEvent.java +++ b/samoa-api/src/main/java/com/yahoo/labs/samoa/core/ContentEvent.java @@ -24,20 +24,21 @@ package com.yahoo.labs.samoa.core; * The Interface ContentEvent. */ public interface ContentEvent extends java.io.Serializable { - - /** - * Gets the content event key. - * - * @return the key - */ - public String getKey(); - - /** - * Sets the content event key. - * - * @param key string - */ - public void setKey(String key); - - public boolean isLastEvent(); + + /** + * Gets the content event key. + * + * @return the key + */ + public String getKey(); + + /** + * Sets the content event key. + * + * @param key + * string + */ + public void setKey(String key); + + public boolean isLastEvent(); } http://git-wip-us.apache.org/repos/asf/incubator-samoa/blob/23a35dbe/samoa-api/src/main/java/com/yahoo/labs/samoa/core/DoubleVector.java ---------------------------------------------------------------------- diff --git a/samoa-api/src/main/java/com/yahoo/labs/samoa/core/DoubleVector.java b/samoa-api/src/main/java/com/yahoo/labs/samoa/core/DoubleVector.java index 39362b5..6be9452 100644 --- a/samoa-api/src/main/java/com/yahoo/labs/samoa/core/DoubleVector.java +++ b/samoa-api/src/main/java/com/yahoo/labs/samoa/core/DoubleVector.java @@ -26,94 +26,94 @@ import com.google.common.primitives.Doubles; public class DoubleVector implements java.io.Serializable { - /** + /** * */ - private static final long serialVersionUID = 8243012708860261398L; + private static final long serialVersionUID = 8243012708860261398L; - private double[] doubleArray; + private double[] doubleArray; - public DoubleVector() { - this.doubleArray = new double[0]; - } + public DoubleVector() { + this.doubleArray = new double[0]; + } - public DoubleVector(double[] toCopy) { - this.doubleArray = new double[toCopy.length]; - System.arraycopy(toCopy, 0, this.doubleArray, 0, toCopy.length); - } + public DoubleVector(double[] toCopy) { + this.doubleArray = new double[toCopy.length]; + System.arraycopy(toCopy, 0, this.doubleArray, 0, toCopy.length); + } - public DoubleVector(DoubleVector toCopy) { - this(toCopy.getArrayRef()); - } + public DoubleVector(DoubleVector toCopy) { + this(toCopy.getArrayRef()); + } - public double[] getArrayRef() { - return this.doubleArray; - } + public double[] getArrayRef() { + return this.doubleArray; + } - public double[] getArrayCopy() { - return Doubles.concat(this.doubleArray); - } - - public int numNonZeroEntries() { - int count = 0; - for (double element : this.doubleArray) { - if (Double.compare(element, 0.0) != 0) { - count++; - } - } - return count; - } - - public void setValue(int index, double value) { - if (index >= doubleArray.length) { - this.doubleArray = Doubles.ensureCapacity(this.doubleArray, index + 1, 0); - } - this.doubleArray[index] = value; - } - - public void addToValue(int index, double value) { - if (index >= doubleArray.length) { - this.doubleArray = Doubles.ensureCapacity(this.doubleArray, index + 1, 0); - } - this.doubleArray[index] += value; - } - - public double sumOfValues() { - double sum = 0.0; - for (double element : this.doubleArray) { - sum += element; - } - return sum; - } + public double[] getArrayCopy() { + return Doubles.concat(this.doubleArray); + } - public void getSingleLineDescription(StringBuilder out) { - out.append("{"); - out.append(Doubles.join("|", this.doubleArray)); - out.append("}"); + public int numNonZeroEntries() { + int count = 0; + for (double element : this.doubleArray) { + if (Double.compare(element, 0.0) != 0) { + count++; + } } + return count; + } - @Override - public String toString() { - return "DoubleVector [doubleArray=" + Arrays.toString(doubleArray) + "]"; + public void setValue(int index, double value) { + if (index >= doubleArray.length) { + this.doubleArray = Doubles.ensureCapacity(this.doubleArray, index + 1, 0); } + this.doubleArray[index] = value; + } - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + Arrays.hashCode(doubleArray); - return result; + public void addToValue(int index, double value) { + if (index >= doubleArray.length) { + this.doubleArray = Doubles.ensureCapacity(this.doubleArray, index + 1, 0); } + this.doubleArray[index] += value; + } - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (!(obj instanceof DoubleVector)) - return false; - DoubleVector other = (DoubleVector) obj; - return Arrays.equals(doubleArray, other.doubleArray); + public double sumOfValues() { + double sum = 0.0; + for (double element : this.doubleArray) { + sum += element; } + return sum; + } + + public void getSingleLineDescription(StringBuilder out) { + out.append("{"); + out.append(Doubles.join("|", this.doubleArray)); + out.append("}"); + } + + @Override + public String toString() { + return "DoubleVector [doubleArray=" + Arrays.toString(doubleArray) + "]"; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + Arrays.hashCode(doubleArray); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (!(obj instanceof DoubleVector)) + return false; + DoubleVector other = (DoubleVector) obj; + return Arrays.equals(doubleArray, other.doubleArray); + } } http://git-wip-us.apache.org/repos/asf/incubator-samoa/blob/23a35dbe/samoa-api/src/main/java/com/yahoo/labs/samoa/core/EntranceProcessor.java ---------------------------------------------------------------------- diff --git a/samoa-api/src/main/java/com/yahoo/labs/samoa/core/EntranceProcessor.java b/samoa-api/src/main/java/com/yahoo/labs/samoa/core/EntranceProcessor.java index e1bdc14..e9eac30 100644 --- a/samoa-api/src/main/java/com/yahoo/labs/samoa/core/EntranceProcessor.java +++ b/samoa-api/src/main/java/com/yahoo/labs/samoa/core/EntranceProcessor.java @@ -25,35 +25,40 @@ import java.io.Serializable; import com.github.javacliparser.Configurable; /** - * An EntranceProcessor is a specific kind of processor dedicated to providing events to inject in the topology. It can be connected to a single output stream. + * An EntranceProcessor is a specific kind of processor dedicated to providing + * events to inject in the topology. It can be connected to a single output + * stream. */ public interface EntranceProcessor extends Serializable, Configurable, Processor { - /** - * Initializes the Processor. This method is called once after the topology is set up and before any call to the {@link nextTuple} method. - * - * @param the - * identifier of the processor. - */ - public void onCreate(int id); - - /** - * Checks whether the source stream is finished/exhausted. - */ - public boolean isFinished(); - - /** - * Checks whether a new event is ready to be processed. - * - * @return true if the EntranceProcessor is ready to provide the next event, false otherwise. - */ - public boolean hasNext(); - - /** - * Provides the next tuple to be processed by the topology. This method is the entry point for external events into the topology. - * - * @return the next event to be processed. - */ - public ContentEvent nextEvent(); + /** + * Initializes the Processor. This method is called once after the topology is + * set up and before any call to the {@link nextTuple} method. + * + * @param the + * identifier of the processor. + */ + public void onCreate(int id); + + /** + * Checks whether the source stream is finished/exhausted. + */ + public boolean isFinished(); + + /** + * Checks whether a new event is ready to be processed. + * + * @return true if the EntranceProcessor is ready to provide the next event, + * false otherwise. + */ + public boolean hasNext(); + + /** + * Provides the next tuple to be processed by the topology. This method is the + * entry point for external events into the topology. + * + * @return the next event to be processed. + */ + public ContentEvent nextEvent(); } http://git-wip-us.apache.org/repos/asf/incubator-samoa/blob/23a35dbe/samoa-api/src/main/java/com/yahoo/labs/samoa/core/Globals.java ---------------------------------------------------------------------- diff --git a/samoa-api/src/main/java/com/yahoo/labs/samoa/core/Globals.java b/samoa-api/src/main/java/com/yahoo/labs/samoa/core/Globals.java index 8e04016..e3435c1 100644 --- a/samoa-api/src/main/java/com/yahoo/labs/samoa/core/Globals.java +++ b/samoa-api/src/main/java/com/yahoo/labs/samoa/core/Globals.java @@ -34,26 +34,26 @@ import com.github.javacliparser.StringUtils; */ public class Globals { - public static final String workbenchTitle = "SAMOA: Scalable Advanced Massive Online Analysis Platform "; - - public static final String versionString = "0.0.1"; - - public static final String copyrightNotice = "Copyright Yahoo! Inc 2013"; - - public static final String webAddress = "http://github.com/yahoo/samoa"; - - public static String getWorkbenchInfoString() { - StringBuilder result = new StringBuilder(); - result.append(workbenchTitle); - StringUtils.appendNewline(result); - result.append("Version: "); - result.append(versionString); - StringUtils.appendNewline(result); - result.append("Copyright: "); - result.append(copyrightNotice); - StringUtils.appendNewline(result); - result.append("Web: "); - result.append(webAddress); - return result.toString(); - } + public static final String workbenchTitle = "SAMOA: Scalable Advanced Massive Online Analysis Platform "; + + public static final String versionString = "0.0.1"; + + public static final String copyrightNotice = "Copyright Yahoo! Inc 2013"; + + public static final String webAddress = "http://github.com/yahoo/samoa"; + + public static String getWorkbenchInfoString() { + StringBuilder result = new StringBuilder(); + result.append(workbenchTitle); + StringUtils.appendNewline(result); + result.append("Version: "); + result.append(versionString); + StringUtils.appendNewline(result); + result.append("Copyright: "); + result.append(copyrightNotice); + StringUtils.appendNewline(result); + result.append("Web: "); + result.append(webAddress); + return result.toString(); + } } http://git-wip-us.apache.org/repos/asf/incubator-samoa/blob/23a35dbe/samoa-api/src/main/java/com/yahoo/labs/samoa/core/Processor.java ---------------------------------------------------------------------- diff --git a/samoa-api/src/main/java/com/yahoo/labs/samoa/core/Processor.java b/samoa-api/src/main/java/com/yahoo/labs/samoa/core/Processor.java index 2033fae..b02d33c 100644 --- a/samoa-api/src/main/java/com/yahoo/labs/samoa/core/Processor.java +++ b/samoa-api/src/main/java/com/yahoo/labs/samoa/core/Processor.java @@ -29,33 +29,36 @@ import com.github.javacliparser.Configurable; */ public interface Processor extends Serializable, Configurable { - /** - * Entry point for the {@link Processor} code. This method is called once for every event received. - * - * @param event - * the event to be processed. - * @return true if successful, false otherwise. - */ - boolean process(ContentEvent event); + /** + * Entry point for the {@link Processor} code. This method is called once for + * every event received. + * + * @param event + * the event to be processed. + * @return true if successful, false otherwise. + */ + boolean process(ContentEvent event); - /** - * Initializes the Processor. - * This method is called once after the topology is set up and before any call to the {@link process} method. - * - * @param id - * the identifier of the processor. - */ - void onCreate(int id); + /** + * Initializes the Processor. This method is called once after the topology is + * set up and before any call to the {@link process} method. + * + * @param id + * the identifier of the processor. + */ + void onCreate(int id); - /** - * Creates a copy of a processor. - * This method is used to instantiate multiple instances of the same {@link Processsor}. - * - * @param processor - * the processor to be copied. - * - * @return a new instance of the {@link Processor}. - * */ - Processor newProcessor(Processor processor); // FIXME there should be no need for the processor as a parameter - // TODO can we substitute this with Cloneable? + /** + * Creates a copy of a processor. This method is used to instantiate multiple + * instances of the same {@link Processsor}. + * + * @param processor + * the processor to be copied. + * + * @return a new instance of the {@link Processor}. + * */ + Processor newProcessor(Processor processor); // FIXME there should be no need + // for the processor as a + // parameter + // TODO can we substitute this with Cloneable? } http://git-wip-us.apache.org/repos/asf/incubator-samoa/blob/23a35dbe/samoa-api/src/main/java/com/yahoo/labs/samoa/core/SerializableInstance.java ---------------------------------------------------------------------- diff --git a/samoa-api/src/main/java/com/yahoo/labs/samoa/core/SerializableInstance.java b/samoa-api/src/main/java/com/yahoo/labs/samoa/core/SerializableInstance.java index 715c656..a4d5b24 100644 --- a/samoa-api/src/main/java/com/yahoo/labs/samoa/core/SerializableInstance.java +++ b/samoa-api/src/main/java/com/yahoo/labs/samoa/core/SerializableInstance.java @@ -31,37 +31,39 @@ import com.yahoo.labs.samoa.instances.Instance; //import weka.core.Instance; /** - * The Class SerializableInstance. - * This class is needed for serialization of kryo + * The Class SerializableInstance. This class is needed for serialization of + * kryo */ public class SerializableInstance extends DenseInstance { - /** The Constant serialVersionUID. */ - private static final long serialVersionUID = -3659459626274566468L; + /** The Constant serialVersionUID. */ + private static final long serialVersionUID = -3659459626274566468L; - /** - * Instantiates a new serializable instance. - */ - public SerializableInstance() { - super(0); - } + /** + * Instantiates a new serializable instance. + */ + public SerializableInstance() { + super(0); + } - /** - * Instantiates a new serializable instance. - * - * @param arg0 the arg0 - */ - public SerializableInstance(int arg0) { - super(arg0); - } + /** + * Instantiates a new serializable instance. + * + * @param arg0 + * the arg0 + */ + public SerializableInstance(int arg0) { + super(arg0); + } - /** - * Instantiates a new serializable instance. - * - * @param inst the inst - */ - public SerializableInstance(Instance inst) { - super(inst); - } + /** + * Instantiates a new serializable instance. + * + * @param inst + * the inst + */ + public SerializableInstance(Instance inst) { + super(inst); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-samoa/blob/23a35dbe/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/BasicClassificationPerformanceEvaluator.java ---------------------------------------------------------------------- diff --git a/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/BasicClassificationPerformanceEvaluator.java b/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/BasicClassificationPerformanceEvaluator.java index 89a89c0..bc1d447 100644 --- a/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/BasicClassificationPerformanceEvaluator.java +++ b/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/BasicClassificationPerformanceEvaluator.java @@ -33,125 +33,125 @@ import com.yahoo.labs.samoa.instances.Utils; * @version $Revision: 7 $ */ public class BasicClassificationPerformanceEvaluator extends AbstractMOAObject implements - ClassificationPerformanceEvaluator { + ClassificationPerformanceEvaluator { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - protected double weightObserved; + protected double weightObserved; - protected double weightCorrect; + protected double weightCorrect; - protected double[] columnKappa; + protected double[] columnKappa; - protected double[] rowKappa; + protected double[] rowKappa; - protected int numClasses; + protected int numClasses; - private double weightCorrectNoChangeClassifier; + private double weightCorrectNoChangeClassifier; - private int lastSeenClass; + private int lastSeenClass; - @Override - public void reset() { - reset(this.numClasses); - } + @Override + public void reset() { + reset(this.numClasses); + } - public void reset(int numClasses) { - this.numClasses = numClasses; - this.rowKappa = new double[numClasses]; - this.columnKappa = new double[numClasses]; - for (int i = 0; i < this.numClasses; i++) { - this.rowKappa[i] = 0.0; - this.columnKappa[i] = 0.0; - } - this.weightObserved = 0.0; - this.weightCorrect = 0.0; - this.weightCorrectNoChangeClassifier = 0.0; - this.lastSeenClass = 0; + public void reset(int numClasses) { + this.numClasses = numClasses; + this.rowKappa = new double[numClasses]; + this.columnKappa = new double[numClasses]; + for (int i = 0; i < this.numClasses; i++) { + this.rowKappa[i] = 0.0; + this.columnKappa[i] = 0.0; } - - @Override - public void addResult(Instance inst, double[] classVotes) { - double weight = inst.weight(); - int trueClass = (int) inst.classValue(); - if (weight > 0.0) { - if (this.weightObserved == 0) { - reset(inst.numClasses()); - } - this.weightObserved += weight; - int predictedClass = Utils.maxIndex(classVotes); - if (predictedClass == trueClass) { - this.weightCorrect += weight; - } - if(rowKappa.length > 0){ - this.rowKappa[predictedClass] += weight; - } - if (columnKappa.length > 0) { - this.columnKappa[trueClass] += weight; - } - } - if (this.lastSeenClass == trueClass) { - this.weightCorrectNoChangeClassifier += weight; - } - this.lastSeenClass = trueClass; + this.weightObserved = 0.0; + this.weightCorrect = 0.0; + this.weightCorrectNoChangeClassifier = 0.0; + this.lastSeenClass = 0; + } + + @Override + public void addResult(Instance inst, double[] classVotes) { + double weight = inst.weight(); + int trueClass = (int) inst.classValue(); + if (weight > 0.0) { + if (this.weightObserved == 0) { + reset(inst.numClasses()); + } + this.weightObserved += weight; + int predictedClass = Utils.maxIndex(classVotes); + if (predictedClass == trueClass) { + this.weightCorrect += weight; + } + if (rowKappa.length > 0) { + this.rowKappa[predictedClass] += weight; + } + if (columnKappa.length > 0) { + this.columnKappa[trueClass] += weight; + } } + if (this.lastSeenClass == trueClass) { + this.weightCorrectNoChangeClassifier += weight; + } + this.lastSeenClass = trueClass; + } - @Override - public Measurement[] getPerformanceMeasurements() { - return new Measurement[]{ - new Measurement("classified instances", + @Override + public Measurement[] getPerformanceMeasurements() { + return new Measurement[] { + new Measurement("classified instances", getTotalWeightObserved()), - new Measurement("classifications correct (percent)", + new Measurement("classifications correct (percent)", getFractionCorrectlyClassified() * 100.0), - new Measurement("Kappa Statistic (percent)", + new Measurement("Kappa Statistic (percent)", getKappaStatistic() * 100.0), - new Measurement("Kappa Temporal Statistic (percent)", + new Measurement("Kappa Temporal Statistic (percent)", getKappaTemporalStatistic() * 100.0) - }; - + }; + + } + + public double getTotalWeightObserved() { + return this.weightObserved; + } + + public double getFractionCorrectlyClassified() { + return this.weightObserved > 0.0 ? this.weightCorrect + / this.weightObserved : 0.0; + } + + public double getFractionIncorrectlyClassified() { + return 1.0 - getFractionCorrectlyClassified(); + } + + public double getKappaStatistic() { + if (this.weightObserved > 0.0) { + double p0 = getFractionCorrectlyClassified(); + double pc = 0.0; + for (int i = 0; i < this.numClasses; i++) { + pc += (this.rowKappa[i] / this.weightObserved) + * (this.columnKappa[i] / this.weightObserved); + } + return (p0 - pc) / (1.0 - pc); + } else { + return 0; } + } - public double getTotalWeightObserved() { - return this.weightObserved; - } - - public double getFractionCorrectlyClassified() { - return this.weightObserved > 0.0 ? this.weightCorrect - / this.weightObserved : 0.0; - } + public double getKappaTemporalStatistic() { + if (this.weightObserved > 0.0) { + double p0 = this.weightCorrect / this.weightObserved; + double pc = this.weightCorrectNoChangeClassifier / this.weightObserved; - public double getFractionIncorrectlyClassified() { - return 1.0 - getFractionCorrectlyClassified(); + return (p0 - pc) / (1.0 - pc); + } else { + return 0; } + } - public double getKappaStatistic() { - if (this.weightObserved > 0.0) { - double p0 = getFractionCorrectlyClassified(); - double pc = 0.0; - for (int i = 0; i < this.numClasses; i++) { - pc += (this.rowKappa[i] / this.weightObserved) - * (this.columnKappa[i] / this.weightObserved); - } - return (p0 - pc) / (1.0 - pc); - } else { - return 0; - } - } - - public double getKappaTemporalStatistic() { - if (this.weightObserved > 0.0) { - double p0 = this.weightCorrect / this.weightObserved; - double pc = this.weightCorrectNoChangeClassifier / this.weightObserved; - - return (p0 - pc) / (1.0 - pc); - } else { - return 0; - } - } - - @Override - public void getDescription(StringBuilder sb, int indent) { - Measurement.getMeasurementsDescription(getPerformanceMeasurements(), - sb, indent); - } + @Override + public void getDescription(StringBuilder sb, int indent) { + Measurement.getMeasurementsDescription(getPerformanceMeasurements(), + sb, indent); + } } http://git-wip-us.apache.org/repos/asf/incubator-samoa/blob/23a35dbe/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/BasicRegressionPerformanceEvaluator.java ---------------------------------------------------------------------- diff --git a/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/BasicRegressionPerformanceEvaluator.java b/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/BasicRegressionPerformanceEvaluator.java index d98fe72..b5f318e 100644 --- a/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/BasicRegressionPerformanceEvaluator.java +++ b/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/BasicRegressionPerformanceEvaluator.java @@ -26,109 +26,109 @@ import com.yahoo.labs.samoa.moa.core.Measurement; /** * Regression evaluator that performs basic incremental evaluation. - * + * * @author Albert Bifet (abifet at cs dot waikato dot ac dot nz) * @version $Revision: 7 $ */ public class BasicRegressionPerformanceEvaluator extends AbstractMOAObject - implements RegressionPerformanceEvaluator { - - private static final long serialVersionUID = 1L; - - protected double weightObserved; - - protected double squareError; - - protected double averageError; - - protected double sumTarget; - - protected double squareTargetError; - - protected double averageTargetError; - - @Override - public void reset() { - this.weightObserved = 0.0; - this.squareError = 0.0; - this.averageError = 0.0; - this.sumTarget = 0.0; - this.averageTargetError = 0.0; - this.squareTargetError = 0.0; - - } + implements RegressionPerformanceEvaluator { - @Override - public void addResult(Instance inst, double[] prediction) { - double weight = inst.weight(); - double classValue = inst.classValue(); - if (weight > 0.0) { - if (prediction.length > 0) { - double meanTarget = this.weightObserved != 0 ? - this.sumTarget / this.weightObserved : 0.0; - this.squareError += (classValue - prediction[0]) * (classValue - prediction[0]); - this.averageError += Math.abs(classValue - prediction[0]); - this.squareTargetError += (classValue - meanTarget) * (classValue - meanTarget); - this.averageTargetError += Math.abs(classValue - meanTarget); - this.sumTarget += classValue; - this.weightObserved += weight; - } - } - } + private static final long serialVersionUID = 1L; - @Override - public Measurement[] getPerformanceMeasurements() { - return new Measurement[]{ - new Measurement("classified instances", - getTotalWeightObserved()), - new Measurement("mean absolute error", - getMeanError()), - new Measurement("root mean squared error", - getSquareError()), - new Measurement("relative mean absolute error", - getRelativeMeanError()), - new Measurement("relative root mean squared error", - getRelativeSquareError()) - }; - } + protected double weightObserved; - public double getTotalWeightObserved() { - return this.weightObserved; - } + protected double squareError; - public double getMeanError() { - return this.weightObserved > 0.0 ? this.averageError - / this.weightObserved : 0.0; - } + protected double averageError; - public double getSquareError() { - return Math.sqrt(this.weightObserved > 0.0 ? this.squareError - / this.weightObserved : 0.0); - } - - public double getTargetMeanError() { - return this.weightObserved > 0.0 ? this.averageTargetError - / this.weightObserved : 0.0; - } + protected double sumTarget; - public double getTargetSquareError() { - return Math.sqrt(this.weightObserved > 0.0 ? this.squareTargetError - / this.weightObserved : 0.0); - } + protected double squareTargetError; - @Override - public void getDescription(StringBuilder sb, int indent) { - Measurement.getMeasurementsDescription(getPerformanceMeasurements(), - sb, indent); - } + protected double averageTargetError; - private double getRelativeMeanError() { - return this.averageTargetError> 0 ? - this.averageError/this.averageTargetError : 0.0; - } + @Override + public void reset() { + this.weightObserved = 0.0; + this.squareError = 0.0; + this.averageError = 0.0; + this.sumTarget = 0.0; + this.averageTargetError = 0.0; + this.squareTargetError = 0.0; + + } - private double getRelativeSquareError() { - return Math.sqrt(this.squareTargetError> 0 ? - this.squareError/this.squareTargetError : 0.0); + @Override + public void addResult(Instance inst, double[] prediction) { + double weight = inst.weight(); + double classValue = inst.classValue(); + if (weight > 0.0) { + if (prediction.length > 0) { + double meanTarget = this.weightObserved != 0 ? + this.sumTarget / this.weightObserved : 0.0; + this.squareError += (classValue - prediction[0]) * (classValue - prediction[0]); + this.averageError += Math.abs(classValue - prediction[0]); + this.squareTargetError += (classValue - meanTarget) * (classValue - meanTarget); + this.averageTargetError += Math.abs(classValue - meanTarget); + this.sumTarget += classValue; + this.weightObserved += weight; + } } + } + + @Override + public Measurement[] getPerformanceMeasurements() { + return new Measurement[] { + new Measurement("classified instances", + getTotalWeightObserved()), + new Measurement("mean absolute error", + getMeanError()), + new Measurement("root mean squared error", + getSquareError()), + new Measurement("relative mean absolute error", + getRelativeMeanError()), + new Measurement("relative root mean squared error", + getRelativeSquareError()) + }; + } + + public double getTotalWeightObserved() { + return this.weightObserved; + } + + public double getMeanError() { + return this.weightObserved > 0.0 ? this.averageError + / this.weightObserved : 0.0; + } + + public double getSquareError() { + return Math.sqrt(this.weightObserved > 0.0 ? this.squareError + / this.weightObserved : 0.0); + } + + public double getTargetMeanError() { + return this.weightObserved > 0.0 ? this.averageTargetError + / this.weightObserved : 0.0; + } + + public double getTargetSquareError() { + return Math.sqrt(this.weightObserved > 0.0 ? this.squareTargetError + / this.weightObserved : 0.0); + } + + @Override + public void getDescription(StringBuilder sb, int indent) { + Measurement.getMeasurementsDescription(getPerformanceMeasurements(), + sb, indent); + } + + private double getRelativeMeanError() { + return this.averageTargetError > 0 ? + this.averageError / this.averageTargetError : 0.0; + } + + private double getRelativeSquareError() { + return Math.sqrt(this.squareTargetError > 0 ? + this.squareError / this.squareTargetError : 0.0); + } } http://git-wip-us.apache.org/repos/asf/incubator-samoa/blob/23a35dbe/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/ClusteringEvaluationContentEvent.java ---------------------------------------------------------------------- diff --git a/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/ClusteringEvaluationContentEvent.java b/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/ClusteringEvaluationContentEvent.java index 27fee6a..d482145 100644 --- a/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/ClusteringEvaluationContentEvent.java +++ b/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/ClusteringEvaluationContentEvent.java @@ -32,51 +32,54 @@ import com.yahoo.labs.samoa.moa.core.DataPoint; */ final public class ClusteringEvaluationContentEvent implements ContentEvent { - private static final long serialVersionUID = -7746983521296618922L; - private Clustering gtClustering; - private DataPoint dataPoint; - private final boolean isLast; - private String key = "0"; + private static final long serialVersionUID = -7746983521296618922L; + private Clustering gtClustering; + private DataPoint dataPoint; + private final boolean isLast; + private String key = "0"; - public ClusteringEvaluationContentEvent() { - this.isLast = false; - } + public ClusteringEvaluationContentEvent() { + this.isLast = false; + } - public ClusteringEvaluationContentEvent(boolean isLast) { - this.isLast = isLast; - } + public ClusteringEvaluationContentEvent(boolean isLast) { + this.isLast = isLast; + } - /** - * Instantiates a new gtClustering result event. - * - * @param clustering the gtClustering result - * @param instance data point - * @param isLast is the last result - */ - public ClusteringEvaluationContentEvent(Clustering clustering, DataPoint instance, boolean isLast) { - this.gtClustering = clustering; - this.isLast = isLast; - this.dataPoint = instance; - } + /** + * Instantiates a new gtClustering result event. + * + * @param clustering + * the gtClustering result + * @param instance + * data point + * @param isLast + * is the last result + */ + public ClusteringEvaluationContentEvent(Clustering clustering, DataPoint instance, boolean isLast) { + this.gtClustering = clustering; + this.isLast = isLast; + this.dataPoint = instance; + } - public String getKey() { - return key; - } + public String getKey() { + return key; + } - public void setKey(String key) { - this.key = key; - } + public void setKey(String key) { + this.key = key; + } - public boolean isLastEvent() { - return this.isLast; - } + public boolean isLastEvent() { + return this.isLast; + } + + Clustering getGTClustering() { + return this.gtClustering; + } + + DataPoint getDataPoint() { + return this.dataPoint; + } - Clustering getGTClustering() { - return this.gtClustering; - } - - DataPoint getDataPoint() { - return this.dataPoint; - } - } http://git-wip-us.apache.org/repos/asf/incubator-samoa/blob/23a35dbe/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/ClusteringEvaluatorProcessor.java ---------------------------------------------------------------------- diff --git a/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/ClusteringEvaluatorProcessor.java b/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/ClusteringEvaluatorProcessor.java index 2525a04..d8e0943 100644 --- a/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/ClusteringEvaluatorProcessor.java +++ b/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/ClusteringEvaluatorProcessor.java @@ -45,275 +45,277 @@ import com.yahoo.labs.samoa.moa.evaluation.MeasureCollection; public class ClusteringEvaluatorProcessor implements Processor { - /** + /** * */ - private static final long serialVersionUID = -2778051819116753612L; + private static final long serialVersionUID = -2778051819116753612L; - private static final Logger logger = LoggerFactory.getLogger(EvaluatorProcessor.class); + private static final Logger logger = LoggerFactory.getLogger(EvaluatorProcessor.class); - private static final String ORDERING_MEASUREMENT_NAME = "evaluation instances"; + private static final String ORDERING_MEASUREMENT_NAME = "evaluation instances"; - private final int samplingFrequency; - private final int decayHorizon; - private final File dumpFile; - private transient PrintStream immediateResultStream = null; - private transient boolean firstDump = true; + private final int samplingFrequency; + private final int decayHorizon; + private final File dumpFile; + private transient PrintStream immediateResultStream = null; + private transient boolean firstDump = true; - private long totalCount = 0; - private long experimentStart = 0; + private long totalCount = 0; + private long experimentStart = 0; - private LearningCurve learningCurve; + private LearningCurve learningCurve; - private MeasureCollection[] measures; + private MeasureCollection[] measures; - private int id; + private int id; - protected Clustering gtClustering; + protected Clustering gtClustering; - protected ArrayList<DataPoint> points; + protected ArrayList<DataPoint> points; - private ClusteringEvaluatorProcessor(Builder builder) { - this.samplingFrequency = builder.samplingFrequency; - this.dumpFile = builder.dumpFile; - this.points = new ArrayList<>(); - this.decayHorizon = builder.decayHorizon; - } + private ClusteringEvaluatorProcessor(Builder builder) { + this.samplingFrequency = builder.samplingFrequency; + this.dumpFile = builder.dumpFile; + this.points = new ArrayList<>(); + this.decayHorizon = builder.decayHorizon; + } - @Override - public boolean process(ContentEvent event) { - boolean ret = false; - if (event instanceof ClusteringResultContentEvent) { - ret = process((ClusteringResultContentEvent) event); - } - if (event instanceof ClusteringEvaluationContentEvent) { - ret = process((ClusteringEvaluationContentEvent) event); - } - return ret; + @Override + public boolean process(ContentEvent event) { + boolean ret = false; + if (event instanceof ClusteringResultContentEvent) { + ret = process((ClusteringResultContentEvent) event); + } + if (event instanceof ClusteringEvaluationContentEvent) { + ret = process((ClusteringEvaluationContentEvent) event); + } + return ret; + } + + private boolean process(ClusteringResultContentEvent result) { + // evaluate + Clustering clustering = KMeans.gaussianMeans(gtClustering, result.getClustering()); + for (MeasureCollection measure : measures) { + try { + measure.evaluateClusteringPerformance(clustering, gtClustering, points); + } catch (Exception ex) { + ex.printStackTrace(); + } } - private boolean process(ClusteringResultContentEvent result) { - // evaluate - Clustering clustering = KMeans.gaussianMeans(gtClustering, result.getClustering()); - for (MeasureCollection measure : measures) { - try { - measure.evaluateClusteringPerformance(clustering, gtClustering, points); - } catch (Exception ex) { - ex.printStackTrace(); - } - } + this.addMeasurement(); - this.addMeasurement(); + if (result.isLastEvent()) { + this.concludeMeasurement(); + return true; + } - if (result.isLastEvent()) { - this.concludeMeasurement(); - return true; - } + totalCount += 1; - totalCount += 1; + if (totalCount == 1) { + experimentStart = System.nanoTime(); + } - if (totalCount == 1) { - experimentStart = System.nanoTime(); - } + return false; + } - return false; + private boolean process(ClusteringEvaluationContentEvent result) { + boolean ret = false; + if (result.getGTClustering() != null) { + gtClustering = result.getGTClustering(); + ret = true; } - - private boolean process(ClusteringEvaluationContentEvent result) { - boolean ret = false; - if (result.getGTClustering() != null) { - gtClustering = result.getGTClustering(); - ret = true; - } - if (result.getDataPoint() != null) { - points.add(result.getDataPoint()); - if (points.size() > this.decayHorizon) { - points.remove(0); - } - ret = true; - } - return ret; + if (result.getDataPoint() != null) { + points.add(result.getDataPoint()); + if (points.size() > this.decayHorizon) { + points.remove(0); + } + ret = true; } - - @Override - public void onCreate(int id) { - this.id = id; - this.learningCurve = new LearningCurve(ORDERING_MEASUREMENT_NAME); - // create the measure collection - measures = getMeasures(getMeasureSelection()); - - if (this.dumpFile != null) { - try { - if (dumpFile.exists()) { - this.immediateResultStream = new PrintStream(new FileOutputStream(dumpFile, true), true); - } else { - this.immediateResultStream = new PrintStream(new FileOutputStream(dumpFile), true); - } - - } catch (FileNotFoundException e) { - this.immediateResultStream = null; - logger.error("File not found exception for {}:{}", this.dumpFile.getAbsolutePath(), e.toString()); - - } catch (Exception e) { - this.immediateResultStream = null; - logger.error("Exception when creating {}:{}", this.dumpFile.getAbsolutePath(), e.toString()); - } + return ret; + } + + @Override + public void onCreate(int id) { + this.id = id; + this.learningCurve = new LearningCurve(ORDERING_MEASUREMENT_NAME); + // create the measure collection + measures = getMeasures(getMeasureSelection()); + + if (this.dumpFile != null) { + try { + if (dumpFile.exists()) { + this.immediateResultStream = new PrintStream(new FileOutputStream(dumpFile, true), true); + } else { + this.immediateResultStream = new PrintStream(new FileOutputStream(dumpFile), true); } - this.firstDump = true; - } + } catch (FileNotFoundException e) { + this.immediateResultStream = null; + logger.error("File not found exception for {}:{}", this.dumpFile.getAbsolutePath(), e.toString()); - private static ArrayList<Class> getMeasureSelection() { - ArrayList<Class> mclasses = new ArrayList<>(); - // mclasses.add(EntropyCollection.class); - // mclasses.add(F1.class); - // mclasses.add(General.class); - // *mclasses.add(CMM.class); - mclasses.add(SSQ.class); - // *mclasses.add(SilhouetteCoefficient.class); - mclasses.add(StatisticalCollection.class); - // mclasses.add(Separation.class); - - return mclasses; + } catch (Exception e) { + this.immediateResultStream = null; + logger.error("Exception when creating {}:{}", this.dumpFile.getAbsolutePath(), e.toString()); + } } - private static MeasureCollection[] getMeasures(ArrayList<Class> measure_classes) { - MeasureCollection[] measures = new MeasureCollection[measure_classes.size()]; - for (int i = 0; i < measure_classes.size(); i++) { - try { - MeasureCollection m = (MeasureCollection) measure_classes.get(i).newInstance(); - measures[i] = m; - - } catch (Exception ex) { - java.util.logging.Logger.getLogger("Couldn't create Instance for " + measure_classes.get(i).getName()); - ex.printStackTrace(); - } - } - return measures; + this.firstDump = true; + } + + private static ArrayList<Class> getMeasureSelection() { + ArrayList<Class> mclasses = new ArrayList<>(); + // mclasses.add(EntropyCollection.class); + // mclasses.add(F1.class); + // mclasses.add(General.class); + // *mclasses.add(CMM.class); + mclasses.add(SSQ.class); + // *mclasses.add(SilhouetteCoefficient.class); + mclasses.add(StatisticalCollection.class); + // mclasses.add(Separation.class); + + return mclasses; + } + + private static MeasureCollection[] getMeasures(ArrayList<Class> measure_classes) { + MeasureCollection[] measures = new MeasureCollection[measure_classes.size()]; + for (int i = 0; i < measure_classes.size(); i++) { + try { + MeasureCollection m = (MeasureCollection) measure_classes.get(i).newInstance(); + measures[i] = m; + + } catch (Exception ex) { + java.util.logging.Logger.getLogger("Couldn't create Instance for " + measure_classes.get(i).getName()); + ex.printStackTrace(); + } } + return measures; + } - @Override - public Processor newProcessor(Processor p) { - ClusteringEvaluatorProcessor originalProcessor = (ClusteringEvaluatorProcessor) p; - ClusteringEvaluatorProcessor newProcessor = new ClusteringEvaluatorProcessor.Builder(originalProcessor).build(); + @Override + public Processor newProcessor(Processor p) { + ClusteringEvaluatorProcessor originalProcessor = (ClusteringEvaluatorProcessor) p; + ClusteringEvaluatorProcessor newProcessor = new ClusteringEvaluatorProcessor.Builder(originalProcessor).build(); - if (originalProcessor.learningCurve != null) { - newProcessor.learningCurve = originalProcessor.learningCurve; - } - - return newProcessor; + if (originalProcessor.learningCurve != null) { + newProcessor.learningCurve = originalProcessor.learningCurve; } - @Override - public String toString() { - StringBuilder report = new StringBuilder(); - - report.append(EvaluatorProcessor.class.getCanonicalName()); - report.append("id = ").append(this.id); - report.append('\n'); - - if (learningCurve.numEntries() > 0) { - report.append(learningCurve.toString()); - report.append('\n'); - } - return report.toString(); - } + return newProcessor; + } - private void addMeasurement() { - // printMeasures(); - List<Measurement> measurements = new ArrayList<>(); - measurements.add(new Measurement(ORDERING_MEASUREMENT_NAME, totalCount * this.samplingFrequency)); + @Override + public String toString() { + StringBuilder report = new StringBuilder(); - addClusteringPerformanceMeasurements(measurements); - Measurement[] finalMeasurements = measurements.toArray(new Measurement[measurements.size()]); + report.append(EvaluatorProcessor.class.getCanonicalName()); + report.append("id = ").append(this.id); + report.append('\n'); - LearningEvaluation learningEvaluation = new LearningEvaluation(finalMeasurements); - learningCurve.insertEntry(learningEvaluation); - logger.debug("evaluator id = {}", this.id); - // logger.info(learningEvaluation.toString()); - - if (immediateResultStream != null) { - if (firstDump) { - immediateResultStream.println(learningCurve.headerToString()); - firstDump = false; - } - - immediateResultStream.println(learningCurve.entryToString(learningCurve.numEntries() - 1)); - immediateResultStream.flush(); - } + if (learningCurve.numEntries() > 0) { + report.append(learningCurve.toString()); + report.append('\n'); } - - private void addClusteringPerformanceMeasurements(List<Measurement> measurements) { - for (MeasureCollection measure : measures) { - for (int j = 0; j < measure.getNumMeasures(); j++) { - Measurement measurement = new Measurement(measure.getName(j), measure.getLastValue(j)); - measurements.add(measurement); - } - } + return report.toString(); + } + + private void addMeasurement() { + // printMeasures(); + List<Measurement> measurements = new ArrayList<>(); + measurements.add(new Measurement(ORDERING_MEASUREMENT_NAME, totalCount * this.samplingFrequency)); + + addClusteringPerformanceMeasurements(measurements); + Measurement[] finalMeasurements = measurements.toArray(new Measurement[measurements.size()]); + + LearningEvaluation learningEvaluation = new LearningEvaluation(finalMeasurements); + learningCurve.insertEntry(learningEvaluation); + logger.debug("evaluator id = {}", this.id); + // logger.info(learningEvaluation.toString()); + + if (immediateResultStream != null) { + if (firstDump) { + immediateResultStream.println(learningCurve.headerToString()); + firstDump = false; + } + + immediateResultStream.println(learningCurve.entryToString(learningCurve.numEntries() - 1)); + immediateResultStream.flush(); } + } + + private void addClusteringPerformanceMeasurements(List<Measurement> measurements) { + for (MeasureCollection measure : measures) { + for (int j = 0; j < measure.getNumMeasures(); j++) { + Measurement measurement = new Measurement(measure.getName(j), measure.getLastValue(j)); + measurements.add(measurement); + } + } + } - private void concludeMeasurement() { - logger.info("last event is received!"); - logger.info("total count: {}", this.totalCount); - - String learningCurveSummary = this.toString(); - logger.info(learningCurveSummary); + private void concludeMeasurement() { + logger.info("last event is received!"); + logger.info("total count: {}", this.totalCount); - long experimentEnd = System.nanoTime(); - long totalExperimentTime = TimeUnit.SECONDS.convert(experimentEnd - experimentStart, TimeUnit.NANOSECONDS); - logger.info("total evaluation time: {} seconds for {} instances", totalExperimentTime, totalCount); - // logger.info("average throughput rate: {} instances/seconds", (totalCount/totalExperimentTime)); - } + String learningCurveSummary = this.toString(); + logger.info(learningCurveSummary); - private void printMeasures() { - StringBuilder sb = new StringBuilder(); - for (MeasureCollection measure : measures) { + long experimentEnd = System.nanoTime(); + long totalExperimentTime = TimeUnit.SECONDS.convert(experimentEnd - experimentStart, TimeUnit.NANOSECONDS); + logger.info("total evaluation time: {} seconds for {} instances", totalExperimentTime, totalCount); + // logger.info("average throughput rate: {} instances/seconds", + // (totalCount/totalExperimentTime)); + } - sb.append("Mean ").append(measure.getClass().getSimpleName()).append(":").append(measure.getNumMeasures()).append("\n"); - for (int j = 0; j < measure.getNumMeasures(); j++) { - sb.append("[").append(measure.getName(j)).append("=").append(measure.getLastValue(j)).append("] \n"); + private void printMeasures() { + StringBuilder sb = new StringBuilder(); + for (MeasureCollection measure : measures) { - } - sb.append("\n"); - } + sb.append("Mean ").append(measure.getClass().getSimpleName()).append(":").append(measure.getNumMeasures()) + .append("\n"); + for (int j = 0; j < measure.getNumMeasures(); j++) { + sb.append("[").append(measure.getName(j)).append("=").append(measure.getLastValue(j)).append("] \n"); - logger.debug("\n MEASURES: \n\n {}", sb.toString()); - System.out.println(sb.toString()); + } + sb.append("\n"); } - public static class Builder { + logger.debug("\n MEASURES: \n\n {}", sb.toString()); + System.out.println(sb.toString()); + } - private int samplingFrequency = 1000; - private File dumpFile = null; - private int decayHorizon = 1000; + public static class Builder { - public Builder(int samplingFrequency) { - this.samplingFrequency = samplingFrequency; - } + private int samplingFrequency = 1000; + private File dumpFile = null; + private int decayHorizon = 1000; - public Builder(ClusteringEvaluatorProcessor oldProcessor) { - this.samplingFrequency = oldProcessor.samplingFrequency; - this.dumpFile = oldProcessor.dumpFile; - this.decayHorizon = oldProcessor.decayHorizon; - } + public Builder(int samplingFrequency) { + this.samplingFrequency = samplingFrequency; + } - public Builder samplingFrequency(int samplingFrequency) { - this.samplingFrequency = samplingFrequency; - return this; - } + public Builder(ClusteringEvaluatorProcessor oldProcessor) { + this.samplingFrequency = oldProcessor.samplingFrequency; + this.dumpFile = oldProcessor.dumpFile; + this.decayHorizon = oldProcessor.decayHorizon; + } - public Builder decayHorizon(int decayHorizon) { - this.decayHorizon = decayHorizon; - return this; - } + public Builder samplingFrequency(int samplingFrequency) { + this.samplingFrequency = samplingFrequency; + return this; + } - public Builder dumpFile(File file) { - this.dumpFile = file; - return this; - } + public Builder decayHorizon(int decayHorizon) { + this.decayHorizon = decayHorizon; + return this; + } - public ClusteringEvaluatorProcessor build() { - return new ClusteringEvaluatorProcessor(this); - } + public Builder dumpFile(File file) { + this.dumpFile = file; + return this; + } + + public ClusteringEvaluatorProcessor build() { + return new ClusteringEvaluatorProcessor(this); } + } } http://git-wip-us.apache.org/repos/asf/incubator-samoa/blob/23a35dbe/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/ClusteringResultContentEvent.java ---------------------------------------------------------------------- diff --git a/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/ClusteringResultContentEvent.java b/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/ClusteringResultContentEvent.java index 1a5610e..95349c7 100644 --- a/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/ClusteringResultContentEvent.java +++ b/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/ClusteringResultContentEvent.java @@ -31,43 +31,45 @@ import com.yahoo.labs.samoa.moa.cluster.Clustering; */ final public class ClusteringResultContentEvent implements ContentEvent { - private static final long serialVersionUID = -7746983521296618922L; - private Clustering clustering; - private final boolean isLast; - private String key = "0"; + private static final long serialVersionUID = -7746983521296618922L; + private Clustering clustering; + private final boolean isLast; + private String key = "0"; - public ClusteringResultContentEvent() { - this.isLast = false; - } + public ClusteringResultContentEvent() { + this.isLast = false; + } - public ClusteringResultContentEvent(boolean isLast) { - this.isLast = isLast; - } + public ClusteringResultContentEvent(boolean isLast) { + this.isLast = isLast; + } - /** - * Instantiates a new clustering result event. - * - * @param clustering the clustering result - * @param isLast is the last result - */ - public ClusteringResultContentEvent(Clustering clustering, boolean isLast) { - this.clustering = clustering; - this.isLast = isLast; - } + /** + * Instantiates a new clustering result event. + * + * @param clustering + * the clustering result + * @param isLast + * is the last result + */ + public ClusteringResultContentEvent(Clustering clustering, boolean isLast) { + this.clustering = clustering; + this.isLast = isLast; + } - public String getKey() { - return key; - } + public String getKey() { + return key; + } - public void setKey(String key) { - this.key = key; - } + public void setKey(String key) { + this.key = key; + } - public boolean isLastEvent() { - return this.isLast; - } + public boolean isLastEvent() { + return this.isLast; + } - public Clustering getClustering() { - return this.clustering; - } + public Clustering getClustering() { + return this.clustering; + } } http://git-wip-us.apache.org/repos/asf/incubator-samoa/blob/23a35dbe/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/EvaluatorProcessor.java ---------------------------------------------------------------------- diff --git a/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/EvaluatorProcessor.java b/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/EvaluatorProcessor.java index f110872..ed2207f 100755 --- a/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/EvaluatorProcessor.java +++ b/samoa-api/src/main/java/com/yahoo/labs/samoa/evaluation/EvaluatorProcessor.java @@ -42,193 +42,192 @@ import com.yahoo.labs.samoa.learners.ResultContentEvent; public class EvaluatorProcessor implements Processor { - /** + /** * */ - private static final long serialVersionUID = -2778051819116753612L; - - private static final Logger logger = - LoggerFactory.getLogger(EvaluatorProcessor.class); - - private static final String ORDERING_MEASUREMENT_NAME = "evaluation instances"; - - private final PerformanceEvaluator evaluator; - private final int samplingFrequency; - private final File dumpFile; - private transient PrintStream immediateResultStream = null; - private transient boolean firstDump = true; - - - private long totalCount = 0; - private long experimentStart = 0; - - private long sampleStart = 0; - - private LearningCurve learningCurve; - private int id; - - private EvaluatorProcessor(Builder builder){ - this.evaluator = builder.evaluator; - this.samplingFrequency = builder.samplingFrequency; - this.dumpFile = builder.dumpFile; - } - - @Override - public boolean process(ContentEvent event) { - - ResultContentEvent result = (ResultContentEvent) event; - - if((totalCount > 0) && (totalCount % samplingFrequency) == 0){ - long sampleEnd = System.nanoTime(); - long sampleDuration = TimeUnit.SECONDS.convert(sampleEnd - sampleStart, TimeUnit.NANOSECONDS); - sampleStart = sampleEnd; - - logger.info("{} seconds for {} instances", sampleDuration, samplingFrequency); - this.addMeasurement(); - } - - if(result.isLastEvent()){ - this.concludeMeasurement(); - return true; - } - - evaluator.addResult(result.getInstance(), result.getClassVotes()); - totalCount += 1; - - if(totalCount == 1){ - sampleStart = System.nanoTime(); - experimentStart = sampleStart; - } - - return false; - } - - @Override - public void onCreate(int id) { - this.id = id; - this.learningCurve = new LearningCurve(ORDERING_MEASUREMENT_NAME); - - if (this.dumpFile != null) { - try { - if(dumpFile.exists()){ - this.immediateResultStream = new PrintStream( - new FileOutputStream(dumpFile, true), true); - }else{ - this.immediateResultStream = new PrintStream( - new FileOutputStream(dumpFile), true); - } - - } catch (FileNotFoundException e) { - this.immediateResultStream = null; - logger.error("File not found exception for {}:{}", this.dumpFile.getAbsolutePath(), e.toString()); - - } catch (Exception e){ - this.immediateResultStream = null; - logger.error("Exception when creating {}:{}", this.dumpFile.getAbsolutePath(), e.toString()); - } - } - - this.firstDump = true; - } - - @Override - public Processor newProcessor(Processor p) { - EvaluatorProcessor originalProcessor = (EvaluatorProcessor) p; - EvaluatorProcessor newProcessor = new EvaluatorProcessor.Builder(originalProcessor).build(); - - if (originalProcessor.learningCurve != null){ - newProcessor.learningCurve = originalProcessor.learningCurve; - } - - return newProcessor; - } - - @Override - public String toString() { - StringBuilder report = new StringBuilder(); - - report.append(EvaluatorProcessor.class.getCanonicalName()); - report.append("id = ").append(this.id); - report.append('\n'); - - if(learningCurve.numEntries() > 0){ - report.append(learningCurve.toString()); - report.append('\n'); - } - return report.toString(); - } - - private void addMeasurement(){ - List<Measurement> measurements = new Vector<>(); - measurements.add(new Measurement(ORDERING_MEASUREMENT_NAME, totalCount)); - - Collections.addAll(measurements, evaluator.getPerformanceMeasurements()); - - Measurement[] finalMeasurements = measurements.toArray(new Measurement[measurements.size()]); - - LearningEvaluation learningEvaluation = new LearningEvaluation(finalMeasurements); - learningCurve.insertEntry(learningEvaluation); - logger.debug("evaluator id = {}", this.id); - logger.info(learningEvaluation.toString()); - - if(immediateResultStream != null){ - if(firstDump){ - immediateResultStream.println(learningCurve.headerToString()); - firstDump = false; - } - - immediateResultStream.println(learningCurve.entryToString(learningCurve.numEntries() -1)); - immediateResultStream.flush(); - } - } - - private void concludeMeasurement(){ - logger.info("last event is received!"); - logger.info("total count: {}", this.totalCount); - - String learningCurveSummary = this.toString(); - logger.info(learningCurveSummary); - - - long experimentEnd = System.nanoTime(); - long totalExperimentTime = TimeUnit.SECONDS.convert(experimentEnd - experimentStart, TimeUnit.NANOSECONDS); - logger.info("total evaluation time: {} seconds for {} instances", totalExperimentTime, totalCount); - - if (immediateResultStream!=null) { - immediateResultStream.println("# COMPLETED"); - immediateResultStream.flush(); - } - //logger.info("average throughput rate: {} instances/seconds", (totalCount/totalExperimentTime)); - } - - public static class Builder{ - - private final PerformanceEvaluator evaluator; - private int samplingFrequency = 100000; - private File dumpFile = null; - - public Builder(PerformanceEvaluator evaluator){ - this.evaluator = evaluator; - } - - public Builder(EvaluatorProcessor oldProcessor){ - this.evaluator = oldProcessor.evaluator; - this.samplingFrequency = oldProcessor.samplingFrequency; - this.dumpFile = oldProcessor.dumpFile; - } - - public Builder samplingFrequency(int samplingFrequency){ - this.samplingFrequency = samplingFrequency; - return this; - } - - public Builder dumpFile(File file){ - this.dumpFile = file; - return this; - } - - public EvaluatorProcessor build(){ - return new EvaluatorProcessor(this); - } - } + private static final long serialVersionUID = -2778051819116753612L; + + private static final Logger logger = + LoggerFactory.getLogger(EvaluatorProcessor.class); + + private static final String ORDERING_MEASUREMENT_NAME = "evaluation instances"; + + private final PerformanceEvaluator evaluator; + private final int samplingFrequency; + private final File dumpFile; + private transient PrintStream immediateResultStream = null; + private transient boolean firstDump = true; + + private long totalCount = 0; + private long experimentStart = 0; + + private long sampleStart = 0; + + private LearningCurve learningCurve; + private int id; + + private EvaluatorProcessor(Builder builder) { + this.evaluator = builder.evaluator; + this.samplingFrequency = builder.samplingFrequency; + this.dumpFile = builder.dumpFile; + } + + @Override + public boolean process(ContentEvent event) { + + ResultContentEvent result = (ResultContentEvent) event; + + if ((totalCount > 0) && (totalCount % samplingFrequency) == 0) { + long sampleEnd = System.nanoTime(); + long sampleDuration = TimeUnit.SECONDS.convert(sampleEnd - sampleStart, TimeUnit.NANOSECONDS); + sampleStart = sampleEnd; + + logger.info("{} seconds for {} instances", sampleDuration, samplingFrequency); + this.addMeasurement(); + } + + if (result.isLastEvent()) { + this.concludeMeasurement(); + return true; + } + + evaluator.addResult(result.getInstance(), result.getClassVotes()); + totalCount += 1; + + if (totalCount == 1) { + sampleStart = System.nanoTime(); + experimentStart = sampleStart; + } + + return false; + } + + @Override + public void onCreate(int id) { + this.id = id; + this.learningCurve = new LearningCurve(ORDERING_MEASUREMENT_NAME); + + if (this.dumpFile != null) { + try { + if (dumpFile.exists()) { + this.immediateResultStream = new PrintStream( + new FileOutputStream(dumpFile, true), true); + } else { + this.immediateResultStream = new PrintStream( + new FileOutputStream(dumpFile), true); + } + + } catch (FileNotFoundException e) { + this.immediateResultStream = null; + logger.error("File not found exception for {}:{}", this.dumpFile.getAbsolutePath(), e.toString()); + + } catch (Exception e) { + this.immediateResultStream = null; + logger.error("Exception when creating {}:{}", this.dumpFile.getAbsolutePath(), e.toString()); + } + } + + this.firstDump = true; + } + + @Override + public Processor newProcessor(Processor p) { + EvaluatorProcessor originalProcessor = (EvaluatorProcessor) p; + EvaluatorProcessor newProcessor = new EvaluatorProcessor.Builder(originalProcessor).build(); + + if (originalProcessor.learningCurve != null) { + newProcessor.learningCurve = originalProcessor.learningCurve; + } + + return newProcessor; + } + + @Override + public String toString() { + StringBuilder report = new StringBuilder(); + + report.append(EvaluatorProcessor.class.getCanonicalName()); + report.append("id = ").append(this.id); + report.append('\n'); + + if (learningCurve.numEntries() > 0) { + report.append(learningCurve.toString()); + report.append('\n'); + } + return report.toString(); + } + + private void addMeasurement() { + List<Measurement> measurements = new Vector<>(); + measurements.add(new Measurement(ORDERING_MEASUREMENT_NAME, totalCount)); + + Collections.addAll(measurements, evaluator.getPerformanceMeasurements()); + + Measurement[] finalMeasurements = measurements.toArray(new Measurement[measurements.size()]); + + LearningEvaluation learningEvaluation = new LearningEvaluation(finalMeasurements); + learningCurve.insertEntry(learningEvaluation); + logger.debug("evaluator id = {}", this.id); + logger.info(learningEvaluation.toString()); + + if (immediateResultStream != null) { + if (firstDump) { + immediateResultStream.println(learningCurve.headerToString()); + firstDump = false; + } + + immediateResultStream.println(learningCurve.entryToString(learningCurve.numEntries() - 1)); + immediateResultStream.flush(); + } + } + + private void concludeMeasurement() { + logger.info("last event is received!"); + logger.info("total count: {}", this.totalCount); + + String learningCurveSummary = this.toString(); + logger.info(learningCurveSummary); + + long experimentEnd = System.nanoTime(); + long totalExperimentTime = TimeUnit.SECONDS.convert(experimentEnd - experimentStart, TimeUnit.NANOSECONDS); + logger.info("total evaluation time: {} seconds for {} instances", totalExperimentTime, totalCount); + + if (immediateResultStream != null) { + immediateResultStream.println("# COMPLETED"); + immediateResultStream.flush(); + } + // logger.info("average throughput rate: {} instances/seconds", + // (totalCount/totalExperimentTime)); + } + + public static class Builder { + + private final PerformanceEvaluator evaluator; + private int samplingFrequency = 100000; + private File dumpFile = null; + + public Builder(PerformanceEvaluator evaluator) { + this.evaluator = evaluator; + } + + public Builder(EvaluatorProcessor oldProcessor) { + this.evaluator = oldProcessor.evaluator; + this.samplingFrequency = oldProcessor.samplingFrequency; + this.dumpFile = oldProcessor.dumpFile; + } + + public Builder samplingFrequency(int samplingFrequency) { + this.samplingFrequency = samplingFrequency; + return this; + } + + public Builder dumpFile(File file) { + this.dumpFile = file; + return this; + } + + public EvaluatorProcessor build() { + return new EvaluatorProcessor(this); + } + } }
