diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/utilities/scaling')
14 files changed, 58 insertions, 32 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/HeDESNormalizationOutlierScaling.java b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/HeDESNormalizationOutlierScaling.java index e7e6ee90..8a152cff 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/HeDESNormalizationOutlierScaling.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/HeDESNormalizationOutlierScaling.java @@ -24,6 +24,7 @@ package de.lmu.ifi.dbs.elki.utilities.scaling.outlier; */ import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.DBIDIter; import de.lmu.ifi.dbs.elki.math.DoubleMinMax; import de.lmu.ifi.dbs.elki.math.MeanVariance; import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult; @@ -61,7 +62,8 @@ public class HeDESNormalizationOutlierScaling implements OutlierScalingFunction MeanVariance mv = new MeanVariance(); DoubleMinMax minmax = new DoubleMinMax(); - for(DBID id : or.getScores().iterDBIDs()) { + for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) { + DBID id = iditer.getDBID(); double val = or.getScores().get(id); if(!Double.isNaN(val) && !Double.isInfinite(val)) { mv.put(val); diff --git a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogGammaScaling.java b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogGammaScaling.java index 1485204c..860c77d6 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogGammaScaling.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogGammaScaling.java @@ -24,6 +24,7 @@ package de.lmu.ifi.dbs.elki.utilities.scaling.outlier; */ import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.DBIDIter; import de.lmu.ifi.dbs.elki.math.DoubleMinMax; import de.lmu.ifi.dbs.elki.math.MeanVariance; import de.lmu.ifi.dbs.elki.math.statistics.distribution.GammaDistribution; @@ -67,7 +68,8 @@ public class MinusLogGammaScaling extends OutlierGammaScaling { meta = or.getOutlierMeta(); // Determine Minimum and Maximum. DoubleMinMax mm = new DoubleMinMax(); - for(DBID id : or.getScores().iterDBIDs()) { + for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) { + DBID id = iditer.getDBID(); double score = or.getScores().get(id); if(!Double.isNaN(score) && !Double.isInfinite(score)) { mm.put(score); @@ -77,7 +79,8 @@ public class MinusLogGammaScaling extends OutlierGammaScaling { mlogmax = -Math.log(mm.getMin() / max); // with the prescaling, do Gamma Scaling. MeanVariance mv = new MeanVariance(); - for(DBID id : or.getScores().iterDBIDs()) { + for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) { + DBID id = iditer.getDBID(); double score = or.getScores().get(id); score = preScale(score); if(!Double.isNaN(score) && !Double.isInfinite(score)) { diff --git a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogStandardDeviationScaling.java b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogStandardDeviationScaling.java index 477fbdd2..4bc10feb 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogStandardDeviationScaling.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogStandardDeviationScaling.java @@ -24,6 +24,7 @@ package de.lmu.ifi.dbs.elki.utilities.scaling.outlier; */ import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.DBIDIter; import de.lmu.ifi.dbs.elki.math.MathUtil; import de.lmu.ifi.dbs.elki.math.MeanVariance; import de.lmu.ifi.dbs.elki.math.statistics.distribution.NormalDistribution; @@ -67,7 +68,8 @@ public class MinusLogStandardDeviationScaling extends StandardDeviationScaling { public void prepare(OutlierResult or) { if(fixedmean == null) { MeanVariance mv = new MeanVariance(); - for(DBID id : or.getScores().iterDBIDs()) { + for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) { + DBID id = iditer.getDBID(); double val = -Math.log(or.getScores().get(id)); if(!Double.isNaN(val) && !Double.isInfinite(val)) { mv.put(val); @@ -80,7 +82,8 @@ public class MinusLogStandardDeviationScaling extends StandardDeviationScaling { mean = fixedmean; double sqsum = 0; int cnt = 0; - for(DBID id : or.getScores().iterDBIDs()) { + for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) { + DBID id = iditer.getDBID(); double val = -Math.log(or.getScores().get(id)); if(!Double.isNaN(val) && !Double.isInfinite(val)) { sqsum += (val - mean) * (val - mean); diff --git a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MixtureModelOutlierScalingFunction.java b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MixtureModelOutlierScalingFunction.java index 26abb453..52a7f449 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MixtureModelOutlierScalingFunction.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MixtureModelOutlierScalingFunction.java @@ -25,6 +25,7 @@ package de.lmu.ifi.dbs.elki.utilities.scaling.outlier; import de.lmu.ifi.dbs.elki.database.ids.ArrayDBIDs; import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.DBIDIter; import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil; import de.lmu.ifi.dbs.elki.logging.Logging; import de.lmu.ifi.dbs.elki.math.MathUtil; @@ -120,7 +121,8 @@ public class MixtureModelOutlierScalingFunction implements OutlierScalingFunctio public void prepare(OutlierResult or) { // Initial parameters - are these defaults sounds? MeanVariance mv = new MeanVariance(); - for(DBID id : or.getScores().iterDBIDs()) { + for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) { + DBID id = iditer.getDBID(); double val = or.getScores().get(id); if(!Double.isNaN(val) && !Double.isInfinite(val)) { mv.put(val); diff --git a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MultiplicativeInverseScaling.java b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MultiplicativeInverseScaling.java index 9602b9b6..1ebf24bb 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MultiplicativeInverseScaling.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MultiplicativeInverseScaling.java @@ -24,6 +24,7 @@ package de.lmu.ifi.dbs.elki.utilities.scaling.outlier; */ import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.DBIDIter; import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult; import de.lmu.ifi.dbs.elki.utilities.documentation.Reference; @@ -78,7 +79,8 @@ public class MultiplicativeInverseScaling implements OutlierScalingFunction { */ private static double getScaleValue(OutlierResult or) { double max = Double.MIN_VALUE; - for(DBID id : or.getScores().iterDBIDs()) { + for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) { + DBID id = iditer.getDBID(); double val = or.getScores().get(id); double inv = Math.abs(1.0 / val); if(!Double.isInfinite(inv) && !Double.isNaN(inv)) { diff --git a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierGammaScaling.java b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierGammaScaling.java index a3eecdb0..9facaa11 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierGammaScaling.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierGammaScaling.java @@ -24,6 +24,7 @@ package de.lmu.ifi.dbs.elki.utilities.scaling.outlier; */ import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.DBIDIter; import de.lmu.ifi.dbs.elki.math.MeanVariance; import de.lmu.ifi.dbs.elki.math.statistics.distribution.GammaDistribution; import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult; @@ -100,7 +101,8 @@ public class OutlierGammaScaling implements OutlierScalingFunction { public void prepare(OutlierResult or) { meta = or.getOutlierMeta(); MeanVariance mv = new MeanVariance(); - for(DBID id : or.getScores().iterDBIDs()) { + for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) { + DBID id = iditer.getDBID(); double score = or.getScores().get(id); score = preScale(score); if(!Double.isNaN(score) && !Double.isInfinite(score)) { diff --git a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierLinearScaling.java b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierLinearScaling.java index 8f215ec3..e7222b96 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierLinearScaling.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierLinearScaling.java @@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.utilities.scaling.outlier; import java.util.ArrayList; import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.DBIDIter; import de.lmu.ifi.dbs.elki.math.DoubleMinMax; import de.lmu.ifi.dbs.elki.math.MeanVariance; import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult; @@ -39,7 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; /** - * Scaling that can map arbitrary values to a probability in the range of [0:1]. + * Scaling that can map arbitrary values to a value in the range of [0:1]. * * Transformation is done by linear mapping onto 0:1 using the minimum and * maximum values. @@ -53,10 +54,10 @@ public class OutlierLinearScaling implements OutlierScalingFunction { * Key: {@code -linearscale.min} * </p> */ - public static final OptionID MIN_ID = OptionID.getOrCreateOptionID("linearscale.min", "Fixed minimum to use in lienar scaling."); + public static final OptionID MIN_ID = OptionID.getOrCreateOptionID("linearscale.min", "Fixed minimum to use in linear scaling."); /** - * Parameter to specify the maximum value + * Parameter to specify the maximum value. * <p> * Key: {@code -linearscale.max} * </p> @@ -147,7 +148,8 @@ public class OutlierLinearScaling implements OutlierScalingFunction { MeanVariance mv = new MeanVariance(); DoubleMinMax mm = (max == null) ? new DoubleMinMax() : null; boolean skippedzeros = false; - for(DBID id : or.getScores().iterDBIDs()) { + for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) { + DBID id = iditer.getDBID(); double val = or.getScores().get(id); if(nozeros && val == 0.0) { skippedzeros = true; @@ -173,7 +175,8 @@ public class OutlierLinearScaling implements OutlierScalingFunction { if(min == null || max == null) { boolean skippedzeros = false; DoubleMinMax mm = new DoubleMinMax(); - for(DBID id : or.getScores().iterDBIDs()) { + for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) { + DBID id = iditer.getDBID(); double val = or.getScores().get(id); if(nozeros && val == 0.0) { skippedzeros = true; diff --git a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierMinusLogScaling.java b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierMinusLogScaling.java index 0839f231..09d84eb4 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierMinusLogScaling.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierMinusLogScaling.java @@ -24,6 +24,7 @@ package de.lmu.ifi.dbs.elki.utilities.scaling.outlier; */ import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.DBIDIter; import de.lmu.ifi.dbs.elki.math.DoubleMinMax; import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult; import de.lmu.ifi.dbs.elki.utilities.documentation.Reference; @@ -77,7 +78,8 @@ public class OutlierMinusLogScaling implements OutlierScalingFunction { @Override public void prepare(OutlierResult or) { DoubleMinMax mm = new DoubleMinMax(); - for(DBID id : or.getScores().iterDBIDs()) { + for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) { + DBID id = iditer.getDBID(); double val = or.getScores().get(id); if(!Double.isNaN(val) && !Double.isInfinite(val)) { mm.put(val); diff --git a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierSqrtScaling.java b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierSqrtScaling.java index d39fed97..3f564fd1 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierSqrtScaling.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierSqrtScaling.java @@ -24,6 +24,7 @@ package de.lmu.ifi.dbs.elki.utilities.scaling.outlier; */ import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.DBIDIter; import de.lmu.ifi.dbs.elki.math.DoubleMinMax; import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult; import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; @@ -97,7 +98,8 @@ public class OutlierSqrtScaling implements OutlierScalingFunction { public void prepare(OutlierResult or) { if(min == null || max == null) { DoubleMinMax mm = new DoubleMinMax(); - for(DBID id : or.getScores().iterDBIDs()) { + for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) { + DBID id = iditer.getDBID(); double val = or.getScores().get(id); if(!Double.isNaN(val) && !Double.isInfinite(val)) { mm.put(val); diff --git a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/RankingPseudoOutlierScaling.java b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/RankingPseudoOutlierScaling.java index 47eda6aa..be7bf766 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/RankingPseudoOutlierScaling.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/RankingPseudoOutlierScaling.java @@ -26,6 +26,7 @@ package de.lmu.ifi.dbs.elki.utilities.scaling.outlier; import java.util.Arrays; import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.DBIDIter; import de.lmu.ifi.dbs.elki.result.outlier.InvertedOutlierScoreMeta; import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult; import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException; @@ -56,7 +57,8 @@ public class RankingPseudoOutlierScaling implements OutlierScalingFunction { if(or.getOutlierMeta() instanceof InvertedOutlierScoreMeta) { inverted = true; } - for(DBID id : or.getScores().iterDBIDs()) { + for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) { + DBID id = iditer.getDBID(); scores[pos] = or.getScores().get(id); pos++; } diff --git a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SigmoidOutlierScalingFunction.java b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SigmoidOutlierScalingFunction.java index 31e78ec8..468079a3 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SigmoidOutlierScalingFunction.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SigmoidOutlierScalingFunction.java @@ -27,6 +27,7 @@ import java.util.BitSet; import de.lmu.ifi.dbs.elki.database.ids.ArrayDBIDs; import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.DBIDIter; import de.lmu.ifi.dbs.elki.database.ids.DBIDUtil; import de.lmu.ifi.dbs.elki.database.relation.Relation; import de.lmu.ifi.dbs.elki.logging.Logging; @@ -61,7 +62,8 @@ public class SigmoidOutlierScalingFunction implements OutlierScalingFunction { public void prepare(OutlierResult or) { // Initial parameters - are these defaults sounds? MeanVariance mv = new MeanVariance(); - for(DBID id : or.getScores().iterDBIDs()) { + for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) { + DBID id = iditer.getDBID(); double val = or.getScores().get(id); mv.put(val); } diff --git a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SqrtStandardDeviationScaling.java b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SqrtStandardDeviationScaling.java index 24f9e855..d3048b1d 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SqrtStandardDeviationScaling.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SqrtStandardDeviationScaling.java @@ -24,6 +24,7 @@ package de.lmu.ifi.dbs.elki.utilities.scaling.outlier; */ import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.DBIDIter; import de.lmu.ifi.dbs.elki.math.DoubleMinMax; import de.lmu.ifi.dbs.elki.math.MathUtil; import de.lmu.ifi.dbs.elki.math.MeanVariance; @@ -126,7 +127,8 @@ public class SqrtStandardDeviationScaling implements OutlierScalingFunction { public void prepare(OutlierResult or) { if(min == null) { DoubleMinMax mm = new DoubleMinMax(); - for(DBID id : or.getScores().iterDBIDs()) { + for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) { + DBID id = iditer.getDBID(); double val = or.getScores().get(id); if(!Double.isNaN(val) && !Double.isInfinite(val)) { mm.put(val); @@ -136,7 +138,8 @@ public class SqrtStandardDeviationScaling implements OutlierScalingFunction { } if(mean == null) { MeanVariance mv = new MeanVariance(); - for(DBID id : or.getScores().iterDBIDs()) { + for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) { + DBID id = iditer.getDBID(); double val = or.getScores().get(id); val = (val <= min) ? 0 : Math.sqrt(val - min); mv.put(val); @@ -147,7 +150,8 @@ public class SqrtStandardDeviationScaling implements OutlierScalingFunction { else { double sqsum = 0; int cnt = 0; - for(DBID id : or.getScores().iterDBIDs()) { + for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) { + DBID id = iditer.getDBID(); double val = or.getScores().get(id); val = (val <= min) ? 0 : Math.sqrt(val - min); sqsum += (val - mean) * (val - mean); diff --git a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/StandardDeviationScaling.java b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/StandardDeviationScaling.java index 6ef5c006..7d76a69f 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/StandardDeviationScaling.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/StandardDeviationScaling.java @@ -24,6 +24,7 @@ package de.lmu.ifi.dbs.elki.utilities.scaling.outlier; */ import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.DBIDIter; import de.lmu.ifi.dbs.elki.math.MathUtil; import de.lmu.ifi.dbs.elki.math.MeanVariance; import de.lmu.ifi.dbs.elki.math.statistics.distribution.NormalDistribution; @@ -115,7 +116,8 @@ public class StandardDeviationScaling implements OutlierScalingFunction { public void prepare(OutlierResult or) { if(fixedmean == null) { MeanVariance mv = new MeanVariance(); - for(DBID id : or.getScores().iterDBIDs()) { + for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) { + DBID id = iditer.getDBID(); double val = or.getScores().get(id); if(!Double.isNaN(val) && !Double.isInfinite(val)) { mv.put(val); @@ -131,7 +133,8 @@ public class StandardDeviationScaling implements OutlierScalingFunction { mean = fixedmean; double sqsum = 0; int cnt = 0; - for(DBID id : or.getScores().iterDBIDs()) { + for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) { + DBID id = iditer.getDBID(); double val = or.getScores().get(id); if(!Double.isNaN(val) && !Double.isInfinite(val)) { sqsum += (val - mean) * (val - mean); diff --git a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/TopKOutlierScaling.java b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/TopKOutlierScaling.java index 8044fce9..c922ab34 100644 --- a/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/TopKOutlierScaling.java +++ b/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/TopKOutlierScaling.java @@ -23,10 +23,9 @@ package de.lmu.ifi.dbs.elki.utilities.scaling.outlier; along with this program. If not, see <http://www.gnu.org/licenses/>. */ -import de.lmu.ifi.dbs.elki.database.ids.DBID; +import de.lmu.ifi.dbs.elki.database.ids.DBIDIter; import de.lmu.ifi.dbs.elki.logging.LoggingUtil; import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult; -import de.lmu.ifi.dbs.elki.utilities.iterator.IterableIterator; import de.lmu.ifi.dbs.elki.utilities.optionhandling.AbstractParameterizer; import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.GreaterConstraint; @@ -98,14 +97,9 @@ public class TopKOutlierScaling implements OutlierScalingFunction { if(k <= 0) { LoggingUtil.warning("No k configured for Top-k outlier scaling!"); } - IterableIterator<DBID> order = or.getOrdering().iter(or.getOrdering().getDBIDs()); - for(int i = 0; i < k; i++) { - // stop if no more results. - if(!order.hasNext()) { - return; - } - DBID cur = order.next(); - cutoff = or.getScores().get(cur); + DBIDIter order = or.getOrdering().iter(or.getOrdering().getDBIDs()).iter(); + for(int i = 0; i < k && order.valid(); i++, order.advance()) { + cutoff = or.getScores().get(order.getDBID()); } max = or.getOutlierMeta().getActualMaximum(); ground = or.getOutlierMeta().getTheoreticalBaseline(); |