O
- the type of DatabaseObject the algorithm is applied on@Title(value="INFLO: Influenced Outlierness Factor") @Description(value="Ranking Outliers Using Symmetric Neigborhood Relationship") @Reference(authors="W. Jin, A. Tung, J. Han, W. Wang", title="Ranking outliers using symmetric neighborhood relationship", booktitle="Proc. 10th Pacific-Asia conference on Advances in Knowledge Discovery and Data Mining", url="https://doi.org/10.1007/11731139_68", bibkey="DBLP:conf/pakdd/JinTHW06") @Alias(value="de.lmu.ifi.dbs.elki.algorithm.outlier.INFLO") public class INFLO<O> extends AbstractDistanceBasedAlgorithm<O,OutlierResult> implements OutlierAlgorithm
Reference:
W. Jin, A. Tung, J. Han, W. Wang
Ranking outliers using symmetric neighborhood relationship
Proc. 10th Pacific-Asia conference on Advances in Knowledge Discovery and
Data Mining, 2006.
There is an error in the two-way search algorithm proposed in the article above. It does not correctly compute the RNN, but it will find only those RNN that are in the kNN, making the entire RNN computation redundant, as it uses the kNN + RNN later anyway.
Given the errors in the INFLO paper, as of ELKI 0.8, we do:
Modifier and Type | Class and Description |
---|---|
static class |
INFLO.Parameterizer<O>
Parameterization class.
|
Modifier and Type | Field and Description |
---|---|
private int |
kplus1
Number of neighbors to use.
|
private static Logging |
LOG
The logger for this class.
|
private double |
m
Pruning threshold m.
|
ALGORITHM_ID
DISTANCE_FUNCTION_ID
Constructor and Description |
---|
INFLO(DistanceFunction<? super O> distanceFunction,
double m,
int k)
Constructor with parameters.
|
Modifier and Type | Method and Description |
---|---|
protected void |
computeINFLO(Relation<O> relation,
ModifiableDBIDs pruned,
KNNQuery<O> knnq,
WritableDataStore<ModifiableDBIDs> rNNminuskNNs,
WritableDoubleDataStore inflos,
DoubleMinMax inflominmax)
Compute the final INFLO scores.
|
private void |
computeNeighborhoods(Relation<O> relation,
DataStore<SetDBIDs> knns,
ModifiableDBIDs pruned,
WritableDataStore<ModifiableDBIDs> rNNminuskNNs)
Compute the reverse kNN minus the kNN.
|
TypeInformation[] |
getInputTypeRestriction()
Get the input type restriction used for negotiating the data query.
|
protected Logging |
getLogger()
Get the (STATIC) logger for this class.
|
OutlierResult |
run(Database database,
Relation<O> relation)
Run the algorithm
|
getDistanceFunction
run
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
run
private static final Logging LOG
private double m
private int kplus1
public INFLO(DistanceFunction<? super O> distanceFunction, double m, int k)
distanceFunction
- Distance function in usem
- m Parameterk
- k Parameterpublic OutlierResult run(Database database, Relation<O> relation)
database
- Database to processrelation
- Relation to processprivate void computeNeighborhoods(Relation<O> relation, DataStore<SetDBIDs> knns, ModifiableDBIDs pruned, WritableDataStore<ModifiableDBIDs> rNNminuskNNs)
This is based on algorithm 2 (two-way search) from the INFLO paper, but unfortunately this algorithm does not compute the RkNN correctly, but rather \( RkNN \cap kNN \), which is quite useless given that we will use the union of that with kNN later on. Therefore, we decided to rather follow what appears to be the idea of the method, not the literal pseudocode included.
relation
- Data relationknns
- Stored nearest neighborspruned
- Pruned objects: with too many neighborsrNNminuskNNs
- reverse kNN storageprotected void computeINFLO(Relation<O> relation, ModifiableDBIDs pruned, KNNQuery<O> knnq, WritableDataStore<ModifiableDBIDs> rNNminuskNNs, WritableDoubleDataStore inflos, DoubleMinMax inflominmax)
relation
- Data relationpruned
- Pruned objectsknnq
- kNN queryrNNminuskNNs
- reverse kNN storageinflos
- INFLO score storageinflominmax
- Output of minimum and maximumpublic TypeInformation[] getInputTypeRestriction()
AbstractAlgorithm
getInputTypeRestriction
in interface Algorithm
getInputTypeRestriction
in class AbstractAlgorithm<OutlierResult>
protected Logging getLogger()
AbstractAlgorithm
getLogger
in class AbstractAlgorithm<OutlierResult>
Copyright © 2019 ELKI Development Team. License information.