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.8.tar.gz (29.5 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.8-py3-none-any.whl (36.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: better_nma-1.0.8.tar.gz
  • Upload date:
  • Size: 29.5 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.8.tar.gz
Algorithm Hash digest
SHA256 1b335504efbed8d7b8e6f5918d541fdf3ba29ce6b7350be21c7d7e3d0668176b
MD5 84bd46c5acf61155eed90d68f5b9088f
BLAKE2b-256 43e8d14dd21ba92d5c95a850be73359af69dde75c600668719afc3b6e4597f8d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: BETTER_NMA-1.0.8-py3-none-any.whl
  • Upload date:
  • Size: 36.3 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.8-py3-none-any.whl
Algorithm Hash digest
SHA256 ffed223826cf6f089c8bb88fafe4be0283b57b2d574a91c138be82d5c9f10bfb
MD5 7cda9459661dbde29c041ff3ac0a02c7
BLAKE2b-256 a3fb63b294e8e3fe6c90b21b6d52243da3359119a174ac543e4c49c1c364066a

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