{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/arxiv-2605-00637","title":"Class Angular Distortion Index for Dimensionality Reduction","arxiv_id":"2605.00637","date":"2026-05-01","proceeding":null,"authors":["Kaviru Gunaratne","Stephen Kobourov","Jacob Miller"],"abstract":"Dimensionality reduction (DR) techniques are often characterized by whether they preserve global, high-level structures in the data or local, neighborhood structures. This distinction matters in visualization: global methods can obscure clusters while local methods can over-emphasize them. Yet, even when clusters appear distinct, their relative arrangement in the projection may be arbitrary or misleading, a common issue in techniques such as t-SNE and UMAP. Existing cluster quality metrics either only measure cluster separability or assume spherical, globular clusters in the original space. We introduce the Class Angular Distortion Index (CADI), a metric that uses internal angles among point triples to determine the faithfulness of cluster organization in a projection. We show cases on both real and synthetic data where existing cluster metrics fail, but CADI provides an interpretable result. Since it relies on computing angles, CADI is also differentiable, enabling optimization. We demonstrate this with a CADI-based DR technique.","url_abs":"https://arxiv.org/abs/2605.00637","url_pdf":"https://arxiv.org/pdf/2605.00637","source":{"archive":null,"snapshot":"2025-07-28","note":"not in the Papers with Code archive (frozen at the snapshot)","row_kind":"graph","title_abstract_authors_date":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)"},"code_links":[],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2605.00637","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2605.00637"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/KaviruGunaratne/cadi","reach":null}],"summary":{"ran_fixture":5},"by_repo_kind":{"found_in_text":{"samples":5,"ran":5,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":5,"samples":[{"code_sha256_prefix":"4474a9d3a3323785","entry":"CADI","repo":"KaviruGunaratne/cadi","repo_kind":"found_in_text","path":"metrics/angle_score.py","file_url":"https://github.com/KaviruGunaratne/cadi/blob/HEAD/metrics/angle_score.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"4474a9d3a3323785"}},{"code_sha256_prefix":"3df35cbf590874c0","entry":"_cadi_kernel","repo":"KaviruGunaratne/cadi","repo_kind":"found_in_text","path":"metrics/angle_score.py","file_url":"https://github.com/KaviruGunaratne/cadi/blob/HEAD/metrics/angle_score.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"3df35cbf590874c0"}},{"code_sha256_prefix":"6ddc4069a746d2cb","entry":"_get_cosine","repo":"KaviruGunaratne/cadi","repo_kind":"found_in_text","path":"metrics/angle_score.py","file_url":"https://github.com/KaviruGunaratne/cadi/blob/HEAD/metrics/angle_score.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"6ddc4069a746d2cb"}},{"code_sha256_prefix":"160a362b1a380830","entry":"_sample_cadi_triplet","repo":"KaviruGunaratne/cadi","repo_kind":"found_in_text","path":"metrics/angle_score.py","file_url":"https://github.com/KaviruGunaratne/cadi/blob/HEAD/metrics/angle_score.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"160a362b1a380830"}},{"code_sha256_prefix":"b24c9dabf78af794","entry":"get_cluster_info","repo":"KaviruGunaratne/cadi","repo_kind":"found_in_text","path":"metrics/angle_score.py","file_url":"https://github.com/KaviruGunaratne/cadi/blob/HEAD/metrics/angle_score.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b24c9dabf78af794"}}]},"arxiv_metadata":{"licence":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)","fields":["title","abstract","authors","date"],"primary_category":"cs.LG","source":"arxiv_2026.jsonl"},"syntology_extracted_results":null}