wikillm

Paper · 2025-11-27 · cs.LG, cs.AI

Mixed Data Clustering Survey and Challenges

Surveys and benchmarks clustering for tables mixing numeric and categorical columns, and proposes PretopoMD, a pretopology-based hierarchical clusterer that runs on raw mixed features. Author-reported: PretopoFAMD has the best Calinski-Harabasz score on Penguins (182.22), but no method wins on every dataset, and the paper's text and linked code disagree on several settings.

Clustering evaluationDimensionality reductionHierarchical clusteringclusteringmixed-datapretopologyhierarchical-clusteringbenchmarksurvey

arXivPDFMarkdown18 min read

AI-compiled by claude-haiku-5-5 on 2026-11-06, not yet reviewed by a human. Every claim cites its source; check it when a detail matters.

In plain words

Many real tables mix number columns (such as age or weight) with category columns (such as colour or diagnosis). Most clustering methods expect numbers only, so people often convert everything to numbers first, and that can blur what the categories mean. This paper looks at the methods used for such tables, runs them on a few real datasets and on synthetic ones, and reports which ones seem to work.

The paper also proposes its own method, called PretopoMD. It works directly on the mixed columns, without turning them into one shared number space. Each row is linked to nearby rows, and groups grow out of those links by a set of rules from pretopology, a branch of mathematics about closeness that does not rely on one distance for all columns. The groups are then arranged into a tree, so each branching can be inspected. The method does not ask the user for a number of clusters. The authors report that it does well on some datasets and poorly on others, so the benchmark is as useful as the method.

TL;DR

  • Survey plus benchmark of clustering for mixed numeric and categorical data, and a new pretopology-based hierarchical method, PretopoMD §1 §4.8.
  • PretopoMD takes no dimensionality reduction and no cluster count k, and it has no missing-value handling in the paper's own table §4.8 tab. 2.
  • The author-reported results are mixed: the best row changes from dataset to dataset, and the pretopology variants win some tables and lose others §7.3 tab. 6–12.
  • The paper leaves every pretopology parameter unstated; the linked code sets them, and in places the code path differs from the paper's description §4.8 see Paper vs code.
  • Treat this as a benchmark reference and a candidate method. The card's status is draft.

Problem

Most clustering algorithms assume a Euclidean space, so they do not apply directly to mixed tables §1 §2. Existing mixed-data methods mostly adapt algorithms built for one data type §2. Two problems follow. First, numeric and categorical columns are often handled separately, which misses the links between them §1. Second, the usual internal quality indices (Calinski-Harabasz, Davies-Bouldin) need Euclidean coordinates, so the authors first project each mixed table with FAMD, UMAP or PaCMAP and compute the indices on that projection §5 §7.3. The Silhouette score is the exception: it can use pairwise distances, so the authors compute it on a Gower matrix as well §5.4 §7.3.

Methods that need k rely on the Elbow method to pick it. The authors say this step can cost more time than the clustering itself §7.1.3. They also argue that hierarchical, explainable outputs matter for decision-making §1 §8.5.

Method

The paper has three parts: a survey of four clustering paradigms §2, a benchmark of dimensionality-reduction methods (FAMD §3.1, Laplacian Eigenmaps §3.2, UMAP §3.3, PaCMAP §3.4) and seven clustering methods §4.1–§4.7, plus the proposed pretopology method §4.8. The baseline algorithms are summarised in the paper and are not re-derived on this card. The paper's own method is the pretopology method below.

Pretopological space §4.8. A pretopological space is a set U with a pseudoclosure operator a(·) that sends the empty set to itself and includes every set in its own image. The paper builds one from (i) a family of weighted directed graphs, (ii) a threshold per graph, and (iii) a positive disjunctive normal form over per-graph tests. A test for graph i holds for a set A and an item x when the summed weights from x into A reach the threshold. The item joins the pseudoclosure of A when the normal form is true. The paper gives these definitions in words and writes no numbered equation for them §4.8.

