What is Shattering a set of Points and VC Dimensions

Shattering is a key notion in machine learning that refers to a classifier's capacity to accurately distinguish any arbitrary labeling of a group of points. Strictly speaking, a classifier breaks a collection of points if it can divide them into all viable binary categories. The greatest number of points that a classifier is capable of shattering is specified by the VC dimension, which measures a classifier's ability to classify data. For practitioners of machine learning, it is essential to comprehend the idea of shattering and the VC dimension. In this post, we will closely look at shattering a set points VC dimensions.

What is Shattering a set of Points?

When a classifier is able to properly distinguish any potential labeling of the points, it is said to be "shattering" a collection of points. More precisely, a classifier breaks a collection of points if it can properly categorize every potential positive or negative labeling of the points.

In other words, if we have a collection of points in a space, we can label each point as positive or negative. If a classifier can accurately divide the points into positive and negative groups regardless of how we choose to label them, then this set of points is said to be shattered.

Consider a collection of points in a two-dimensional space as an actual example. Either red or blue labels can be placed next to each point. A classifier can spline a collection of points if it can draw a line in the plane with all the red points on one side and all the blue points on the other. This indicates that every point labeled as red or blue will result in the classifier properly classifying it.

What is VC Dimensions?

The VC dimension is a key notion in machine learning that quantifies a classifier's ability to understand complicated patterns in data. The greatest group of points that a classifier can split into two or more different regions is what is referred to as the size of the largest set. The VC dimension of a classifier and its capacity to shatter sets of points are closely correlated, with larger VC dimensions implying more capacity to shatter complicated sets of points. Contrarily, a classifier with a low VC dimension struggles to understand complicated patterns and is more likely to overfit or underfit the data.

Samples can be used to show how fracturing a group of points and the VC dimension are related. A linear classifier, for example, in a two-dimensional space, has a VC dimension of two, which indicates that it can break every set of two points but not all sets of three points. As opposed to this, a polynomial classifier in a two-dimensional space has a VC dimension that rises with the polynomial's degree, enabling it to break increasingly intricate collections of points.

Finding the VC Dimension

Finding a classifier's VC dimension entails calculating the maximum number of points it can separate while taking all potential point labels into account. Analyzing how many unique dichotomies the classifier can produce for a given set of points may help with this. The maximum amount of points that the classifier can lose is then referred to as the VC dimension.

For instance, given a two-dimensional space, the maximum number of points that a linear classifier can shatter can be determined while taking into account every conceivable labeling for the points. The fact that a linear classifier can fracture any set of two points but not all sets of three points proves that it has a VC dimension of two in a two-dimensional space. This suggests that a linear classifier can completely separate any two points in a two-dimensional space, but not all sets of three points.

Implementation of the Procedure for Finding the VC Dimension of a Classifier in Python

The method for determining a linear classifier's VC dimension in Python is implemented as follows −

import itertools

import numpy as np
from sklearn.linear_model import LinearRegression

def generate_dichotomies(points):
    """Generate all possible dichotomies of a set of points."""
    dichotomies = []
    for combo in itertools.product([-1, 1], repeat=len(points)):
        dichotomy = {}
        for i, point in enumerate(points):
            dichotomy[tuple(point)] = combo[i]
    return dichotomies

def can_shatter(points, dichotomy):
    """Check if a linear classifier can shatter a given dichotomy."""
    X = np.array([list(point) for point in dichotomy.keys()])
    y = np.array(list(dichotomy.values()))
    clf = LinearRegression().fit(X, y)
    predictions = np.sign(clf.predict(X))
    return np.array_equal(predictions, y)

def find_vc_dimension(points):
    """Find the VC dimension of a linear classifier."""
    max_points = len(points)
    min_points = 1
    while min_points < max_points:
        mid = (min_points + max_points) // 2
        dichotomies = generate_dichotomies(points[:mid])
        if all(can_shatter(points[:mid], d) for d in dichotomies):
            min_points = mid + 1
            max_points = mid
    return min_points - 1

The code is made to determine a linear classifier's VC dimension in a two-dimensional space. Its three key components are to find vc dimension, can shatter, and generate dichotomies.

‘generate dichotomies’ takes a collection of points as input and creates all of the set's potential dichotomies. When a collection of points is divided into two classes, it is called a dichotomy. For instance, a dichotomy of three points can allocate two points to one class and one point to the other. The function generates all conceivable combinations of the classes (-1 and 1) using the itertools.product method and builds a dictionary containing each point and its related class. The list is then returned once each dichotomy has been added to it.

‘can shatter’ determines if a linear classifier can shatter a dichotomy given a collection of points and a dichotomy as input. A linear classifier is a function that uses a straight line to divide the points into two categories. From the dichotomy dictionary, the function generates a matrix X of the points and a vector Y of the related classes. The LinearRegression function from scikit-learn is then used to fit a line to the points and their classes. Lastly, it determines if the linear model's predictions correspond to the dichotomy dictionary's actual classes.

‘find vc dimension’ utilizes binary search to determine the smallest number of points needed to shatter a set of points after receiving a set of points as input. The first thing it does is set min points to zero and max points to the length of the set of points. The 'can-shatter' function is then used to determine if the linear classifier can shatter all dichotomies in the smaller subset after repeatedly splitting the collection of points into two subsets. In the event that it can, it changes max points to the midpoint of the current subset and updates min points to the midpoint of the current subset in the event that it cannot. This operation is repeated until min points and max points are equal, at which time min points - 1—the classifier's VC dimension—are returned.

Now, simply use the find vc dimension function with the set of points as an input to utilize this code. The points must be defined as a list of tuples. Examples include −


points = [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
vc_dimension = find_vc_dimension(points)



This code determines a collection of points made up of five points on a diagonal line's VC dimension for a linear classifier in a two-dimensional space. As anticipated, there are two VC dimensions.


In conclusion, shattering a set of points refers to a classifier's capacity to accurately categorize every alternative arrangement of the set of points. The greatest number of points that can be shattered by a classifier is measured by its VC dimension, which is a measure of its complexity. Knowing these ideas is crucial for machine learning since it enables us to assess a model's expressiveness and generalizability to other types of data. We can predict the number of samples required to obtain a particular level of accuracy and prevent overfitting by knowing the VC dimension of a classifier.

Updated on: 25-Apr-2023

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started