Skip to content
geeksforgeeks
  • Tutorials
    • Python
    • Java
    • Data Structures & Algorithms
    • ML & Data Science
    • Interview Corner
    • Programming Languages
    • Web Development
    • CS Subjects
    • DevOps And Linux
    • School Learning
    • Practice Coding Problems
  • Courses
    • DSA to Development
    • Get IBM Certification
    • Newly Launched!
      • Master Django Framework
      • Become AWS Certified
    • For Working Professionals
      • Interview 101: DSA & System Design
      • Data Science Training Program
      • JAVA Backend Development (Live)
      • DevOps Engineering (LIVE)
      • Data Structures & Algorithms in Python
    • For Students
      • Placement Preparation Course
      • Data Science (Live)
      • Data Structure & Algorithm-Self Paced (C++/JAVA)
      • Master Competitive Programming (Live)
      • Full Stack Development with React & Node JS (Live)
    • Full Stack Development
    • Data Science Program
    • All Courses
  • Data Science
  • Data Science Projects
  • Data Analysis
  • Data Visualization
  • Machine Learning
  • ML Projects
  • Deep Learning
  • NLP
  • Computer Vision
  • Artificial Intelligence
Open In App
Next Article:
ML | OPTICS Clustering Implementing using Sklearn
Next article icon

ML | OPTICS Clustering Implementing using Sklearn

Last Updated : 22 May, 2024
Comments
Improve
Suggest changes
Like Article
Like
Report

Prerequisites: OPTICS Clustering This article will demonstrate how to implement OPTICS Clustering technique using Sklearn in Python. The dataset used for the demonstration is the Mall Customer Segmentation Data which can be downloaded from Kaggle.

Step 1: Importing the required libraries 

OPTICS (Ordering Points To Identify the Clustering Structure) is a density-based clustering algorithm that is used to identify the structure of clusters in high-dimensional data. It is similar to DBSCAN, but it also produces a cluster ordering that can be used to identify the density-based clusters at multiple levels of granularity.

The implementation of OPTICS clustering using scikit-learn (sklearn) is straightforward. You can use the OPTICS class from the sklearn.cluster module. Here is an example of how to use it:

Python
from sklearn.cluster import OPTICS import numpy as np  # Generate sample data np.random.seed(0) X = np.random.randn(100, 2)  # Initialize the OPTICS clustering model optics = OPTICS(min_samples=5, xi=0.05, min_cluster_size=0.05)  # Fit the model to the data optics.fit(X)  # Get the cluster labels labels = optics.labels_ 

In this example, the min_samples parameter controls the minimum number of samples required to form a dense region, the xi parameter controls the maximum distance between two samples to be considered as a neighborhood, and the min_cluster_size parameter controls the minimum size of a dense region to be considered as a cluster.

The fit method is used to fit the model to the data, and the labels_ attribute is used to get the cluster labels for each sample in the data.

Note that the implementation of OPTICS clustering in scikit-learn is based on the original paper by Ankerst, Mihael, and Markus (1999). You might consider reading this paper to learn more about the algorithm.

Python3
import numpy as np import pandas as pd import matplotlib.pyplot as plt from matplotlib import gridspec from sklearn.cluster import OPTICS, cluster_optics_dbscan from sklearn.preprocessing import normalize, StandardScaler 

Step 2: Loading the Data 

Python3
# Changing the working location to the location of the data cd C:\Users\Dev\Desktop\Kaggle\Customer Segmentation  X = pd.read_csv('Mall_Customers.csv')  # Dropping irrelevant columns drop_features = ['CustomerID', 'Gender'] X = X.drop(drop_features, axis = 1)  # Handling the missing values if any X.fillna(method ='ffill', inplace = True)  X.head() 

Step 3: Preprocessing the Data 

Python3
# Scaling the data to bring all the attributes to a comparable level scaler = StandardScaler() X_scaled = scaler.fit_transform(X)  # Normalizing the data so that the data # approximately follows a Gaussian distribution X_normalized = normalize(X_scaled)  # Converting the numpy array into a pandas DataFrame X_normalized = pd.DataFrame(X_normalized)  # Renaming the columns X_normalized.columns = X.columns  X_normalized.head() 

Step 4: Building the Clustering Model 

Python3
# Building the OPTICS Clustering model optics_model = OPTICS(min_samples = 10, xi = 0.05, min_cluster_size = 0.05)  # Training the model optics_model.fit(X_normalized) 

Step 5: Storing the results of the training 