PretopoMD as implemented (pipeline, in plain steps; the paper describes these only in words §4.8):

  1. Build one similarity network for numeric columns (Euclidean distance) and one for categorical columns (Hamming distance). Each network weight is 1 minus distance over radius, zero beyond the radius geometric.py.
  2. For each network, compute the square length, the radius, and a threshold from the number of effective neighbours pretopological_space.py.
  3. Start a closure from every single row, and grow it to a fixed point under the pseudoclosure. Keep all intermediate sets closures.py closures.py.
  4. Compute the attraction between every pair of sets and link set X to set Y when X's attraction towards Y reaches 0.5 hierarchy.py hierarchy.py.
  5. Where two sets are linked both ways (equivalent), keep one representative hierarchy.py.
  6. Label each row with the last selected set that contains it, and mark rows in no set as noise pretopomd.py.
Pseudocode
# PretopoMD on a mixed table  [§4.8]
# Input:  table with numeric and categorical columns, N rows
# Output: one label per row, -1 for noise

def pretopomd(table):
    # One similarity network per attribute type, with a threshold each
    # [code: algorithms/pretopomd.py#L19-L27]
    numeric_network = similarity_network(numeric_part, euclidean)
    categorical_network = similarity_network(categorical_part, hamming)

    # Closure of each single-row seed, keeping every intermediate set
    # [code: pretopologic/structure/closures.py#L73-L136]
    closures = all_closures(numeric_network, categorical_network)

    # Link X to Y when X's attraction towards Y is at least 0.5
    # [code: pretopologic/structure/hierarchy.py#L104-L105]
    adjacency = attraction_adjacency(closures, threshold=0.5)

    # Keep one set per group of mutually equivalent sets
    # [code: pretopologic/structure/hierarchy.py#L129-L151]
    selected = keep_one_per_equivalence_group(adjacency, closures)

    # Each row takes the label of the last selected set holding it
    # [code: algorithms/pretopomd.py#L33-L41]
    return label_rows(selected, N)
Pseudocode
# Pseudoclosure of a set A under an OR of thresholded networks
# [§4.8] [code: pretopologic/space/metrics.py#L8-L21]
# Inputs: networks (N x N), thresholds, members (0/1 vector of length N)

def pseudoclosure(networks, thresholds, members):
    # Start from A; a row joins when one network's weight into A
    # reaches that network's threshold
    result = members.copy()
    for network, threshold in zip(networks, thresholds):
        weight_into_set = network @ members          # (N,)
        result[weight_into_set >= threshold] = 1
    return result

Attraction between sets hierarchy.py. For sets X and Y with overlap |X ∩ Y|, the code's attraction matrix holds, for X's attraction towards Y, the value (|Y| / |X|) · (|X ∩ Y| / |X|). The class docstring describes the ratios in words, and the paper gives no formula for this step §4.8.

