Scikit Learn - методы кластеризации
Здесь мы изучим методы кластеризации в Sklearn, которые помогут идентифицировать какое-либо сходство в выборках данных.
Методы кластеризации - один из самых полезных методов машинного обучения без учителя, используемый для поиска шаблонов сходства и взаимосвязи между выборками данных. После этого они группируют эти образцы в группы, имеющие сходство на основе характеристик. Кластеризация определяет внутреннюю группировку среди имеющихся немаркированных данных, поэтому это важно.
Библиотека Scikit-learn имеет sklearn.clusterдля выполнения кластеризации немаркированных данных. В этом модуле scikit-leran есть следующие методы кластеризации:
KMeans
Этот алгоритм вычисляет центроиды и выполняет итерацию, пока не найдет оптимальный центроид. Требуется указать количество кластеров, поэтому предполагается, что они уже известны. Основная логика этого алгоритма состоит в том, чтобы сгруппировать данные, разделяя выборки в n группах с равной дисперсией, минимизируя критерии, известные как инерция. Количество кластеров, идентифицированных алгоритмом, представлено буквой K.
Scikit-learn имеют sklearn.cluster.KMeansмодуль для выполнения кластеризации K-средних. При вычислении центров кластеров и значения инерции параметр с именемsample_weight позволяет sklearn.cluster.KMeans модуль для присвоения большего веса некоторым образцам.
Распространение сродства
Этот алгоритм основан на концепции «передачи сообщений» между разными парами выборок до сходимости. Перед запуском алгоритма не требуется указывать количество кластеров. Алгоритм имеет временную сложность порядка (2), что является его самым большим недостатком.
Scikit-learn имеют sklearn.cluster.AffinityPropagation модуль для выполнения кластеризации Affinity Propagation.
Средний сдвиг
Этот алгоритм в основном обнаруживает blobsв гладкой плотности образцов. Он назначает точки данных кластерам итеративно, смещая точки в сторону максимальной плотности точек данных. Вместо того, чтобы полагаться на параметр с именемbandwidth диктуя размер области для поиска, она автоматически устанавливает количество кластеров.
Scikit-learn имеют sklearn.cluster.MeanShift модуль для выполнения кластеризации среднего сдвига.
Спектральная кластеризация
Перед кластеризацией этот алгоритм в основном использует собственные значения, то есть спектр матрицы подобия данных, чтобы выполнить уменьшение размерности в меньшем количестве измерений. Использование этого алгоритма не рекомендуется при большом количестве кластеров.
Scikit-learn имеют sklearn.cluster.SpectralClustering модуль для выполнения спектральной кластеризации.
Иерархическая кластеризация
Этот алгоритм строит вложенные кластеры путем последовательного слияния или разделения кластеров. Эта кластерная иерархия представлена в виде дендрограммы, то есть дерева. Он попадает в следующие две категории -
Agglomerative hierarchical algorithms- В этом виде иерархического алгоритма каждая точка данных обрабатывается как единый кластер. Затем он последовательно агломерирует пары кластеров. Здесь используется восходящий подход.
Divisive hierarchical algorithms- В этом иерархическом алгоритме все точки данных рассматриваются как один большой кластер. При этом процесс кластеризации включает в себя разделение одного большого кластера на несколько небольших кластеров с использованием нисходящего подхода.
Scikit-learn имеют sklearn.cluster.AgglomerativeClustering модуль для выполнения агломеративной иерархической кластеризации.
DBSCAN
Это означает “Density-based spatial clustering of applications with noise”. Этот алгоритм основан на интуитивном понятии «кластеры» и «шум», что кластеры представляют собой плотные области с более низкой плотностью в пространстве данных, разделенные областями с более низкой плотностью точек данных.
Scikit-learn имеют sklearn.cluster.DBSCANмодуль для выполнения кластеризации DBSCAN. Есть два важных параметра, а именно min_samples и eps, которые используются этим алгоритмом для определения плотности.
Более высокое значение параметра min_samples или меньшее значение параметра eps укажет на более высокую плотность точек данных, которая необходима для формирования кластера.
ОПТИКА
Это означает “Ordering points to identify the clustering structure”. Этот алгоритм также находит кластеры на основе плотности в пространственных данных. Его основная рабочая логика похожа на DBSCAN.
Он устраняет главную слабость алгоритма DBSCAN - проблему обнаружения значимых кластеров в данных различной плотности - путем упорядочивания точек в базе данных таким образом, что пространственно ближайшие точки становятся соседями в упорядочении.
Scikit-learn имеют sklearn.cluster.OPTICS модуль для выполнения кластеризации ОПТИКИ.
БЕРЕЗА
Это означает Сбалансированное итеративное сокращение и кластеризацию с использованием иерархий. Он используется для выполнения иерархической кластеризации больших наборов данных. Он строит дерево с именемCFT т.е. Characteristics Feature Tree, для заданных данных.
Преимущество CFT состоит в том, что узлы данных, называемые узлами CF (Characteristics Feature), содержат необходимую информацию для кластеризации, что дополнительно исключает необходимость хранить все входные данные в памяти.
Scikit-learn имеют sklearn.cluster.Birch модуль для выполнения кластеризации БЕРЕЗЫ.
Сравнение алгоритмов кластеризации
В следующей таблице будет представлено сравнение (на основе параметров, масштабируемости и метрики) алгоритмов кластеризации в scikit-learn.
Старший Нет | Название алгоритма | Параметры | Масштабируемость | Используемая метрика |
---|---|---|---|---|
1 | К-средние | Кол-во кластеров | Очень большие n_samples | Расстояние между точками. |
2 | Распространение сродства | Демпфирование | Это не масштабируется с помощью n_samples | График Расстояние |
3 | Средний сдвиг | Пропускная способность | Это не масштабируется с помощью n_samples. | Расстояние между точками. |
4 | Спектральная кластеризация | Кол-во кластеров | Средний уровень масштабируемости с n_samples. Небольшой уровень масштабируемости с n_clusters. | График Расстояние |
5 | Иерархическая кластеризация | Пороговое значение расстояния или количество кластеров | Большие n_samples Большие n_clusters | Расстояние между точками. |
6 | DBSCAN | Размер района | Очень большие n_samples и средние n_clusters. | Расстояние до ближайшей точки |
7 | ОПТИКА | Минимальное членство в кластере | Очень большие n_samples и большие n_clusters. | Расстояние между точками. |
8 | БЕРЕЗА | Порог, коэффициент ветвления | Большие n_samples Большие n_clusters | Евклидово расстояние между точками. |
Кластеризация K-средних в наборе данных Scikit-learn Digit
В этом примере мы применим кластеризацию K-средних к набору данных цифр. Этот алгоритм идентифицирует похожие цифры без использования исходной информации на этикетке. Реализация выполняется на ноутбуке Jupyter.
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
from sklearn.cluster import KMeans
from sklearn.datasets import load_digits
digits = load_digits()
digits.data.shape
Вывод
1797, 64)
Эти выходные данные показывают, что набор цифровых данных содержит 1797 образцов с 64 характеристиками.
пример
Теперь выполните кластеризацию K-средних следующим образом:
kmeans = KMeans(n_clusters = 10, random_state = 0)
clusters = kmeans.fit_predict(digits.data)
kmeans.cluster_centers_.shape
Вывод
(10, 64)
Эти выходные данные показывают, что кластеризация K-средних создала 10 кластеров с 64 функциями.
пример
fig, ax = plt.subplots(2, 5, figsize = (8, 3))
centers = kmeans.cluster_centers_.reshape(10, 8, 8)
for axi, center in zip(ax.flat, centers):
axi.set(xticks = [], yticks = [])
axi.imshow(center, interpolation = 'nearest', cmap = plt.cm.binary)
Вывод
Ниже приведены изображения, показывающие центры кластеров, полученные с помощью кластеризации K-средних.
Затем скрипт Python ниже сопоставит изученные метки кластера (с помощью K-средних) с истинными метками, найденными в них -
from scipy.stats import mode
labels = np.zeros_like(clusters)
for i in range(10):
mask = (clusters == i)
labels[mask] = mode(digits.target[mask])[0]
Мы также можем проверить точность с помощью приведенной ниже команды.
from sklearn.metrics import accuracy_score
accuracy_score(digits.target, labels)
Вывод
0.7935447968836951
Полный пример реализации
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
from sklearn.cluster import KMeans
from sklearn.datasets import load_digits
digits = load_digits()
digits.data.shape
kmeans = KMeans(n_clusters = 10, random_state = 0)
clusters = kmeans.fit_predict(digits.data)
kmeans.cluster_centers_.shape
fig, ax = plt.subplots(2, 5, figsize = (8, 3))
centers = kmeans.cluster_centers_.reshape(10, 8, 8)
for axi, center in zip(ax.flat, centers):
axi.set(xticks=[], yticks = [])
axi.imshow(center, interpolation = 'nearest', cmap = plt.cm.binary)
from scipy.stats import mode
labels = np.zeros_like(clusters)
for i in range(10):
mask = (clusters == i)
labels[mask] = mode(digits.target[mask])[0]
from sklearn.metrics import accuracy_score
accuracy_score(digits.target, labels)