Motif Clustering

motif-clustering

lamm-mit ba7e305 3 files · 17.9 KB Updated

File contents

motif-clustering

Clusters melodic motifs using scikit-learn (KMeans or hierarchical clustering) with optional UMAP projection. Takes motif JSON (from motif-detection) and groups them by interval similarity.

Usage

python3 skills/motif-clustering/scripts/motif_clustering.py --query "bach motifs" --n-clusters 8 --method kmeans
python3 skills/motif-clustering/scripts/motif_clustering.py --query "bach motifs" --method hierarchical

Output

{
  "method": "kmeans",
  "n_clusters": 8,
  "clusters": [
    {
      "cluster_id": 0,
      "n_members": 12,
      "centroid_intervals": [2, -1, 2],
      "genre_distribution": {"baroque": 8, "folk": 4},
      "top_motifs": ["m_0001", "m_0012"]
    }
  ],
  "silhouette_score": 0.47,
  "inertia": 234.5
}

Dependencies

  • scikit-learn
  • music21

lamm-mit/scienceclaw/tree/main/skills/motif-clustering commit ba7e305770

Frequently asked questions

npx skillmds@latest add lamm-mit/motif-clustering