summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/utilities/scaling
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/utilities/scaling')
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/HeDESNormalizationOutlierScaling.java4
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogGammaScaling.java7
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogStandardDeviationScaling.java7
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MixtureModelOutlierScalingFunction.java4
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MultiplicativeInverseScaling.java4
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierGammaScaling.java4
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierLinearScaling.java13
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierMinusLogScaling.java4
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierSqrtScaling.java4
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/RankingPseudoOutlierScaling.java4
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SigmoidOutlierScalingFunction.java4
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SqrtStandardDeviationScaling.java10
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/StandardDeviationScaling.java7
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/TopKOutlierScaling.java14
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();