K-средние, агломерация, коэффициент силуэта, оценка силуэта, обучение без учителя, кластеризация на основе плотности, DBSCAN, OPTICS

Эта статья является частью серии Наука о данных с нуля — Могу ли я, чтобы я смог, серии книг с конспектами лекций (часть 3). (Нажмите здесь, чтобы получить копию части 1 и части 2 сегодня)

Нажмите здесь, чтобы просмотреть предыдущую статью/лекцию «A46: Оценка алгоритма кластеризации — машинное обучение без учителя.»

💐Нажмите здесь, чтобы ПОДПИСАТЬСЯ на меня, чтобы получать новые материалы💐

⚠️ На этой лекции мы будем работать со сложным мультикластерным набором данных.

✅ Предложение: Откройте новый блокнот Jupyter и введите код, читая эту статью, это обучение, и да, «ПОЖАЛУЙСТА, прочитайте комментарий, он очень полезен…..!»

🧘🏻‍♂️ 👉🎯 ›› Сохраняйте спокойствие и сосредоточенность! ›› 🧘🏻‍♂️ 👉🎯

В предыдущей лекции (А45 и А46) мы узнали о ряде алгоритмов кластеризации и их оценке с использованием Коэффициента Силуэта.

Давайте продолжим и поработаем со сложным многокластерным набором данных и сравним производительность различных алгоритмов кластеризации. В этой лекции мы также рассмотрим, насколько важен параметр эпсилон в методах кластеризации на основе плотности. Помните, что не каждый алгоритм подходит для каждого набора данных!

Начиная с некоторого необходимого импорта!

# Required imports
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
sns.set(font_scale=1.3) # setting font size for the whole notebook
sns.set_style(“white”) # if you want to set the style
# Setting display format to retina in matplotlib to see better quality images.
from IPython.display import set_matplotlib_formats
set_matplotlib_formats(‘retina’)
# Lines below are just to ignore warnings
import warnings
warnings.filterwarnings(‘ignore’)

Полезно знать версии!

Набор данных

Давайте прочитаем мультикластерные данные из git.

mulit_cluster_url=”””https://raw.githubusercontent.com/junaidqazi/\
DataSets_Practice_ScienceAcademy/master/multi_cluster_data.csv”””
df=pd.read_csv(mulit_cluster_url)
# Plotting data
plt.figure(figsize = (14, 6)); plt.scatter(df.a,df.b,c=’black’,alpha=0.3)
plt.title(“Multi-cluster dataset”); plt.xticks([]);plt.yticks([]);

Мы видим, что наши данные имеют пять кластеров и несколько разбросанных точек данных, как показано на графике рассеяния выше.

Масштабирование функций

Масштабирование функций всегда рекомендуется, давайте сделаем это! Ознакомьтесь с важностью масштабирования признаков в алгоритмах, основанных на расстоянии, обычно в KNN.

from sklearn.preprocessing import MinMaxScaler, StandardScaler
#Separating featurs
X=df.drop(‘t’,axis=1)
cols=X.columns
X = StandardScaler().fit_transform(X)
X=pd.DataFrame(X,columns=cols)

Итак, теперь у нас есть масштабированные функции в X!

Четыре кластерных метода — k-средних, агломеративный, DBSCAN и OPTICS.

Если вы хотите в деталях понять, как работают эти методы кластеризации, пересмотрите эту лекцию A45: Кластеризация — машинное обучение без присмотра.

Давайте обучим соответствующие экземпляры для четырех выбранных алгоритмов кластеризации и построим их результаты рядом друг с другом.

from sklearn import cluster
# Creating model instances and train on the data (KMeans, agglomerative, OPTIC and DBSCAN)
# Fitting k-means with default parameters other than n_clusters
kmeans = cluster.KMeans(n_clusters=5).fit(X)
# Fitting agglomerative with dafault parameters other than n_clusters
agglm = cluster.AgglomerativeClustering(n_clusters=5).fit(X)
# Fitting DBSCAN — Remember, we don’t need n_clusters for dbscan
dbscan = cluster.DBSCAN().fit(X)
# Fitting OPTICS — Remember, we don’t need n_clusters for optics
optic = cluster.OPTICS().fit(X)
# Plotting results
f, ax = plt.subplots(nrows=2, ncols=2, sharey=True, figsize=(16,8))
ax[0][0].set_title(‘K Means (k=5) — Partitioning clustering’)
ax[0][0].scatter(df.a, df.b, c=kmeans.labels_, cmap=’rainbow’)
ax[0][1].set_title(“Agglomerative (k=5) — Hierarchical clustering”)
ax[0][1].scatter(df.a, df.b, c=agglm.labels_, cmap=’rainbow’)
ax[1][0].set_title(‘DBSCAN with default paremeters’)
ax[1][0].scatter(df.a, df.b, c=dbscan.labels_, cmap=’rainbow’)
ax[1][1].set_title(‘OPTICS with default paremeters’)
ax[1][1].scatter(df.a, df.b, c=optic.labels_, cmap=’rainbow’)
ax[0][0].set_xticks([]);ax[0][0].set_yticks([]);ax[0][1].set_xticks([]);ax[0][1].set_yticks([])
ax[1][0].set_xticks([]);ax[1][0].set_yticks([]);ax[1][1].set_xticks([]);ax[1][1].set_yticks([])
plt.tight_layout()

