summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier')
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/HeDESNormalizationOutlierScaling.java8
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogGammaScaling.java13
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MinusLogStandardDeviationScaling.java23
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MixtureModelOutlierScalingFunction.java20
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/MultiplicativeInverseScaling.java8
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierGammaScaling.java10
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierLinearScaling.java30
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierMinusLogScaling.java8
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/OutlierSqrtScaling.java18
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/RankingPseudoOutlierScaling.java12
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SigmoidOutlierScalingFunction.java17
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/SqrtStandardDeviationScaling.java32
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/StandardDeviationScaling.java30
-rw-r--r--src/de/lmu/ifi/dbs/elki/utilities/scaling/outlier/TopKOutlierScaling.java13
14 files changed, 123 insertions, 119 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 8a152cff..4bf86f06 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
@@ -23,8 +23,8 @@ 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.database.relation.Relation;
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;
@@ -62,9 +62,9 @@ public class HeDESNormalizationOutlierScaling implements OutlierScalingFunction
MeanVariance mv = new MeanVariance();
DoubleMinMax minmax = new DoubleMinMax();
- for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) {
- DBID id = iditer.getDBID();
- double val = or.getScores().get(id);
+ Relation<Double> scores = or.getScores();
+ for(DBIDIter id = scores.iterDBIDs(); id.valid(); id.advance()) {
+ double val = scores.get(id);
if(!Double.isNaN(val) && !Double.isInfinite(val)) {
mv.put(val);
minmax.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 860c77d6..f7cf0df0 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
@@ -23,8 +23,8 @@ 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.database.relation.Relation;
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;
@@ -68,9 +68,9 @@ public class MinusLogGammaScaling extends OutlierGammaScaling {
meta = or.getOutlierMeta();
// Determine Minimum and Maximum.
DoubleMinMax mm = new DoubleMinMax();
- for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) {
- DBID id = iditer.getDBID();
- double score = or.getScores().get(id);
+ Relation<Double> scores = or.getScores();
+ for(DBIDIter id = scores.iterDBIDs(); id.valid(); id.advance()) {
+ double score = scores.get(id);
if(!Double.isNaN(score) && !Double.isInfinite(score)) {
mm.put(score);
}
@@ -79,9 +79,8 @@ public class MinusLogGammaScaling extends OutlierGammaScaling {
mlogmax = -Math.log(mm.getMin() / max);
// with the prescaling, do Gamma Scaling.
MeanVariance mv = new MeanVariance();
- for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) {
- DBID id = iditer.getDBID();
- double score = or.getScores().get(id);
+ for(DBIDIter id = scores.iterDBIDs(); id.valid(); id.advance()) {
+ double score = scores.get(id);
score = preScale(score);
if(!Double.isNaN(score) && !Double.isInfinite(score)) {
mv.put(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 4bc10feb..e34355a1 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
@@ -23,9 +23,10 @@ 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.database.relation.Relation;
import de.lmu.ifi.dbs.elki.math.MathUtil;
+import de.lmu.ifi.dbs.elki.math.Mean;
import de.lmu.ifi.dbs.elki.math.MeanVariance;
import de.lmu.ifi.dbs.elki.math.statistics.distribution.NormalDistribution;
import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult;
@@ -68,9 +69,9 @@ public class MinusLogStandardDeviationScaling extends StandardDeviationScaling {
public void prepare(OutlierResult or) {
if(fixedmean == null) {
MeanVariance mv = new MeanVariance();
- for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) {
- DBID id = iditer.getDBID();
- double val = -Math.log(or.getScores().get(id));
+ Relation<Double> scores = or.getScores();
+ for(DBIDIter id = scores.iterDBIDs(); id.valid(); id.advance()) {
+ double val = -Math.log(scores.get(id));
if(!Double.isNaN(val) && !Double.isInfinite(val)) {
mv.put(val);
}
@@ -80,17 +81,15 @@ public class MinusLogStandardDeviationScaling extends StandardDeviationScaling {
}
else {
mean = fixedmean;
- double sqsum = 0;
- int cnt = 0;
- for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) {
- DBID id = iditer.getDBID();
- double val = -Math.log(or.getScores().get(id));
+ Mean sqsum = new Mean();
+ Relation<Double> scores = or.getScores();
+ for(DBIDIter id = scores.iterDBIDs(); id.valid(); id.advance()) {
+ double val = -Math.log(scores.get(id));
if(!Double.isNaN(val) && !Double.isInfinite(val)) {
- sqsum += (val - mean) * (val - mean);
- cnt += 1;
+ sqsum.put((val - mean) * (val - mean));
}
}
- factor = lambda * Math.sqrt(sqsum / cnt) * MathUtil.SQRT2;
+ factor = lambda * Math.sqrt(sqsum.getMean()) * MathUtil.SQRT2;
}
}
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 52a7f449..e026b211 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
@@ -24,9 +24,9 @@ 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.database.relation.Relation;
import de.lmu.ifi.dbs.elki.logging.Logging;
import de.lmu.ifi.dbs.elki.math.MathUtil;
import de.lmu.ifi.dbs.elki.math.MeanVariance;
@@ -44,7 +44,7 @@ public class MixtureModelOutlierScalingFunction implements OutlierScalingFunctio
/**
* The logger for this class.
*/
- private static final Logging logger = Logging.getLogger(MixtureModelOutlierScalingFunction.class);
+ private static final Logging LOG = Logging.getLogger(MixtureModelOutlierScalingFunction.class);
/**
* Parameter mu of the gaussian distribution (outliers)
@@ -69,7 +69,7 @@ public class MixtureModelOutlierScalingFunction implements OutlierScalingFunctio
/**
* Precomputed static value
*/
- public final static double ONEBYSQRT2PI = 1.0 / MathUtil.SQRTTWOPI;
+ public static final double ONEBYSQRT2PI = 1.0 / MathUtil.SQRTTWOPI;
/**
* Convergence parameter
@@ -121,14 +121,14 @@ public class MixtureModelOutlierScalingFunction implements OutlierScalingFunctio
public void prepare(OutlierResult or) {
// Initial parameters - are these defaults sounds?
MeanVariance mv = new MeanVariance();
- for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) {
- DBID id = iditer.getDBID();
- double val = or.getScores().get(id);
+ Relation<Double> scores = or.getScores();
+ for(DBIDIter id = scores.iterDBIDs(); id.valid(); id.advance()) {
+ double val = scores.get(id);
if(!Double.isNaN(val) && !Double.isInfinite(val)) {
mv.put(val);
}
}
- double curMu = mv.getMean() * 2;
+ double curMu = mv.getMean() * 2.;
if(curMu == 0) {
curMu = Double.MIN_NORMAL;
}
@@ -159,7 +159,7 @@ public class MixtureModelOutlierScalingFunction implements OutlierScalingFunctio
sqsum += ti * val * val; // (val - curMu) * (val - curMu);
}
if(tisum <= 0.0 || wsum <= 0.0) {
- logger.warning("MixtureModel Outlier Scaling converged to extreme.");
+ LOG.warning("MixtureModel Outlier Scaling converged to extreme.");
break;
}
double newMu = wsum / tisum;
@@ -186,7 +186,7 @@ public class MixtureModelOutlierScalingFunction implements OutlierScalingFunctio
}
}
if(newSigma <= 0.0 || newAlpha <= 0.0) {
- logger.warning("MixtureModel Outlier Scaling converged to extreme.");
+ LOG.warning("MixtureModel Outlier Scaling converged to extreme.");
break;
}
// logger.debugFine("iter #"+iter+" mu = " + newMu + " sigma = " +
@@ -198,7 +198,7 @@ public class MixtureModelOutlierScalingFunction implements OutlierScalingFunctio
iter++;
if(iter > 100) {
- logger.warning("Max iterations met in mixture model fitting.");
+ LOG.warning("Max iterations met in mixture model fitting.");
break;
}
}
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 1ebf24bb..298a5853 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
@@ -23,8 +23,8 @@ 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.database.relation.Relation;
import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult;
import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
@@ -79,9 +79,9 @@ public class MultiplicativeInverseScaling implements OutlierScalingFunction {
*/
private static double getScaleValue(OutlierResult or) {
double max = Double.MIN_VALUE;
- for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) {
- DBID id = iditer.getDBID();
- double val = or.getScores().get(id);
+ Relation<Double> scores = or.getScores();
+ for(DBIDIter id = scores.iterDBIDs(); id.valid(); id.advance()) {
+ double val = scores.get(id);
double inv = Math.abs(1.0 / val);
if(!Double.isInfinite(inv) && !Double.isNaN(inv)) {
max = Math.max(max, 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 9facaa11..07e58679 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
@@ -23,8 +23,8 @@ 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.database.relation.Relation;
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;
@@ -50,7 +50,7 @@ public class OutlierGammaScaling implements OutlierScalingFunction {
* -gammascale.normalize
* </pre>
*/
- public static final OptionID NORMALIZE_ID = OptionID.getOrCreateOptionID("gammascale.normalize", "Regularize scores before using Gamma scaling.");
+ public static final OptionID NORMALIZE_ID = new OptionID("gammascale.normalize", "Regularize scores before using Gamma scaling.");
/**
* Gamma parameter k
@@ -101,9 +101,9 @@ public class OutlierGammaScaling implements OutlierScalingFunction {
public void prepare(OutlierResult or) {
meta = or.getOutlierMeta();
MeanVariance mv = new MeanVariance();
- for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) {
- DBID id = iditer.getDBID();
- double score = or.getScores().get(id);
+ Relation<Double> scores = or.getScores();
+ for(DBIDIter id = scores.iterDBIDs(); id.valid(); id.advance()) {
+ double score = scores.get(id);
score = preScale(score);
if(!Double.isNaN(score) && !Double.isInfinite(score)) {
mv.put(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 e7222b96..8f008176 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
@@ -25,8 +25,8 @@ 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.database.relation.Relation;
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;
@@ -54,7 +54,7 @@ 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 linear scaling.");
+ public static final OptionID MIN_ID = new OptionID("linearscale.min", "Fixed minimum to use in linear scaling.");
/**
* Parameter to specify the maximum value.
@@ -62,7 +62,7 @@ public class OutlierLinearScaling implements OutlierScalingFunction {
* Key: {@code -linearscale.max}
* </p>
*/
- public static final OptionID MAX_ID = OptionID.getOrCreateOptionID("linearscale.max", "Fixed maximum to use in linear scaling.");
+ public static final OptionID MAX_ID = new OptionID("linearscale.max", "Fixed maximum to use in linear scaling.");
/**
* Flag to use the mean as minimum for scaling.
@@ -71,7 +71,7 @@ public class OutlierLinearScaling implements OutlierScalingFunction {
* Key: {@code -linearscale.usemean}
* </p>
*/
- public static final OptionID MEAN_ID = OptionID.getOrCreateOptionID("linearscale.usemean", "Use the mean as minimum for scaling.");
+ public static final OptionID MEAN_ID = new OptionID("linearscale.usemean", "Use the mean as minimum for scaling.");
/**
* Flag to use ignore zeros when computing the min and max.
@@ -80,7 +80,7 @@ public class OutlierLinearScaling implements OutlierScalingFunction {
* Key: {@code -linearscale.ignorezero}
* </p>
*/
- public static final OptionID NOZEROS_ID = OptionID.getOrCreateOptionID("linearscale.ignorezero", "Ignore zero entries when computing the minimum and maximum.");
+ public static final OptionID NOZEROS_ID = new OptionID("linearscale.ignorezero", "Ignore zero entries when computing the minimum and maximum.");
/**
* Field storing the Minimum to use
@@ -148,9 +148,9 @@ public class OutlierLinearScaling implements OutlierScalingFunction {
MeanVariance mv = new MeanVariance();
DoubleMinMax mm = (max == null) ? new DoubleMinMax() : null;
boolean skippedzeros = false;
- for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) {
- DBID id = iditer.getDBID();
- double val = or.getScores().get(id);
+ Relation<Double> scores = or.getScores();
+ for(DBIDIter id = scores.iterDBIDs(); id.valid(); id.advance()) {
+ double val = scores.get(id);
if(nozeros && val == 0.0) {
skippedzeros = true;
continue;
@@ -175,9 +175,9 @@ public class OutlierLinearScaling implements OutlierScalingFunction {
if(min == null || max == null) {
boolean skippedzeros = false;
DoubleMinMax mm = new DoubleMinMax();
- for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) {
- DBID id = iditer.getDBID();
- double val = or.getScores().get(id);
+ Relation<Double> scores = or.getScores();
+ for(DBIDIter id = scores.iterDBIDs(); id.valid(); id.advance()) {
+ double val = scores.get(id);
if(nozeros && val == 0.0) {
skippedzeros = true;
continue;
@@ -239,12 +239,14 @@ public class OutlierLinearScaling implements OutlierScalingFunction {
@Override
protected void makeOptions(Parameterization config) {
super.makeOptions(config);
- DoubleParameter minP = new DoubleParameter(MIN_ID, true);
+ DoubleParameter minP = new DoubleParameter(MIN_ID);
+ minP.setOptional(true);
if(config.grab(minP)) {
min = minP.getValue();
}
- DoubleParameter maxP = new DoubleParameter(MAX_ID, true);
+ DoubleParameter maxP = new DoubleParameter(MAX_ID);
+ maxP.setOptional(true);
if(config.grab(maxP)) {
max = maxP.getValue();
}
@@ -260,7 +262,7 @@ public class OutlierLinearScaling implements OutlierScalingFunction {
}
// Use-Mean and Minimum value must not be set at the same time!
- ArrayList<Parameter<?, ?>> minmean = new ArrayList<Parameter<?, ?>>();
+ ArrayList<Parameter<?>> minmean = new ArrayList<Parameter<?>>();
minmean.add(minP);
minmean.add(meanF);
GlobalParameterConstraint gpc = new OnlyOneIsAllowedToBeSetGlobalConstraint(minmean);
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 09d84eb4..45c6928b 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
@@ -23,8 +23,8 @@ 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.database.relation.Relation;
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;
@@ -78,9 +78,9 @@ public class OutlierMinusLogScaling implements OutlierScalingFunction {
@Override
public void prepare(OutlierResult or) {
DoubleMinMax mm = new DoubleMinMax();
- for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) {
- DBID id = iditer.getDBID();
- double val = or.getScores().get(id);
+ Relation<Double> scores = or.getScores();
+ for(DBIDIter id = scores.iterDBIDs(); id.valid(); id.advance()) {
+ double val = scores.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 3f564fd1..41a4d721 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
@@ -23,8 +23,8 @@ 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.database.relation.Relation;
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;
@@ -48,7 +48,7 @@ public class OutlierSqrtScaling implements OutlierScalingFunction {
* Key: {@code -sqrtscale.min}
* </p>
*/
- public static final OptionID MIN_ID = OptionID.getOrCreateOptionID("sqrtscale.min", "Fixed minimum to use in sqrt scaling.");
+ public static final OptionID MIN_ID = new OptionID("sqrtscale.min", "Fixed minimum to use in sqrt scaling.");
/**
* Parameter to specify the fixed maximum to use.
@@ -56,7 +56,7 @@ public class OutlierSqrtScaling implements OutlierScalingFunction {
* Key: {@code -sqrtscale.max}
* </p>
*/
- public static final OptionID MAX_ID = OptionID.getOrCreateOptionID("sqrtscale.max", "Fixed maximum to use in sqrt scaling.");
+ public static final OptionID MAX_ID = new OptionID("sqrtscale.max", "Fixed maximum to use in sqrt scaling.");
/**
* Field storing the minimum value
@@ -98,9 +98,9 @@ public class OutlierSqrtScaling implements OutlierScalingFunction {
public void prepare(OutlierResult or) {
if(min == null || max == null) {
DoubleMinMax mm = new DoubleMinMax();
- for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) {
- DBID id = iditer.getDBID();
- double val = or.getScores().get(id);
+ Relation<Double> scores = or.getScores();
+ for(DBIDIter id = scores.iterDBIDs(); id.valid(); id.advance()) {
+ double val = scores.get(id);
if(!Double.isNaN(val) && !Double.isInfinite(val)) {
mm.put(val);
}
@@ -140,11 +140,13 @@ public class OutlierSqrtScaling implements OutlierScalingFunction {
@Override
protected void makeOptions(Parameterization config) {
super.makeOptions(config);
- DoubleParameter minP = new DoubleParameter(MIN_ID, true);
+ DoubleParameter minP = new DoubleParameter(MIN_ID);
+ minP.setOptional(true);
if(config.grab(minP)) {
min = minP.getValue();
}
- DoubleParameter maxP = new DoubleParameter(MAX_ID, true);
+ DoubleParameter maxP = new DoubleParameter(MAX_ID);
+ maxP.setOptional(true);
if(config.grab(maxP)) {
max = maxP.getValue();
}
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 be7bf766..91f66587 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
@@ -25,8 +25,8 @@ 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.database.relation.Relation;
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;
@@ -52,17 +52,17 @@ public class RankingPseudoOutlierScaling implements OutlierScalingFunction {
@Override
public void prepare(OutlierResult or) {
// collect all outlier scores
- scores = new double[or.getScores().size()];
+ Relation<Double> oscores = or.getScores();
+ scores = new double[oscores.size()];
int pos = 0;
if(or.getOutlierMeta() instanceof InvertedOutlierScoreMeta) {
inverted = true;
}
- for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) {
- DBID id = iditer.getDBID();
- scores[pos] = or.getScores().get(id);
+ for(DBIDIter iditer = oscores.iterDBIDs(); iditer.valid(); iditer.advance()) {
+ scores[pos] = oscores.get(iditer);
pos++;
}
- if(pos != or.getScores().size()) {
+ if(pos != oscores.size()) {
throw new AbortException("Database size is incorrect!");
}
// sort them
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 468079a3..16115e92 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
@@ -26,7 +26,6 @@ package de.lmu.ifi.dbs.elki.utilities.scaling.outlier;
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;
@@ -46,7 +45,7 @@ public class SigmoidOutlierScalingFunction implements OutlierScalingFunction {
/**
* The logger for this class.
*/
- private static final Logging logger = Logging.getLogger(SigmoidOutlierScalingFunction.class);
+ private static final Logging LOG = Logging.getLogger(SigmoidOutlierScalingFunction.class);
/**
* Sigmoid parameter
@@ -62,9 +61,9 @@ public class SigmoidOutlierScalingFunction implements OutlierScalingFunction {
public void prepare(OutlierResult or) {
// Initial parameters - are these defaults sounds?
MeanVariance mv = new MeanVariance();
- for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) {
- DBID id = iditer.getDBID();
- double val = or.getScores().get(id);
+ Relation<Double> scores = or.getScores();
+ for(DBIDIter id = scores.iterDBIDs(); id.valid(); id.advance()) {
+ double val = scores.get(id);
mv.put(val);
}
double a = 1.0;
@@ -109,13 +108,13 @@ public class SigmoidOutlierScalingFunction implements OutlierScalingFunction {
iter++;
if(iter > 100) {
- logger.warning("Max iterations met in sigmoid fitting.");
+ LOG.warning("Max iterations met in sigmoid fitting.");
break;
}
}
Afinal = a;
Bfinal = b;
- logger.debugFine("A = "+Afinal+" B = "+Bfinal);
+ LOG.debugFine("A = "+Afinal+" B = "+Bfinal);
}
/**
@@ -226,12 +225,12 @@ public class SigmoidOutlierScalingFunction implements OutlierScalingFunction {
stepsize /= 2.0;
}
if(stepsize < minstep) {
- logger.debug("Minstep hit.");
+ LOG.debug("Minstep hit.");
break;
}
}
if(it + 1 >= maxiter) {
- logger.debug("Maximum iterations hit.");
+ LOG.debug("Maximum iterations hit.");
break;
}
}
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 d3048b1d..6c38c781 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
@@ -23,8 +23,8 @@ 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.database.relation.Relation;
import de.lmu.ifi.dbs.elki.math.DoubleMinMax;
import de.lmu.ifi.dbs.elki.math.MathUtil;
import de.lmu.ifi.dbs.elki.math.MeanVariance;
@@ -58,7 +58,7 @@ public class SqrtStandardDeviationScaling implements OutlierScalingFunction {
* Key: {@code -sqrtstddevscale.min}
* </p>
*/
- public static final OptionID MIN_ID = OptionID.getOrCreateOptionID("sqrtstddevscale.min", "Fixed minimum to use in sqrt scaling.");
+ public static final OptionID MIN_ID = new OptionID("sqrtstddevscale.min", "Fixed minimum to use in sqrt scaling.");
/**
* Parameter to specify a fixed mean to use.
@@ -66,7 +66,7 @@ public class SqrtStandardDeviationScaling implements OutlierScalingFunction {
* Key: {@code -sqrtstddevscale.mean}
* </p>
*/
- public static final OptionID MEAN_ID = OptionID.getOrCreateOptionID("sqrtstddevscale.mean", "Fixed mean to use in standard deviation scaling.");
+ public static final OptionID MEAN_ID = new OptionID("sqrtstddevscale.mean", "Fixed mean to use in standard deviation scaling.");
/**
* Parameter to specify the lambda value
@@ -74,7 +74,7 @@ public class SqrtStandardDeviationScaling implements OutlierScalingFunction {
* Key: {@code -sqrtstddevscale.lambda}
* </p>
*/
- public static final OptionID LAMBDA_ID = OptionID.getOrCreateOptionID("sqrtstddevscale.lambda", "Significance level to use for error function.");
+ public static final OptionID LAMBDA_ID = new OptionID("sqrtstddevscale.lambda", "Significance level to use for error function.");
/**
* Field storing the lambda value
@@ -127,9 +127,9 @@ public class SqrtStandardDeviationScaling implements OutlierScalingFunction {
public void prepare(OutlierResult or) {
if(min == null) {
DoubleMinMax mm = new DoubleMinMax();
- for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) {
- DBID id = iditer.getDBID();
- double val = or.getScores().get(id);
+ Relation<Double> scores = or.getScores();
+ for(DBIDIter id = scores.iterDBIDs(); id.valid(); id.advance()) {
+ double val = scores.get(id);
if(!Double.isNaN(val) && !Double.isInfinite(val)) {
mm.put(val);
}
@@ -138,9 +138,9 @@ public class SqrtStandardDeviationScaling implements OutlierScalingFunction {
}
if(mean == null) {
MeanVariance mv = new MeanVariance();
- for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) {
- DBID id = iditer.getDBID();
- double val = or.getScores().get(id);
+ Relation<Double> scores = or.getScores();
+ for(DBIDIter id = scores.iterDBIDs(); id.valid(); id.advance()) {
+ double val = scores.get(id);
val = (val <= min) ? 0 : Math.sqrt(val - min);
mv.put(val);
}
@@ -150,9 +150,9 @@ public class SqrtStandardDeviationScaling implements OutlierScalingFunction {
else {
double sqsum = 0;
int cnt = 0;
- for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) {
- DBID id = iditer.getDBID();
- double val = or.getScores().get(id);
+ Relation<Double> scores = or.getScores();
+ for(DBIDIter id = scores.iterDBIDs(); id.valid(); id.advance()) {
+ double val = scores.get(id);
val = (val <= min) ? 0 : Math.sqrt(val - min);
sqsum += (val - mean) * (val - mean);
cnt += 1;
@@ -188,12 +188,14 @@ public class SqrtStandardDeviationScaling implements OutlierScalingFunction {
@Override
protected void makeOptions(Parameterization config) {
super.makeOptions(config);
- DoubleParameter minP = new DoubleParameter(MIN_ID, true);
+ DoubleParameter minP = new DoubleParameter(MIN_ID);
+ minP.setOptional(true);
if(config.grab(minP)) {
min = minP.getValue();
}
- DoubleParameter meanP = new DoubleParameter(MEAN_ID, true);
+ DoubleParameter meanP = new DoubleParameter(MEAN_ID);
+ meanP.setOptional(true);
if(config.grab(meanP)) {
mean = meanP.getValue();
}
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 7d76a69f..c8ec0905 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
@@ -23,9 +23,10 @@ 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.database.relation.Relation;
import de.lmu.ifi.dbs.elki.math.MathUtil;
+import de.lmu.ifi.dbs.elki.math.Mean;
import de.lmu.ifi.dbs.elki.math.MeanVariance;
import de.lmu.ifi.dbs.elki.math.statistics.distribution.NormalDistribution;
import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult;
@@ -54,7 +55,7 @@ public class StandardDeviationScaling implements OutlierScalingFunction {
* Key: {@code -stddevscale.mean}
* </p>
*/
- public static final OptionID MEAN_ID = OptionID.getOrCreateOptionID("stddevscale.mean", "Fixed mean to use in standard deviation scaling.");
+ public static final OptionID MEAN_ID = new OptionID("stddevscale.mean", "Fixed mean to use in standard deviation scaling.");
/**
* Parameter to specify the lambda value
@@ -62,7 +63,7 @@ public class StandardDeviationScaling implements OutlierScalingFunction {
* Key: {@code -stddevscale.lambda}
* </p>
*/
- public static final OptionID LAMBDA_ID = OptionID.getOrCreateOptionID("stddevscale.lambda", "Significance level to use for error function.");
+ public static final OptionID LAMBDA_ID = new OptionID("stddevscale.lambda", "Significance level to use for error function.");
/**
* Field storing the fixed mean to use
@@ -116,9 +117,9 @@ public class StandardDeviationScaling implements OutlierScalingFunction {
public void prepare(OutlierResult or) {
if(fixedmean == null) {
MeanVariance mv = new MeanVariance();
- for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) {
- DBID id = iditer.getDBID();
- double val = or.getScores().get(id);
+ Relation<Double> scores = or.getScores();
+ for(DBIDIter id = scores.iterDBIDs(); id.valid(); id.advance()) {
+ double val = scores.get(id);
if(!Double.isNaN(val) && !Double.isInfinite(val)) {
mv.put(val);
}
@@ -131,17 +132,15 @@ public class StandardDeviationScaling implements OutlierScalingFunction {
}
else {
mean = fixedmean;
- double sqsum = 0;
- int cnt = 0;
- for(DBIDIter iditer = or.getScores().iterDBIDs(); iditer.valid(); iditer.advance()) {
- DBID id = iditer.getDBID();
- double val = or.getScores().get(id);
+ Mean sqsum = new Mean();
+ Relation<Double> scores = or.getScores();
+ for(DBIDIter id = scores.iterDBIDs(); id.valid(); id.advance()) {
+ double val = scores.get(id);
if(!Double.isNaN(val) && !Double.isInfinite(val)) {
- sqsum += (val - mean) * (val - mean);
- cnt += 1;
+ sqsum.put((val - mean) * (val - mean));
}
}
- factor = lambda * Math.sqrt(sqsum / cnt) * MathUtil.SQRT2;
+ factor = lambda * Math.sqrt(sqsum.getMean()) * MathUtil.SQRT2;
if (factor == 0.0) {
factor = Double.MIN_NORMAL;
}
@@ -173,7 +172,8 @@ public class StandardDeviationScaling implements OutlierScalingFunction {
@Override
protected void makeOptions(Parameterization config) {
super.makeOptions(config);
- DoubleParameter meanP = new DoubleParameter(MEAN_ID, true);
+ DoubleParameter meanP = new DoubleParameter(MEAN_ID);
+ meanP.setOptional(true);
if(config.grab(meanP)) {
fixedmean = meanP.getValue();
}
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 c922ab34..f8609f3b 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
@@ -45,7 +45,7 @@ public class TopKOutlierScaling implements OutlierScalingFunction {
* Key: {@code -topk.k}
* </p>
*/
- public static final OptionID K_ID = OptionID.getOrCreateOptionID("topk.k", "Number of outliers to keep.");
+ public static final OptionID K_ID = new OptionID("topk.k", "Number of outliers to keep.");
/**
* Parameter to specify the lambda value
@@ -53,7 +53,7 @@ public class TopKOutlierScaling implements OutlierScalingFunction {
* Key: {@code -topk.binary}
* </p>
*/
- public static final OptionID BINARY_ID = OptionID.getOrCreateOptionID("topk.binary", "Make the top k a binary scaling.");
+ public static final OptionID BINARY_ID = new OptionID("topk.binary", "Make the top k a binary scaling.");
/**
* Number of outliers to keep.
@@ -99,7 +99,7 @@ public class TopKOutlierScaling implements OutlierScalingFunction {
}
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());
+ cutoff = or.getScores().get(order);
}
max = or.getOutlierMeta().getActualMaximum();
ground = or.getOutlierMeta().getTheoreticalBaseline();
@@ -165,14 +165,15 @@ public class TopKOutlierScaling implements OutlierScalingFunction {
@Override
protected void makeOptions(Parameterization config) {
super.makeOptions(config);
- IntParameter kP = new IntParameter(K_ID, new GreaterConstraint(1));
+ IntParameter kP = new IntParameter(K_ID);
+ kP.addConstraint(new GreaterConstraint(1));
if(config.grab(kP)) {
- k = kP.getValue();
+ k = kP.intValue();
}
Flag binaryF = new Flag(BINARY_ID);
if(config.grab(binaryF)) {
- binary = binaryF.getValue();
+ binary = binaryF.isTrue();
}
}