Tandem variants (FAMD, UMAP, PaCMAP). The paper calls these "Pretopo-FAMD", "Pretopo-UMAP" and "Pretopo-PaCMAP" §7.3. Each first embeds the table in a Euclidean space (FAMD §3.1; UMAP with Huang's distance §3.3; PaCMAP initialised by FAMD §3.4) and then runs the pretopology pipeline on the embedding. The code path for this variant differs from PretopoMD: it uses a grid-based radius, binary adjacency, a different closure routine and the leaves of a gravity-based pseudohierarchy. See Paper vs code.

Other mixed-data methods are summarised here only as the paper states them: K-prototypes §4.1, Convex K-means §4.2, KAMILA §4.3, ClustMD §4.4, MixtComp §4.5, Phillip and Ottaway's Gower-based hierarchical method §4.6 and DenseClus (UMAP plus HDBSCAN) §4.7. The paper's Table 2 marks which need k and which handle missing values or outliers tab. 2.

Key equations (as written in the paper; numbering is continuous across the paper eq. N):

Dimensionality reduction and mixed distances:

\sum_{k} r(z,k) + \sum_{q} \eta^2(z,q) eq. 1 (FAMD global objective, §3.1)

d_{ij} = d^N_{ij} + \gamma\, d^C_{ij} eq. 2 (Huang distance: squared Euclidean on numeric features plus gamma times Hamming on categorical features, §3.2)

sim_{ij} = \exp\left(\frac{d_{ij} - d_N}{\sigma}\right) eq. 3 (UMAP similarity, §3.3)

s = \frac{1}{1 + \alpha\, d^{\beta}} eq. 4 (UMAP low-dimensional similarity, §3.3)

cost = \log\frac{1}{s_{AN}} - \log\frac{1}{1 - s_{AF}} eq. 5 (UMAP cost, §3.3)

Loss = w_{NB} \sum_{J} \frac{\tilde{d}_{ij}}{10 + \tilde{d}_{ij}} + w_{MN} \sum_{K} \frac{\tilde{d}_{ik}}{1000 + \tilde{d}_{ik}} + w_{FP} \sum_{L} \frac{\tilde{d}_{il}}{1 + \tilde{d}_{il}} eq. 6 (PaCMAP loss, §3.4; \tilde{d}_{AB} = 1 + \lVert y_A - y_B \rVert^2)

Multinomial mixture and Gower similarity (baselines):

\eta(w_q; \theta_{gq}) = \prod_{l=1}^{L_q} \theta_{gql}^{\,I\{w_q = l\}} eq. 7 (multinomial mass function, §4.3)

s_{ij} = \frac{\sum_{k=1}^{p} w_{ij}^{(k)} s_{ij}^{(k)}}{\sum_{k=1}^{p} w_{ij}^{(k)}} eq. 8 (Gower similarity, §4.6; w^{(k)}_{ij} = 0 when a value is missing)

s_{ij}^{(k)} = \begin{cases} 1 & \text{same value for feature } k \\ 0 & \text{otherwise} \end{cases} eq. 9 (categorical part, §4.6)

s_{ij}^{(k)} = \frac{|x_i^{(k)} - x_j^{(k)}|}{R_k} eq. 10 (numeric part, §4.6; R_k is the feature range)

Evaluation:

H = \frac{\sum_{i=1}^{m} u_i^{\,d}}{\sum_{i=1}^{m} u_i^{\,d} + \sum_{i=1}^{m} w_i^{\,d}} eq. 11 (Hopkins statistic, §5.1)

W_k = \sum_{q=1}^{k} \sum_{x \in C_q} (x - c_q)(x - c_q)^{T}, \quad B_k = \sum_{q=1}^{k} n_q (c_q - c_E)(c_q - c_E)^{T} eq. 12 (within and between dispersion, §5.3)

s = \frac{\operatorname{tr}(B_k)}{\operatorname{tr}(W_k)} \cdot \frac{n_E - k}{k - 1} eq. 13 (Calinski-Harabasz, §5.3)

silhouette = \frac{b - a}{\max(a, b)} eq. 14 (Silhouette, §5.4)

R_{ij} = \frac{s_i + s_j}{d_{ij}} eq. 15 (Davies-Bouldin pair term, §5.5)

DB = \frac{1}{k} \sum_{i=1}^{k} \max_{i \neq j} R_{ij} eq. 16 (Davies-Bouldin index, §5.5)

p(x) = \frac{1}{k} \sum_{i=1}^{k} \mathcal{N}(\mu_i, \Sigma_i) eq. 17 (benchmark generator density, §6.2)

Dataset generator §6.2. Cluster centres are drawn with an average pairwise distance of 1, samples come from a mixture of Gaussians with diagonal covariances eq. 17, and some features are split at quantiles into categories. Tunable parameters are the number of rows, the number of clusters, the numbers of numeric and categorical features, the number of levels per categorical feature, and the cluster standard deviation.

Cluster-tendency measures §5.1 §5.2. Hopkins draws a sample of the data, and the paper follows a suggested sample of 5% §5.1. iVAT reorders the dissimilarity matrix so that dark diagonal blocks reveal candidate clusters §5.2. The paper notes that a high Hopkins value can come from one dense cluster, where clustering is pointless §5.1.

Hyperparameters

The paper states almost no pretopology parameters. The values below come from the linked code (see Paper vs code for its status). The "Where" column gives the paper section or the code location.

NameValueWhereNotes
PretopoMD radius multiplier20 × square lengthpretopomd.pypretopologic default is 2.5 constants.py
Square-length coefficientN × 0.16 / 100 = 0.0016 × Npretopomd.py pretopomd.pypretopologic default is 0.1 constants.py
Square lengthsqrt(area / N) × coefficientpretopological_space.pyarea = (largest pairwise distance)² per network geometric.py
Closeness scale1 × square lengthpretopomd.pypretopologic default is 0.5 constants.py
Threshold(real points / N)²pretopomd.py pretopological_space.pyreal points = N − Σ (c−1)/c, with c the closeness count pretopological_space.py pretopological_space.py
Seed size1 (single rows)pretopomd.py
Attraction threshold0.5hierarchy.py
Tandem: closure seed size20pretopo_base_clustering.py
Tandem: radius2.5 × square lengthpretopo_utils.pysquare length from the first two embedding columns pretopo_utils.py
Tandem: thresholdN / (2 × real points)pretopo_utils.py
Tandem: closenesssquare length / 2pretopo_utils.py
Tandem: pseudohierarchy threshold0.5pretopo_base_clustering.py
Huang distance γ"usually half" the average standard deviation of numeric features§3.2 eq. 2user-defined; no value in the paper
Laplacian heat-kernel tuser-defined§3.2t = 1 in the example figure fig. 1
UMAP k (neighbours)15§3.3 fig. 1the UMAP call sets no neighbour count umap_reduction.py
UMAP α, β1.577, 0.8951§3.3 eq. 4
PaCMAP schedule450 iterations; 10 neighbours; 6 candidates for mid-near pairs; weights (NB, MN, FP) = (2, 1000→3 linear, 1) for iterations 1–100, (3, 3, 1) for 101–200, (1, 0, 1) for the last 250§3.4 eq. 6
Hopkins sample5% of the data (the value the paper cites as suggested)§5.1
Benchmark: Penguins344 rows; 4 numeric and 4 categorical columns§6.1
Benchmark: Heart Disease918 rows; 13 features (5 numeric, 4 categorical, 4 ordinal)§6.1
Benchmark: Sponge75 rows; 3 numeric and 42 categorical features§6.1
Elbow method for kk = 2 on Penguins, Heart and the 15-category set; k = 3 on the base case§7.3 tab. 9the Elbow variant for mixed data combines a Gower distance with Calinski-Harabasz on K-means §7.1.3
Base generated case500 rows; 5 numeric and 5 categorical features; 3 clusters; 3 levels per categorical feature; σ = 0.10§7.3 tab. 9
10-cluster case500 rows; 10 numeric and 10 categorical features; σ = 0.10§7.3 tab. 10
15-category case500 rows; 15 clusters; 15 categorical features with 15 levels each§7.3 tab. 11
Sparse case1000 rows; 10 numeric and 10 categorical features; 3 clusters; σ = 0.15§7.3 tab. 12
Scaling studyrows: 50 to 5000; features: 2 to 100 per type§7.1.1 §7.1.2base: 500 rows, 5 + 5 features
HardwareAMD Ryzen 7 5800H, 32 GB DDR4; memory sampled 10 times per second§7.1

Results

Author-reported. Setup: a single benchmark machine §7.1; baselines use k from the Elbow method unless stated §7.3; Silhouette (Gower) uses a Gower matrix while the other indices use a FAMD projection §7.3. A dash means the method returned one cluster or only outliers §7.3. Calinski-Harabasz is higher-is-better; Silhouette higher-is-better; Davies-Bouldin lower-is-better.

Dimensionality reduction, cluster tendency fig. 1 fig. 2 fig. 12 fig. 13. UMAP and PaCMAP show the highest Hopkins values and the clearest iVAT blocks on Penguins §7.2.

Davies-Bouldin of K-means on each 2D embedding, Penguins tab. 4 (lower is better):

kFAMDLaplacian EigenmapsUMAPPaCMAP
21.101.120.741.68
42.430.980.357.72
63.501.180.3111.14
82.650.860.418.49

Davies-Bouldin on the synthetic 500 × 300 mixed case, 10 clusters tab. 5:

kFAMDLaplacian EigenmapsUMAPPaCMAP
85.811.690.750.79
95.571.590.670.72
105.181.750.520.65
115.092.040.721.04

Clustering, Penguins tab. 6 (344 rows; Elbow gives k = 2 for the classical methods):

MethodCalinski-HarabaszSilhouette FAMDSilhouette GowerDavies-Bouldin
K-Prototypes176.080.340.441.23
Modha-Spangler176.080.340.441.23
KAMILA176.080.340.441.23
ClustMD176.080.340.441.23
MixtComp176.080.340.441.23
Phillip and Ottaway176.080.340.441.23
DenseClus176.080.340.441.23
Pretopo-FAMD182.220.660.650.70
Pretopo-UMAP163.890.360.441.24
Pretopo-PaCMAP61.800.340.291.12
PretopoMD105.170.2390.2631.71

The text says Pretopo-FAMD found 26 clusters and Pretopo-PaCMAP found 11 clusters plus 112 outliers; PretopoMD returned 2 clusters §7.3.

Clustering, Sponge tab. 7 (75 rows):

MethodCalinski-HarabaszSilhouette FAMDSilhouette GowerDavies-Bouldin
K-Prototypes16.830.1700.4212.01
Modha-Spangler16.720.1680.4042.03
KAMILA16.830.1700.4212.01
ClustMD----
MixtComp----
Phillip and Ottaway15.660.1610.4372.09
DenseClus----
Pretopo-FAMD1.65-0.061-0.1681.46
Pretopo-UMAP7.530.0840.1422.79
Pretopo-PaCMAP16.760.1690.4312.00
PretopoMD6.360.4840.0120.383

The text says PretopoMD forms one main cluster of 74 points with one outlier §7.3.

Clustering, Heart Disease tab. 8 (918 rows; the paper states that the Elbow method gives 2 clusters):

MethodCalinski-HarabaszSilhouette FAMDSilhouette GowerDavies-Bouldin
K-Prototypes47.680.1360.1112.36
Modha-Spangler55.330.1650.1962.19
KAMILA54.770.1600.1792.21
ClustMD34.230.090.1262.75
MixtComp55.420.1350.4092.06
Phillip and Ottaway62.750.2030.4571.91
DenseClus----
Pretopo-FAMD0.830-0.0100.0201.325
Pretopo-UMAP8.57-0.1900.0063.06
Pretopo-PaCMAP43.340.1740.4120.169
PretopoMD67.880.2480.4161.31

The text says PretopoMD found two clusters of 206 and 64 rows; the status of the other rows is not stated §7.3.

Clustering, base generated case tab. 9 (500 rows, 3 true clusters, σ = 0.10; Elbow gives k = 3):

MethodCalinski-HarabaszSilhouette FAMDSilhouette GowerDavies-Bouldin
ClustMD296.3300.3940.5211.071
DenseClus295.2240.3930.5191.074
Phillip and Ottaway290.5560.3890.5141.083
KAMILA296.3300.3940.5211.071
K-Prototypes296.3300.3940.5211.071
MixtComp294.9060.3930.5181.075
Modha-Spangler296.3300.3940.5211.071
Pretopo-FAMD34.1600.0670.0611.453
Pretopo-UMAP293.8350.3920.5161.078
Pretopo-PaCMAP66.5630.0490.0131.845
PretopoMD127.3380.2300.3081.508

Clustering, 10 true clusters tab. 10 (500 rows; Elbow gives k = 2):

MethodCalinski-HarabaszSilhouette FAMDSilhouette GowerDavies-Bouldin
ClustMD95.9340.1750.1972.216
DenseClus81.3130.1830.2001.914
Phillip and Ottaway70.9490.1940.2131.190
KAMILA86.3480.1600.1572.120
K-Prototypes92.0960.1680.1852.263
MixtComp83.3160.1630.2052.163
Modha-Spangler79.2140.1530.2062.421
Pretopo-FAMD14.482-0.015-0.0182.219
Pretopo-UMAP127.6240.3530.3591.122
Pretopo-PaCMAP66.8700.1740.1541.557
PretopoMD48.1780.1080.1642.197

Clustering, 15 categorical features with 15 levels tab. 11 (500 rows, 15 true clusters):

MethodCalinski-HarabaszSilhouette FAMDSilhouette GowerDavies-Bouldin
ClustMD0.000-1.000-1.000-1.000
DenseClus118.0480.2180.1021.723
Phillip and Ottaway119.2840.1950.0871.831
KAMILA120.9340.1960.0881.817
K-Prototypes118.0480.1910.0851.862
MixtComp0.000-1.000-1.000-1.000
Modha-Spangler120.9340.1960.0881.817
Pretopo-FAMD0.631-0.030-0.0013.079
Pretopo-UMAP0.000-1.000-1.000-1.000
Pretopo-PaCMAP122.8330.2270.1071.681
PretopoMD0.000-1.000-1.000-1.000

The paper reads the −1.000 values as degenerate outputs (one cluster or only noise), not as scores §7.3.

Clustering, 1000 rows with σ = 0.15 tab. 12 (true k = 3; Elbow gives k = 2):

MethodCalinski-HarabaszSilhouette FAMDSilhouette GowerDavies-Bouldin
ClustMD184.9290.1500.1322.109
DenseClus133.9000.1440.1422.987
Phillip and Ottaway5.6730.1000.1572.558
KAMILA184.9630.1500.1322.117
K-Prototypes181.2460.1480.1282.145
MixtComp169.8970.1420.1442.204
Modha-Spangler169.7930.1430.1452.202
Pretopo-FAMD1.1990.0170.0262.160
Pretopo-UMAP162.7580.1360.1352.261
Pretopo-PaCMAP202.1140.1910.1901.848
PretopoMD17.020-0.032-0.0552.800

Computation cost §7.1. Measured on a 500-row base case with 5 numeric and 5 categorical features, and then varied one factor at a time. With more rows (50 to 5000), the pretopology variants' memory grows faster than most other methods' memory, and their time curves are close to linear but steeper than most §7.1.1 fig. 4 fig. 5. ClustMD's time is very high, and its memory grows close to quadratically with the number of numeric features §7.1.1 §7.1.2 fig. 6. MixtComp's time grows close to linearly with the number of categorical features, more steeply than with numeric features §7.1.2 fig. 9. The pretopology variants show a brief memory peak, of about double, lasting roughly 0.1 to 0.2 s on 2500 rows with 100 features of each type §7.1.3 fig. 11. On the Elbow method, the paper says it can take more time than the clustering itself §7.1.3 fig. 10.

Paper's summary claims §7.3, Conclusion. The paper says Pretopo-PaCMAP "consistently" performs best, that PretopoMD often wins on at least one index, and that pretopology methods rank in the top two to four on the seven datasets §9. Tables 6–12 do not support the first claim on every dataset: Pretopo-UMAP is best on the 10-cluster case tab. 10 and Pretopo-FAMD on Penguins tab. 6.

Paper vs code

Repository status. The paper's footnote links the algorithms as https://github.com/ClementCornet/Clustering-Mixed-Data/. At compile time (2026-11-06) that URL returns "Repository not found". A second footnote links https://github.com/ClementCornet/Benchmark-Mixed-Clustering, which the paper also uses for further results §7. I cloned that repository at commit 01d0fa712f6ddf3351d7192aedd3140b176e8f99 (last commit dated 2023-06-27) and read the code from it. The owner's name matches a student named in the acknowledgements, not one of the two authors, and the repository has no LICENSE file. For those reasons it is not recorded in the code field and is cited here for paper-vs-implementation differences only. No code has been run. All statements below come from reading the files. Paths are relative to that repository.

Pretopology parameters. The paper states no numeric value for the pretopology method §4.8. The code sets radius multiplier 20, closeness scale 1, threshold exponent 2 and a square-length coefficient of 0.0016 × N for PretopoMD pretopomd.py. These differ from the pretopologic package defaults (2.5, 0.5, 0.5, 0.1) constants.py, so the default library cannot be assumed to match the paper's runs.

Tandem path reads differently from the paper's description. The paper describes weighted graphs and thresholds §4.8. For the FAMD, UMAP and PaCMAP variants, pretopo_clustering calls clustering(data, distance_func, area_val) with two None values pretopo_base_clustering.py. The first None fills the method parameter, so the code takes the "largeron" branch rather than the default "mine" branch pretopo_base_clustering.py. The same None fills the distances flag of prenetwork_closest, so the network is binary (within radius, weight 1) instead of distance-weighted pretopo_utils.py pretopo_utils.py. The paper does not say which branch its tables used.

Closure choice differs between the two code paths. In the tandem path, the closure routine picks the next element with argmin over the non-zero similarities, so it takes the least-similar element inside the radius pretopo_utils.py pretopo_utils.py. The PretopoMD path uses argmax, which takes the most-similar element closures.py. With binary weights, the tandem path's choice reduces to the first index among equal weights.

Random representative choice in the tandem path. The tandem path picks one representative per equivalence group at random pretopo_hierarchy.py. PretopoMD picks the lowest index hierarchy.py. The paper does not mention seeds or repeated runs, so the tandem-variant numbers may not reproduce exactly.

Leaves versus representatives. The tandem path keeps only leaf sets of the gravity pseudohierarchy pretopo_base_clustering.py. PretopoMD keeps every representative set pretopomd.py. The paper does not separate the two.

Area and square length in the tandem path. The square length uses the range of the first two embedding columns only, even when the embedding has more dimensions pretopo_utils.py. The source comments say this version is "only 2D".

Numeric scaling. PretopoMD does not standardise numeric columns before taking Euclidean distance pretopomd.py. The PaCMAP wrapper has a standardisation loop, but it writes to a copy of the data and has no effect pretopo_PaCMAP.py. The paper says nothing about scaling.

Area depends on the largest distance. Each network's area is the squared largest pairwise distance geometric.py, and the square length follows from it pretopological_space.py. So one far-away row changes the radius for all rows. The paper gives no such formula.

Diagonal weight. The PretopoMD network does not zero the diagonal geometric.py, so each row has self-weight 1. The tandem path zeroes the diagonal pretopo_utils.py pretopo_utils.py. The paper does not say whether self-weight counts.

Scaling claim. The paper describes the pretopology steps as scaling linearly in edges and seeds §4.8. Its own memory figures show that the pretopology variants' memory grows faster than most baselines with the number of rows §7.1.1 fig. 4. Each network is built as a full N × N matrix pretopological_space.py, so memory grows with N squared.

Metric claim. The paper calls the method metric-free §4.8, Table 1. The code uses a Euclidean distance on numeric columns and Hamming distance on categorical columns, combined by an OR of the two networks pretopomd.py.

UMAP k. The paper uses k = 15 §3.3. The UMAP call sets no neighbour count umap_reduction.py, so the value used is whatever the UMAP library defaults to; I did not check that default.

Not checked. The Elbow procedure for mixed data §7.1.3, the Gower and Hopkins implementations, and the handling of noise labels (−1) inside the indices. The paper does not say how noise rows enter the indices, and I did not verify the code for that.

The baseline algorithms (K-prototypes through DenseClus) were not checked in code, so no statement is made about them here.

Pitfalls

  • The method's numbers are not in the paper. The threshold, radius, closeness and attraction settings all come from code. Implement them from the code paths above, and test that the values match before comparing results.
  • The paper's pretopology section is qualitative. It gives no formula for attraction and no rule for overlapping sets. The code uses the sets' overlap and the last-index rule (below).
  • Overlapping sets are resolved by position. Each row takes the label of the last selected set that contains it pretopomd.py. Two sets may hold the same row, and the paper does not say how this should be handled.
  • The threshold depends on a count that includes the row itself. The closeness count includes the diagonal pretopological_space.py, which feeds the real-points estimate and so the threshold (real points / N)².
  • Radius and thresholds are scale-sensitive. The radius follows the largest pairwise distance geometric.py, and numeric columns are not scaled pretopomd.py. Mixing units can change the clustering.
  • Quadratic memory. Each network is a dense N × N matrix pretopological_space.py. The paper's memory peaks fig. 11 are consistent with this.
  • Non-determinism in the tandem path. Representative choice is random pretopo_hierarchy.py. Run several seeds and report the spread; the paper reports single values.
  • Degenerate outputs look like scores. Several methods return one cluster or only noise, and their Silhouette is −1.000 tab. 11. Count these as failures.
  • Outlier counts are not always given. For Heart Disease, the two clusters hold 206 and 64 of 918 rows and the paper does not state what happens to the rest §7.3.
  • Overlapping benchmark conclusions. The conclusion says the PaCMAP variant is consistently best §9, but the tables show Pretopo-UMAP best on the 10-cluster case tab. 10 and Pretopo-FAMD best on Penguins tab. 6. Use the tables, not the summary.
  • Costs the abstract hides. Memory and time grow faster for the pretopology variants than for most baselines as rows increase §7.1.1 fig. 4. The paper's own Table 2 lists no missing-value handling for the pretopology method tab. 2.
  • Cluster tendency can mislead. A high Hopkins value can come from one dense cluster §5.1, so check iVAT as the paper does §5.2.

Lineage

  • Builds on: pretopology as a clustering tool, from Dalud (2001) §4.8 (bib key dalud2001pretopology), the formal framework of Laborde (2019, a thesis) §4.8, and Lévy et al. (2022) on hierarchical clustering of energy systems §4.8. Cards for these works were not checked.
  • Compared against: FAMD, Escofier (1979) §3.1; Laplacian Eigenmaps, Belkin (2003) §3.2; UMAP §3.3; PaCMAP §3.4; K-prototypes §4.1; Modha-Spangler convex K-means §4.2; KAMILA §4.3; ClustMD §4.4; MixtComp §4.5; Phillip and Ottaway §4.6; DenseClus and HDBSCAN §4.7; DIVCLUS-T (Chavent 2007) and Unsupervised Binary Trees (Ghattas 2017) §4.8. Cards for these methods were not checked.
  • Follow-up: the authors say a detailed study of pretopological algorithms and their hyperparameter tuning is planned §9. No such work is cited.
  • Superseded by: not known.

Source and license

Adapted from “Mixed Data Clustering Survey and Challenges” by Guillaume Guerard, Sonia Djebali (arXiv:2512.03070), used under CC BY 4.0. Changes: condensed and restructured for implementation, with tables, equations and algorithms taken from the paper and its code, each cited to its source. Not affiliated with or endorsed by the authors.