~ubuntu-branches/ubuntu/vivid/elki/vivid

« back to all changes in this revision

Viewing changes to src/de/lmu/ifi/dbs/elki/algorithm/outlier/lof/LDOF.java

  • Committer: Package Import Robot
  • Author(s): Erich Schubert
  • Date: 2014-01-22 16:23:20 UTC
  • mfrom: (1.1.8)
  • Revision ID: package-import@ubuntu.com-20140122162320-dtqtgcdiki8t9unc
Tags: 0.6.0-1
* New upstream final.
* 3DPC extension is not included, but may be uploaded as a separate
  package when there is actual need (it is a demo software, not meant
  for use outside of research, so just get the source code!)
* Upgrade to policy 3.9.5.0 (no changes)

Show diffs side-by-side

added added

removed removed

Lines of Context:
53
53
import de.lmu.ifi.dbs.elki.utilities.documentation.Reference;
54
54
import de.lmu.ifi.dbs.elki.utilities.documentation.Title;
55
55
import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID;
56
 
import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.GreaterConstraint;
 
56
import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.CommonConstraints;
57
57
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization;
58
58
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.IntParameter;
59
59
 
80
80
@Title("LDOF: Local Distance-Based Outlier Factor")
81
81
@Description("Local outlier detection appraoch suitable for scattered data by averaging the kNN distance over all k nearest neighbors")
82
82
@Reference(authors = "K. Zhang, M. Hutter, H. Jin", title = "A New Local Distance-Based Outlier Detection Approach for Scattered Real-World Data", booktitle = "Proc. 13th Pacific-Asia Conference on Advances in Knowledge Discovery and Data Mining (PAKDD 2009), Bangkok, Thailand, 2009", url = "http://dx.doi.org/10.1007/978-3-642-01307-2_84")
83
 
@Alias({"de.lmu.ifi.dbs.elki.algorithm.outlier.LDOF"})
 
83
@Alias({ "de.lmu.ifi.dbs.elki.algorithm.outlier.LDOF" })
84
84
public class LDOF<O, D extends NumberDistance<D, ?>> extends AbstractDistanceBasedAlgorithm<O, D, OutlierResult> implements OutlierAlgorithm {
85
85
  /**
86
86
   * The logger for this class.
138
138
    FiniteProgress progressLDOFs = LOG.isVerbose() ? new FiniteProgress("LDOF_SCORE for objects", relation.size(), LOG) : null;
139
139
 
140
140
    Mean dxp = new Mean(), Dxp = new Mean();
141
 
    for(DBIDIter iditer = relation.iterDBIDs(); iditer.valid(); iditer.advance()) {
 
141
    for(DBIDIter iditer = relation.iterDBIDs(); iditer.valid(); iditer.advance()) {
142
142
      KNNList<D> neighbors = knnQuery.getKNNForDBID(iditer, k);
143
143
      // skip the point itself
144
 
      dxp.reset(); Dxp.reset();
 
144
      dxp.reset();
 
145
      Dxp.reset();
145
146
      // TODO: optimize for double distances
146
 
      for (DistanceDBIDListIter<D> neighbor1 = neighbors.iter(); neighbor1.valid(); neighbor1.advance()) {
 
147
      for(DistanceDBIDListIter<D> neighbor1 = neighbors.iter(); neighbor1.valid(); neighbor1.advance()) {
147
148
        if(!DBIDUtil.equal(neighbor1, iditer)) {
148
149
          dxp.put(neighbor1.getDistance().doubleValue());
149
 
          for (DistanceDBIDListIter<D> neighbor2 = neighbors.iter(); neighbor2.valid(); neighbor2.advance()) {
 
150
          for(DistanceDBIDListIter<D> neighbor2 = neighbors.iter(); neighbor2.valid(); neighbor2.advance()) {
150
151
            if(!DBIDUtil.equal(neighbor1, neighbor2) && !DBIDUtil.equal(neighbor2, iditer)) {
151
152
              Dxp.put(distFunc.distance(neighbor1, neighbor2).doubleValue());
152
153
            }
199
200
    protected void makeOptions(Parameterization config) {
200
201
      super.makeOptions(config);
201
202
      final IntParameter kP = new IntParameter(K_ID);
202
 
      kP.addConstraint(new GreaterConstraint(1));
 
203
      kP.addConstraint(CommonConstraints.GREATER_THAN_ONE_INT);
203
204
      if(config.grab(kP)) {
204
205
        k = kP.getValue();
205
206
      }