O
- Object type@Reference(authors="L. Kaufman, P. J. Rousseeuw",title="Agglomerative Nesting (Program AGNES)",booktitle="Finding Groups in Data: An Introduction to Cluster Analysis",url="https://doi.org/10.1002/9780470316801.ch5",bibkey="doi:10.1002/9780470316801.ch5") @Reference(authors="P. H. Sneath",title="The application of computers to taxonomy",booktitle="Journal of general microbiology, 17(1)",url="https://doi.org/10.1099/00221287-17-1-201",bibkey="doi:10.1099/00221287-17-1-201") @Reference(authors="R. M. Cormack",title="A Review of Classification",booktitle="Journal of the Royal Statistical Society. Series A, Vol. 134, No. 3",url="https://doi.org/10.2307/2344237",bibkey="doi:10.2307/2344237") @Alias(value={"HAC","NaiveAgglomerativeHierarchicalClustering","de.lmu.ifi.dbs.elki.algorithm.clustering.hierarchical.NaiveAgglomerativeHierarchicalClustering"}) public class AGNES<O> extends AbstractDistanceBasedAlgorithm<O,PointerHierarchyRepresentationResult> implements HierarchicalClusteringAlgorithm
This is the naive O(n³) algorithm. See SLINK
for a much faster
algorithm (however, only for single-linkage).
This implementation uses the pointer-based representation used by SLINK, so that the extraction algorithms we have can be used with either of them.
The algorithm is believed to be first published (for single-linkage) by:
P. H. Sneath
The application of computers to taxonomy
Journal of general microbiology, 17(1).
This algorithm is also known as AGNES (Agglomerative Nesting), where the use of alternative linkage criterions is discussed:
L. Kaufman, P. J. Rousseeuw
Agglomerative Nesting (Program AGNES),
in Finding Groups in Data: An Introduction to Cluster Analysis
Reference for the unified concept:
G. N. Lance, W. T. Williams
A general theory of classificatory sorting strategies 1. Hierarchical
systems
The computer journal 9.4 (1967): 373-380.
See also:
R. M. Cormack
A Review of Classification
Journal of the Royal Statistical Society. Series A, Vol. 134, No. 3
Modifier and Type | Class and Description |
---|---|
static class |
AGNES.Parameterizer<O>
Parameterization class
|
Modifier and Type | Field and Description |
---|---|
(package private) Linkage |
linkage
Current linkage method in use.
|
private static Logging |
LOG
Class logger
|
ALGORITHM_ID
DISTANCE_FUNCTION_ID
Constructor and Description |
---|
AGNES(DistanceFunction<? super O> distanceFunction,
Linkage linkage)
Constructor.
|
Modifier and Type | Method and Description |
---|---|
protected int |
findMerge(int end,
MatrixParadigm mat,
PointerHierarchyRepresentationBuilder builder)
Perform the next merge step in AGNES.
|
TypeInformation[] |
getInputTypeRestriction()
Get the input type restriction used for negotiating the data query.
|
protected Logging |
getLogger()
Get the (STATIC) logger for this class.
|
protected static void |
initializeDistanceMatrix(MatrixParadigm mat,
DistanceQuery<?> dq,
Linkage linkage)
Initialize a distance matrix.
|
protected void |
merge(int end,
MatrixParadigm mat,
PointerHierarchyRepresentationBuilder builder,
double mindist,
int x,
int y)
Execute the cluster merge.
|
PointerHierarchyRepresentationResult |
run(Database db,
Relation<O> relation)
Run the algorithm
|
protected static int |
shrinkActiveSet(DBIDArrayIter ix,
PointerHierarchyRepresentationBuilder builder,
int end,
int x)
Shrink the active set: if the last x objects are all merged, we can reduce
the working size accordingly.
|
protected void |
updateMatrix(int end,
MatrixParadigm mat,
PointerHierarchyRepresentationBuilder builder,
double mindist,
int x,
int y,
int sizex,
int sizey)
Update the scratch distance matrix.
|
getDistanceFunction
run
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
run
private static final Logging LOG
Linkage linkage
public AGNES(DistanceFunction<? super O> distanceFunction, Linkage linkage)
distanceFunction
- Distance function to uselinkage
- Linkage methodpublic PointerHierarchyRepresentationResult run(Database db, Relation<O> relation)
db
- Databaserelation
- Relationprotected static int shrinkActiveSet(DBIDArrayIter ix, PointerHierarchyRepresentationBuilder builder, int end, int x)
ix
- Object iteratorbuilder
- Builder to detect merged statusend
- Current active set sizex
- Last merged objectprotected static void initializeDistanceMatrix(MatrixParadigm mat, DistanceQuery<?> dq, Linkage linkage)
mat
- Matrixdq
- Distance querylinkage
- Linkage methodprotected int findMerge(int end, MatrixParadigm mat, PointerHierarchyRepresentationBuilder builder)
end
- Active set sizemat
- Matrix storagebuilder
- Pointer representation builderprotected void merge(int end, MatrixParadigm mat, PointerHierarchyRepresentationBuilder builder, double mindist, int x, int y)
end
- Active set sizemat
- Matrix paradigmbuilder
- Hierarchy buildermindist
- Distance that was used for mergingx
- First matrix positiony
- Second matrix positionprotected void updateMatrix(int end, MatrixParadigm mat, PointerHierarchyRepresentationBuilder builder, double mindist, int x, int y, int sizex, int sizey)
end
- Active set sizemat
- Matrix viewbuilder
- Hierarchy builder (to get cluster sizes)mindist
- Distance that was used for mergingx
- First matrix positiony
- Second matrix positionsizex
- Old size of first clustersizey
- Old size of second clusterpublic TypeInformation[] getInputTypeRestriction()
AbstractAlgorithm
getInputTypeRestriction
in interface Algorithm
getInputTypeRestriction
in class AbstractAlgorithm<PointerHierarchyRepresentationResult>
protected Logging getLogger()
AbstractAlgorithm
getLogger
in class AbstractAlgorithm<PointerHierarchyRepresentationResult>
Copyright © 2019 ELKI Development Team. License information.