Упорядочивание точек для определения структуры кластера (OPTICS)) — это метод кластеризации на основе плотности, который позволяет разбивать данные на группы со схожими характеристиками (кластеры).
Он устраняет один из основных недостатков DBSCAN. Проблема обнаружения значимых кластеров в данных различной плотности.
При кластеризации на основе плотности кластеры определяются как плотные области точек данных, разделенные областями с низкой плотностью.
Он добавляет еще два термина к концепции кластеризации DBSCAN. Они есть:
- Расстояние до ядра: это минимальное значение радиуса, необходимое для классификации данной точки как точки ядра. если данная точка не является центральной точкой, то ее базовое расстояние не определено.
2. Расстояние досягаемости: оно определяется по отношению к другой точке данных «q». Расстояние досягаемости между точками p и q. Обратите внимание, что расстояние достижимости не определено, если 'q' не является основной точкой.
Несколько преимуществ:
· Кластеризация OPTICS не требует заранее определенного количества кластеров.
· Грозди могут быть любой формы, в том числе и несферической.
· Возможность идентифицировать выбросы (данные о шуме)
Недостатки:
· Это не удается, если между кластерами нет перепадов плотности.
· Он также чувствителен к параметрам, определяющим плотность (радиус и минимальное количество точек), и для правильной настройки параметров требуется знание предметной области.
Теперь давайте разберемся с частью кодирования.
Сначала мы загрузим наш набор данных и выполним несколько шагов предварительной обработки данных, таких как масштабирование.
#OPTICS Clustering 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 X = pd.read_csv('Mall_Customers.csv') #Dropping irrelevant columns drop_features = ['CustomerID', 'Genre'] X = X.drop(drop_features, axis = 1) #Handling the missing values if any X.fillna(method ='ffill', inplace = True) X.head() #Pre-processing of data #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()
Теперь мы построим модель, используя min_samples = 10, xi = 0,05, min_cluster_size = 0,05
#Building the OPTICS Clustering model optics_model = OPTICS(min_samples = 10, xi = 0.05, min_cluster_size = 0.05) '''xi:float, between 0 and 1, optional (default=0.05) Determines the minimum steepness on the reachability plot that constitutes a cluster boundary. For example, an upwards point in the reachability plot is defined by the ratio from one point to its successor being at most 1-xi. Used only when cluster_method='xi'. ''' #Training the model optics_model.fit(X_normalized)
Вот и все... наша модель OPTICS готова... Мы можем распечатать метки кластера, используя optics_model.labels_.
Теперь мы сделаем еще один шаг, сравнив производительность OPTICS и DBSCAN, чтобы убедиться, что DBSCAN не имеет кластеризации при различной плотности.
#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_] #Visualizing the results #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()
Далее у нас есть еще один интересный и продвинутый метод кластеризации, специально используемый для исследования данных и визуализации многомерных данных, который называется T-SNE.
Если вы хотите узнать больше о продвинутых типах кластеризации, следуйте моей другой статье Кластеризация от А до Я.
Некоторые из моих альтернативных сайтов в Интернете: Facebook, Instagram, Udemy, Blogger, Issuu и другие.
Также доступно на Quora @ https://www.quora.com/profile/Rupak-Bob-Roy