Всем четырем алгоритмам не удалось кластеризовать данные. Действительно, проблема не в k-means и agglomerative кластеризации.

  • По крайней мере, DBSCAN и/или OPTICS должны работать! верно? -- Однако это тоже не работает!

Что ж, мы знаем, что у DBSCAN есть проблема с обнаружением значимых кластеров. Давайте снова попробуем OPTICS и DBSCAN с соответствующим значением epsilon!

эпсилон — важный параметр для DBSCAN и OPTICS

Мы можем захотеть найти подходящее значение epsilon -- The maximum distance between two samples for one to be considered as in the neighborhood of the other.

optic=cluster.OPTICS(cluster_method=’dbscan’).fit(X)
#try cluster_method=’xi’ — xi-steep method <shift+tab> for documentation! 
print(“optic is our fitted clustering instance”)
optic is our fitted clustering instance

optic не соответствует модели кластеризации в данных. Мы можем использовать следующие атрибуты, чтобы получить метки для диапазона epsilonvalues, используя простой цикл for.

  • optic.reachability_ — это массив досягаемости для каждой точки данных, рассчитанный OPTICS.
  • optic.core_distances_ — это массив расстояний, на которых точки данных становятся кодом
  • optic.ordering_ — это массив упорядоченных индексов точек OPTICS.

Пожалуйста, изучите документацию, чтобы узнать больше.

Двигаясь вперед, давайте получим метки, назначенные алгоритмом для различных значений epsilon, используя простой цикл for.

Итак, значения epsilon 0,1 и 0,15 дают пять кластеров и отмечают некоторый шум (-1). Давайте подгоним экземпляры DBSCAN и OPTICS, используя эти значения, и снова построим кластеры.

Теперь хорошо выглядит!

Итак, с соответствующим значением epsilon мы видим, что и DBSCAN, и OPTICS работают отлично.

Пожалуйста, изучите обширную документацию доступных алгоритмов кластеризации на scikit-learn, там есть несколько важных параметров, которые могут помочь улучшить ваш окончательный алгоритм. Эта ссылка тоже полезна! сформируйте документацию scikit-learn для изучения кластеризации.

В предыдущей лекции мы узнали о коэффициенте силуэта для оценки алгоритма кластеризации. Стандартная формулировка коэффициента силуэта неадекватна при использовании метода кластеризации на основе плотности, и в этой статье предлагается подходящая модификация. Тем не менее, я бы посоветовал вам использовать код из предыдущей лекции и получить коэффициент силуэта для алгоритмов, обученных в этой лекции, чтобы узнать больше.

*******************************************************************

К вашему сведению, приведенные ниже графики относятся к DBSCAN из этой лекции. Вы можете видеть, что кластер синего цвета идентифицирован правильно, однако коэффициент силуэта для всех отдельных образцов меньше 0 (отрицательный). Помните, что знание данных очень важно, одних оценочных матриц не всегда достаточно!

Удачи и продолжайте тренироваться!

*******************************************************************

💐Нажмите здесь, чтобы ПОДПИСАТЬСЯ на меня, чтобы получать новые материалы💐

🌹Продолжайте практиковаться, чтобы освежить навыки и добавить новые навыки🌹

✅🌹💐💐💐🌹✅ Похлопайте и поделитесь ››вы можете помочь нам связаться с тем, кто изо всех сил пытается изучить эти понятия.✅🌹💐💐💐🌹✅

Удачи!

Увидимся на следующей лекции на тему «A48:……………».

Примечание. Полный курс, включая видеолекции и блокноты Jupyter, доступен по следующим ссылкам:

**************************************************************************************************************************************

О докторе Джунаиде Кази:

Доктор. Джунаид Кази — специалист в предметной области, консультант по науке о данных и машинному обучению, а также создатель команды. Он является тренером по профессиональному развитию, наставником, автором, техническим писателем и приглашенным спикером. Доктор. Qazi можно связаться для консалтинговых проектов, технического письма и / или тренингов по повышению квалификации через LinkedIn.

**************************************************************************************************************************************