
- SciPy - Home
- SciPy - Introduction
- SciPy - Environment Setup
- SciPy - Basic Functionality
- SciPy - Relationship with NumPy
- SciPy Clusters
- SciPy - Clusters
- SciPy - Hierarchical Clustering
- SciPy - K-means Clustering
- SciPy - Distance Metrics
- SciPy Constants
- SciPy - Constants
- SciPy - Mathematical Constants
- SciPy - Physical Constants
- SciPy - Unit Conversion
- SciPy - Astronomical Constants
- SciPy - Fourier Transforms
- SciPy - FFTpack
- SciPy - Discrete Fourier Transform (DFT)
- SciPy - Fast Fourier Transform (FFT)
- SciPy Integration Equations
- SciPy - Integrate Module
- SciPy - Single Integration
- SciPy - Double Integration
- SciPy - Triple Integration
- SciPy - Multiple Integration
- SciPy Differential Equations
- SciPy - Differential Equations
- SciPy - Integration of Stochastic Differential Equations
- SciPy - Integration of Ordinary Differential Equations
- SciPy - Discontinuous Functions
- SciPy - Oscillatory Functions
- SciPy - Partial Differential Equations
- SciPy Interpolation
- SciPy - Interpolate
- SciPy - Linear 1-D Interpolation
- SciPy - Polynomial 1-D Interpolation
- SciPy - Spline 1-D Interpolation
- SciPy - Grid Data Multi-Dimensional Interpolation
- SciPy - RBF Multi-Dimensional Interpolation
- SciPy - Polynomial & Spline Interpolation
- SciPy Curve Fitting
- SciPy - Curve Fitting
- SciPy - Linear Curve Fitting
- SciPy - Non-Linear Curve Fitting
- SciPy - Input & Output
- SciPy - Input & Output
- SciPy - Reading & Writing Files
- SciPy - Working with Different File Formats
- SciPy - Efficient Data Storage with HDF5
- SciPy - Data Serialization
- SciPy Linear Algebra
- SciPy - Linalg
- SciPy - Matrix Creation & Basic Operations
- SciPy - Matrix LU Decomposition
- SciPy - Matrix QU Decomposition
- SciPy - Singular Value Decomposition
- SciPy - Cholesky Decomposition
- SciPy - Solving Linear Systems
- SciPy - Eigenvalues & Eigenvectors
- SciPy Image Processing
- SciPy - Ndimage
- SciPy - Reading & Writing Images
- SciPy - Image Transformation
- SciPy - Filtering & Edge Detection
- SciPy - Top Hat Filters
- SciPy - Morphological Filters
- SciPy - Low Pass Filters
- SciPy - High Pass Filters
- SciPy - Bilateral Filter
- SciPy - Median Filter
- SciPy - Non - Linear Filters in Image Processing
- SciPy - High Boost Filter
- SciPy - Laplacian Filter
- SciPy - Morphological Operations
- SciPy - Image Segmentation
- SciPy - Thresholding in Image Segmentation
- SciPy - Region-Based Segmentation
- SciPy - Connected Component Labeling
- SciPy Optimize
- SciPy - Optimize
- SciPy - Special Matrices & Functions
- SciPy - Unconstrained Optimization
- SciPy - Constrained Optimization
- SciPy - Matrix Norms
- SciPy - Sparse Matrix
- SciPy - Frobenius Norm
- SciPy - Spectral Norm
- SciPy Condition Numbers
- SciPy - Condition Numbers
- SciPy - Linear Least Squares
- SciPy - Non-Linear Least Squares
- SciPy - Finding Roots of Scalar Functions
- SciPy - Finding Roots of Multivariate Functions
- SciPy - Signal Processing
- SciPy - Signal Filtering & Smoothing
- SciPy - Short-Time Fourier Transform
- SciPy - Wavelet Transform
- SciPy - Continuous Wavelet Transform
- SciPy - Discrete Wavelet Transform
- SciPy - Wavelet Packet Transform
- SciPy - Multi-Resolution Analysis
- SciPy - Stationary Wavelet Transform
- SciPy - Statistical Functions
- SciPy - Stats
- SciPy - Descriptive Statistics
- SciPy - Continuous Probability Distributions
- SciPy - Discrete Probability Distributions
- SciPy - Statistical Tests & Inference
- SciPy - Generating Random Samples
- SciPy - Kaplan-Meier Estimator Survival Analysis
- SciPy - Cox Proportional Hazards Model Survival Analysis
- SciPy Spatial Data
- SciPy - Spatial
- SciPy - Special Functions
- SciPy - Special Package
- SciPy Advanced Topics
- SciPy - CSGraph
- SciPy - ODR
- SciPy Useful Resources
- SciPy - Reference
- SciPy - Quick Guide
- SciPy - Cheatsheet
- SciPy - Useful Resources
- SciPy - Discussion
SciPy - cut_tree() Function
The cut_tree() method in SciPy helps us to divide a hierarchical clustering tree(dendogram) into smaller clusters to form flat clusters.
This method consists of "cutting" the linkage matrix at a chosen level, often generated by the linkage() function. Flat clusters are generated from this cut and can be used for further analysis or plotting, for example, putting together related data points.
This method is helpful because we can know which data point belongs to which cluster and also tells how the data points is grouped together at the different levels of similarity or distance.
Syntax
Following is the syntax of the SciPy cut_tree() method −
.cut_tree(Z, n_clusters=None, height=None)
Parameters
This method accepts 3 parameters in which two are optional −
Z: The linkage matrix
n_clusters(optional): Number of clusters you want e.g.(2, 3, 4, etc.)
height(optional): The distance at which you want to cut the tree.
Return Value
A 2D array where each row corresponds to a data point, and each column represents cluster labels at different levels.
Example 1
Following is the basic SciPy cut_tree() method that illustrates the result of hierarchical clustering by cutting the tree into clusters.
This code demonstrates how to split the dendrogram into two clusters after performing hierarchical clustering on a dataset.
import numpy as np from scipy.cluster.hierarchy import linkage, cut_tree data = np.array([[1, 2], [3, 4], [5, 6], [7, 8]]) # Perform hierarchical clustering Z = linkage(data, method='single') # Cut the tree to form 2 clusters clusters = cut_tree(Z, n_clusters=2) print("Clusters:\n", clusters)
Output of the above code is as follows
Clusters: [[0] [0] [0] [1]]
Example 2
In the following code, linkage() makes use of the Ward method for carrying out hierarchical clustering on the randomly generated data. Once cut_tree() has split the data into three clusters, it prints the cluster assignments for the first ten data points. The output lists which data points belong to each of the three clusters. Following is the code −
import numpy as np from scipy.cluster.hierarchy import linkage, cut_tree from numpy.random import default_rng # Generate random data rng = default_rng() data = rng.random((60, 3)) # Perform hierarchical clustering using the 'ward' method Z = linkage(data, method='ward') # Cut the tree to form 3 clusters clusters = cut_tree(Z, n_clusters=3) print("Clusters:\n", clusters[:10])
Output of the above code is as follows
Clusters: [[0] [1] [1] [2] [0] [1] [0] [2] [0] [2]]