Flat clustering groups data points into separate clusters based on a distance limit. It helps find clear groups from hierarchical clusters.
Flat clustering (fcluster) in SciPy
Start learning this pattern below
Jump into concepts and practice - no test required
or
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Syntax
SciPy
scipy.cluster.hierarchy.fcluster(Z, t, criterion='distance', depth=2, R=None, monocrit=None)
Z is the linkage matrix from hierarchical clustering.
t is the threshold to cut the tree into clusters.
Examples
SciPy
from scipy.cluster.hierarchy import linkage, fcluster Z = linkage(data, method='ward') clusters = fcluster(Z, t=1.5, criterion='distance')
SciPy
clusters = fcluster(Z, t=3, criterion='maxclust')
Sample Program
This code groups 5 points into clusters by cutting the hierarchical tree at distance 15. Points close together get the same cluster number.
SciPy
from scipy.cluster.hierarchy import linkage, fcluster import numpy as np # Sample data points data = np.array([[1, 2], [2, 3], [10, 10], [11, 11], [50, 50]]) # Create linkage matrix using Ward method Z = linkage(data, method='ward') # Form flat clusters by cutting at distance 15 clusters = fcluster(Z, t=15, criterion='distance') print(clusters)
Important Notes
The cluster labels start at 1, not 0.
Choosing the right threshold t is important to get meaningful clusters.
Common criteria are 'distance' (cut by distance) and 'maxclust' (fixed number of clusters).
Summary
Flat clustering cuts a hierarchical tree into simple groups.
Use fcluster with a threshold to assign cluster labels.
It helps turn complex cluster trees into easy-to-use clusters.
Practice
1. What is the main purpose of the
fcluster function in scipy's hierarchical clustering?easy
Solution
Step 1: Understand hierarchical clustering output
Hierarchical clustering produces a tree (dendrogram) showing nested clusters.Step 2: Role of
fclusterfclustercuts this tree at a chosen threshold to form flat, non-overlapping clusters.Final Answer:
To cut a hierarchical cluster tree into flat clusters based on a threshold -> Option AQuick Check:
Flat clustering = cutting tree with threshold [OK]
Hint: Remember: fcluster cuts dendrogram into flat groups [OK]
Common Mistakes:
- Confusing fcluster with distance calculation
- Thinking fcluster normalizes data
- Assuming fcluster reduces dimensions
2. Which of the following is the correct syntax to assign flat clusters using
fcluster with a distance threshold of 1.5 from a linkage matrix Z?easy
Solution
Step 1: Check
The function signature isfclusterparametersfcluster(Z, t, criterion='distance')wheretis the threshold.Step 2: Identify correct usage
clusters = fcluster(Z, 1.5, criterion='distance') usest=1.5andcriterion='distance', which is correct syntax.Final Answer:
clusters = fcluster(Z, 1.5, criterion='distance') -> Option CQuick Check:
Threshold = 1.5, criterion = 'distance' [OK]
Hint: Use t for threshold and criterion='distance' in fcluster [OK]
Common Mistakes:
- Using 'method' instead of 'criterion'
- Passing threshold as keyword 'threshold'
- Using wrong criterion like 'maxclust' for distance cut
3. Given the linkage matrix
Z = [[0, 1, 0.5, 2], [2, 3, 1.5, 2], [4, 5, 2.5, 4]], what is the output of fcluster(Z, 1.0, criterion='distance')?medium
Solution
Step 1: Understand linkage matrix and threshold
The linkage matrixZshows merges with distances: 0.5, 1.5, 2.5. Threshold is 1.0.Step 2: Assign clusters by cutting at distance 1.0
Clusters merge if distance ≤ 1.0. The first merge (0.5) joins points 0 and 1 into cluster 1. The second merge (1.5 > 1.0) does not merge points 2 and 3, so point 2 gets cluster 2 and point 3 gets cluster 3.Final Answer:
[1 1 2 3] -> Option DQuick Check:
Distance ≤ 1.0 merges points 0 and 1 only [OK]
Hint: Cut dendrogram at threshold; merges below threshold cluster together [OK]
Common Mistakes:
- Merging clusters above threshold
- Assigning all points to one cluster
- Misreading linkage matrix format
4. You run the code
clusters = fcluster(Z, 2, criterion='maxclust') but get an error. What is the likely cause?medium
Solution
Step 1: Check parameter types for 'maxclust'
When usingcriterion='maxclust', the thresholdtmust be an integer specifying the number of clusters.Step 2: Identify common error
IfZis not defined or invalid,fclusterraises an error unrelated to parameter types.Step 3: Analyze options
The criterion 'maxclust' requires an integer number of clusters, but 2 is passed as a float is incorrect because 2 as an integer or float is accepted; The threshold parameter must be a float when using 'maxclust' is wrong because threshold can be int; The criterion 'maxclust' expects the threshold to be the maximum cluster distance is false because 'maxclust' uses number of clusters, not distance.Final Answer:
The linkage matrix Z is not defined or invalid -> Option AQuick Check:
Undefined Z causes error, not threshold type [OK]
Hint: Ensure linkage matrix Z is valid before calling fcluster [OK]
Common Mistakes:
- Passing float instead of int for maxclust threshold
- Misunderstanding criterion parameter
- Ignoring linkage matrix validity
5. You have a dataset with 10 points clustered hierarchically. You want exactly 3 clusters. Which
fcluster call correctly achieves this?hard
Solution
Step 1: Understand criteria for exact cluster count
To get exactly 3 clusters, usecriterion='maxclust'witht=3specifying number of clusters.Step 2: Analyze options
fcluster(Z, 3, criterion='maxclust') correctly usesmaxclustwith 3 clusters. fcluster(Z, 3, criterion='distance') uses distance criterion which does not guarantee exact cluster count. Options A and C use incorrect thresholds or criteria.Final Answer:
fcluster(Z, 3, criterion='maxclust') -> Option BQuick Check:
maxclust + t=number of clusters = exact clusters [OK]
Hint: Use criterion='maxclust' with t = desired cluster count [OK]
Common Mistakes:
- Using distance criterion to get exact cluster count
- Passing float threshold for maxclust
- Confusing inconsistent criterion with maxclust