Python3
# Producing the labels according to the DBSCAN technique with eps = 0.5 labels1 = cluster_optics_dbscan(reachability = optics_model.reachability_,                                    core_distances = optics_model.core_distances_,                                    ordering = optics_model.ordering_, eps = 0.5)  # Producing the labels according to the DBSCAN technique with eps = 2.0 labels2 = cluster_optics_dbscan(reachability = optics_model.reachability_,                                    core_distances = optics_model.core_distances_,                                    ordering = optics_model.ordering_, eps = 2)  # Creating a numpy array with numbers at equal spaces till # the specified range space = np.arange(len(X_normalized))  # Storing the reachability distance of each point reachability = optics_model.reachability_[optics_model.ordering_]  # Storing the cluster labels of each point labels = optics_model.labels_[optics_model.ordering_]  print(labels) 

Step 6: Visualizing the results 

Python3
# Defining the framework of the visualization plt.figure(figsize =(10, 7)) G = gridspec.GridSpec(2, 3) ax1 = plt.subplot(G[0, :]) ax2 = plt.subplot(G[1, 0]) ax3 = plt.subplot(G[1, 1]) ax4 = plt.subplot(G[1, 2])  # Plotting the Reachability-Distance Plot colors = ['c.', 'b.', 'r.', 'y.', 'g.'] for Class, colour in zip(range(0, 5), colors):     Xk = space[labels == Class]     Rk = reachability[labels == Class]     ax1.plot(Xk, Rk, colour, alpha = 0.3) ax1.plot(space[labels == -1], reachability[labels == -1], 'k.', alpha = 0.3) ax1.plot(space, np.full_like(space, 2., dtype = float), 'k-', alpha = 0.5) ax1.plot(space, np.full_like(space, 0.5, dtype = float), 'k-.', alpha = 0.5) ax1.set_ylabel('Reachability Distance') ax1.set_title('Reachability Plot')  # Plotting the OPTICS Clustering colors = ['c.', 'b.', 'r.', 'y.', 'g.'] for Class, colour in zip(range(0, 5), colors):     Xk = X_normalized[optics_model.labels_ == Class]     ax2.plot(Xk.iloc[:, 0], Xk.iloc[:, 1], colour, alpha = 0.3)      ax2.plot(X_normalized.iloc[optics_model.labels_ == -1, 0],         X_normalized.iloc[optics_model.labels_ == -1, 1],        'k+', alpha = 0.1) ax2.set_title('OPTICS Clustering')  # Plotting the DBSCAN Clustering with eps = 0.5 colors = ['c', 'b', 'r', 'y', 'g', 'greenyellow'] for Class, colour in zip(range(0, 6), colors):     Xk = X_normalized[labels1 == Class]     ax3.plot(Xk.iloc[:, 0], Xk.iloc[:, 1], colour, alpha = 0.3, marker ='.')        ax3.plot(X_normalized.iloc[labels1 == -1, 0],         X_normalized.iloc[labels1 == -1, 1],        'k+', alpha = 0.1) ax3.set_title('DBSCAN clustering with eps = 0.5')  # Plotting the DBSCAN Clustering with eps = 2.0 colors = ['c.', 'y.', 'm.', 'g.'] for Class, colour in zip(range(0, 4), colors):     Xk = X_normalized.iloc[labels2 == Class]     ax4.plot(Xk.iloc[:, 0], Xk.iloc[:, 1], colour, alpha = 0.3)          ax4.plot(X_normalized.iloc[labels2 == -1, 0],         X_normalized.iloc[labels2 == -1, 1],        'k+', alpha = 0.1) ax4.set_title('DBSCAN Clustering with eps = 2.0')   plt.tight_layout() plt.show() 


Next Article
ML | OPTICS Clustering Implementing using Sklearn

A

AlindGupta
Improve
Article Tags :
  • Machine Learning
  • python
Practice Tags :
  • Machine Learning
  • python

