Skip to main content

NMA: Dendrogram-based model analysis, white-box testing, and adversarial detection

Project description


NMA – Near Misses Analysis

NMA (Near Misses Analysis) is a Python package for analyzing machine learning models through dendrogram-based hierarchical clustering, white-box testing, and adversarial attack detection.

It provides visualization, explanation, and diagnostic tools to help developers and researchers understand their models’ decision boundaries, identify vulnerabilities, and detect adversarial inputs.


✨ Features

  • 📊 Dendrogram construction & visualization

    • Build hierarchical trees from model predictions.
    • Plot full dendrograms or sub-dendrograms for specific labels.
  • 🧪 White-box testing

    • Identify problematic training samples likely to cause misclassification.
    • Run structured analysis across source/target label pairs.
  • 🛡 Adversarial attack detection

    • Train a logistic regression adversarial detector.
    • Detect adversarial images and compute adversarial scores.
  • 🔎 Model querying & explanations

    • Query images for predictions with hierarchical context.
    • Generate verbal explanations of model predictions.
  • 🧩 Cluster analysis tools

    • Find lowest common ancestors (LCA) in the dendrogram.
    • Rename clusters for more meaningful interpretation.

📦 Installation

pip install BETTER_NMA

🚀 Quickstart

from BETTER_NMA import NMA
import numpy as np

# Example data (replace with your dataset/model)
x_train = np.random.rand(100, 32, 32, 3)
y_train = np.random.randint(0, 2, size=100)
labels = ["cat", "dog"]

# Your pre-trained model (e.g., Keras, PyTorch wrapper with predict)
model = my_model  

# Initialize NMA
nma = NMA(
    x_train=x_train,
    y_train=y_train,
    labels=labels,
    model=model,
    explanation_method="similarity", 
    save_connections=True
)

# Plot dendrogram
nma.plot(title="Model Decision Hierarchy")

# Run white-box testing
issues = nma.white_box_testing(["cat"], ["dog"], analyze_results=True)

# Train adversarial detector
nma.train_adversarial_detector(authentic_images, adversarial_images)

# Detect if a new image is adversarial
result = nma.detect_attack(test_image)

# Get verbal explanation of an image
explanation = nma.verbal_explanation(test_image)
print(explanation)

📚 API Overview

Dendrogram & Visualization

  • plot(sub_labels=None, ...) – plot full or partial dendrogram.
  • plot_sub_dendrogram(sub_labels, ...) – zoom into specific classes.

White-box Testing

  • white_box_testing(source_labels, target_labels, ...) – find problematic images.
  • get_white_box_analysis(source_labels, target_labels, ...) – detailed analysis.

Adversarial Detection

  • train_adversarial_detector(authentic_images, attacked_images) – train detector.
  • detect_attack(image, plot_result=False) – detect adversarial samples.
  • adversarial_score(image, top_k=5) – compute adversarial score.

Query & Explanation

  • query_image(image, top_k=5) – get predictions & explanation.
  • verbal_explanation(image) – generate natural language explanation.

Cluster Analysis

  • find_lca(label1, label2) – lowest common ancestor.
  • change_cluster_name(cluster_id, new_name) – rename clusters.

🛠 Requirements

  • Python ≥ 3.8
  • NumPy, Pandas, Matplotlib, Scikit-learn
  • (Optional) PyTorch / TensorFlow for model support

📖 Use Cases

  • Research – interpret model predictions via hierarchical clustering.
  • Robustness testing – identify adversarial vulnerabilities.
  • Explainability – provide visual + verbal explanations.
  • Debugging – detect mislabeled or problematic training samples.

📜 License

MIT License – free to use and modify.


Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

better_nma-1.0.6.tar.gz (29.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

BETTER_NMA-1.0.6-py3-none-any.whl (36.1 kB view details)

Uploaded Python 3

File details

Details for the file better_nma-1.0.6.tar.gz.

File metadata

  • Download URL: better_nma-1.0.6.tar.gz
  • Upload date:
  • Size: 29.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.2

File hashes

Hashes for better_nma-1.0.6.tar.gz
Algorithm Hash digest
SHA256 a2cebca693c63600f7e70c3d3042ec91dcb26b18ea2e3294aa18b54188c257e4
MD5 187372036cd596ddfda3f71902b0e9f0
BLAKE2b-256 a622495f1a769f4a10db6d4a8db09da40df53496b52980cfe7356f40e3f89249

See more details on using hashes here.

File details

Details for the file BETTER_NMA-1.0.6-py3-none-any.whl.

File metadata

  • Download URL: BETTER_NMA-1.0.6-py3-none-any.whl
  • Upload date:
  • Size: 36.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.2

File hashes

Hashes for BETTER_NMA-1.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 c9b87d6f8f7d394a273a0f3afcd99f7dcb608a3626a1098dab92a6de4696291b
MD5 eceb831be569c18760b7f47cf2580aaf
BLAKE2b-256 279c45fb9465b503543937c63ccad34387bccbbc5dba8292bd73e0ff2b410c27

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page