K-средние, агломерация, коэффициент силуэта, оценка силуэта, обучение без учителя, кластеризация на основе плотности, DBSCAN, OPTICS
Эта статья является частью серии Наука о данных с нуля — Могу ли я, чтобы я смог, серии книг с конспектами лекций (часть 3). (Нажмите здесь, чтобы получить копию части 1 и части 2 сегодня)
💐Нажмите здесь, чтобы ПОДПИСАТЬСЯ на меня, чтобы получать новые материалы💐
⚠️ На этой лекции мы будем работать со сложным мультикластерным набором данных.
✅ Предложение: Откройте новый блокнот 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
не соответствует модели кластеризации в данных. Мы можем использовать следующие атрибуты, чтобы получить метки для диапазона epsilon
values, используя простой цикл 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, доступен по следующим ссылкам:
- Книги на линпабе
- Ссылка на SkillShare (два месяца бесплатно для новых подписчиков)
- Бесплатно на YouTube
- Академия Науки
- https://karobarlinik.com — для всех ваших цифровых потребностей!
**************************************************************************************************************************************
Доктор. Джунаид Кази — специалист в предметной области, консультант по науке о данных и машинному обучению, а также создатель команды. Он является тренером по профессиональному развитию, наставником, автором, техническим писателем и приглашенным спикером. Доктор. Qazi можно связаться для консалтинговых проектов, технического письма и / или тренингов по повышению квалификации через LinkedIn.
**************************************************************************************************************************************