Similar Reads

    Implementing Agglomerative Clustering using Sklearn
    Agglomerative Clustering is one of the most common hierarchical clustering technique where each data point starts in its own group (cluster) and step by step the closest clusters are joined together until we reach one big cluster. It's a bottom-up approach meaning:Each data point starts in its own c
    3 min read
    Mean Shift Clustering using Sklearn
    Clustering is a fundamental method in unsupervised device learning, and one powerful set of rules for this venture is Mean Shift clustering. Mean Shift is a technique for grouping comparable data factors into clusters primarily based on their inherent characteristics, with our previous understanding
    9 min read
    Implementing DBSCAN algorithm using Sklearn
    Prerequisites: DBSCAN Algorithm Density Based Spatial Clustering of Applications with Noise(DBCSAN) is a clustering algorithm which was proposed in 1996. In 2014, the algorithm was awarded the 'Test of Time' award at the leading Data Mining conference, KDD. Dataset - Credit Card Step 1: Importing th
    3 min read
    ML | OPTICS Clustering Explanation
    OPTICS (Ordering Points To Identify the Clustering Structure) is a density-based clustering algorithm similar to DBSCAN clustering. Unlike DBSCAN which struggles with varying densities. OPTICS does not directly assign clusters but instead creates a reachability plot which visually represents cluster
    4 min read
    Image compression using K-means clustering
    Prerequisite: K-means clustering  The internet is filled with huge amounts of data in the form of images. People upload millions of pictures every day on social media sites such as Instagram, and Facebook and cloud storage platforms such as google drive, etc. With such large amounts of data, image c
    6 min read
geeksforgeeks-footer-logo
Corporate & Communications Address:
A-143, 7th Floor, Sovereign Corporate Tower, Sector- 136, Noida, Uttar Pradesh (201305)
Registered Address:
K 061, Tower K, Gulshan Vivante Apartment, Sector 137, Noida, Gautam Buddh Nagar, Uttar Pradesh, 201305
GFG App on Play Store GFG App on App Store
Advertise with us
  • Company
  • About Us
  • Legal
  • Privacy Policy
  • In Media
  • Contact Us
  • Advertise with us
  • GFG Corporate Solution
  • Placement Training Program
  • Languages
  • Python
  • Java
  • C++
  • PHP
  • GoLang
  • SQL
  • R Language
  • Android Tutorial
  • Tutorials Archive
  • DSA
  • Data Structures
  • Algorithms
  • DSA for Beginners
  • Basic DSA Problems
  • DSA Roadmap
  • Top 100 DSA Interview Problems
  • DSA Roadmap by Sandeep Jain
  • All Cheat Sheets
  • Data Science & ML
  • Data Science With Python
  • Data Science For Beginner
  • Machine Learning
  • ML Maths
  • Data Visualisation
  • Pandas
  • NumPy
  • NLP
  • Deep Learning
  • Web Technologies
  • HTML
  • CSS
  • JavaScript
  • TypeScript
  • ReactJS
  • NextJS
  • Bootstrap
  • Web Design
  • Python Tutorial
  • Python Programming Examples
  • Python Projects
  • Python Tkinter
  • Python Web Scraping
  • OpenCV Tutorial
  • Python Interview Question
  • Django
  • Computer Science
  • Operating Systems
  • Computer Network
  • Database Management System
  • Software Engineering
  • Digital Logic Design
  • Engineering Maths
  • Software Development
  • Software Testing
  • DevOps
  • Git
  • Linux
  • AWS
  • Docker
  • Kubernetes
  • Azure
  • GCP
  • DevOps Roadmap
  • System Design
  • High Level Design
  • Low Level Design
  • UML Diagrams
  • Interview Guide
  • Design Patterns
  • OOAD
  • System Design Bootcamp
  • Interview Questions
  • Inteview Preparation
  • Competitive Programming
  • Top DS or Algo for CP
  • Company-Wise Recruitment Process
  • Company-Wise Preparation
  • Aptitude Preparation
  • Puzzles
  • School Subjects
  • Mathematics
  • Physics
  • Chemistry
  • Biology
  • Social Science
  • English Grammar
  • Commerce
  • World GK
  • GeeksforGeeks Videos
  • DSA
  • Python
  • Java
  • C++
  • Web Development
  • Data Science
  • CS Subjects
@GeeksforGeeks, Sanchhaya Education Private Limited, All rights reserved
We use cookies to ensure you have the best browsing experience on our website. By using our site, you acknowledge that you have read and understood our Cookie Policy & Privacy Policy
Lightbox
Improvement
Suggest Changes
Help us improve. Share your suggestions to enhance the article. Contribute your expertise and make a difference in the GeeksforGeeks portal.
geeksforgeeks-suggest-icon
Create Improvement
Enhance the article with your expertise. Contribute to the GeeksforGeeks community and help create better learning resources for all.
geeksforgeeks-improvement-icon
Suggest Changes
min 4 words, max Words Limit:1000

Thank You!

Your suggestions are valuable to us.

What kind of Experience do you want to share?

Interview Experiences
Admission Experiences
Career Journeys
Work Experiences
Campus Experiences
Competitive Exam Experiences