ЧТО ТАКОЕ Кластеризация?

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

Есть несколько методов, которые вы можете использовать, чтобы определить оптимальное количество кластеров для ваших данных, и это будет подробно показано ниже.

ОПРЕДЕЛЕНИЕ ОПТИМАЛЬНОГО КОЛИЧЕСТВА КЛАСТЕРОВ

1. МЕТОД ИЗОБРАЖЕНИЯ

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

Пример локтевого метода

В приведенном ниже примере кода создается поиск оптимального значения для k.

# набор данных кластеризации
# определение k методом локтя

from sklearn.cluster import KMeans
from sklearn import metrics
from scipy.spatial.distance import cdist
import numpy as np
import matplotlib.pyplot as plt

x1 = np.array ([3, 1, 1, 2, 1, 6, 6, 6, 5, 6, 7, 8, 9, 8, 9, 9, 8])
x2 = np. массив ([5, 4, 5, 6, 5, 8, 6, 7, 6, 7, 1, 2, 1, 2, 3, 2, 3])

plt.plot ()
plt.xlim ([0, 10])
plt.ylim ([0, 10])
plt.title ('Dataset')
plt .scatter (x1, x2)
plt.show ()

# создать новый график и данные
plt.plot ()
X = np.array (list (zip (x1, x2))). reshape (len (x1), 2)
colors = ['b', 'g', 'r']
маркеры = ['o', 'v', 's']

# k означает определение k
искажений = []
K = range (1,10)
для k в K:
kmeanModel = KMeans (n_clusters = k) .fit (X )
kmeanModel.fit (X)
distortions.append (sum (np.min (cdist (X, kmeanModel.cluster_centers_, 'euclidean'), axis = 1)) / X.shape [0] )

# Постройте изгиб
plt.plot (K, distortions, 'bx-')
plt.xlabel ('k')
plt.ylabel ('Distortion')
plt .title ('Метод локтя, показывающий оптимальное k')
plt.show ()

2. АНАЛИЗ СИЛУЭТА

Анализ силуэта можно использовать для изучения разделительного расстояния между результирующими кластерами. График силуэта отображает меру того, насколько близко каждая точка в одном кластере находится к точкам в соседних кластерах, и, таким образом, обеспечивает способ визуальной оценки таких параметров, как количество кластеров. Эта мера имеет диапазон [-1, 1].

Где 1 означает, что точки очень близки к их собственному кластеру и далеки от других кластеров, тогда как -1 указывает, что точки находятся близко к соседним кластерам.

Ссылка для изучения Scikit - код Python можно найти в этом учебном пособии.

3. СТАТИСТИКА РАЗРЕШЕНИЙ

Статистика разрыва - это критерий качества кластеризации, где для каждого гипотетического числа кластеров k она сравнивает две функции: журнал суммы квадратов внутри кластера (wss) с ее ожиданием при нулевом эталонном распределении данных.

# compute gap statistic
set.seed(123)
gap_stat <- clusGap(df, FUN = kmeans, nstart = 25,
                    K.max = 10, B = 50)
# Print the result
print(gap_stat, method = "firstmax")
## Clustering Gap statistic ["clusGap"] from call:
## clusGap(x = df, FUNcluster = kmeans, K.max = 10, B = 50, nstart = 25)
## B=50 simulated reference sets, k = 1..10; spaceH0="scaledPCA"
##  --> Number of clusters (method 'firstmax'): 4
##           logW   E.logW       gap     SE.sim
##  [1,] 3.458369 3.638250 0.1798804 0.03653200
##  [2,] 3.135112 3.371452 0.2363409 0.03394132
##  [3,] 2.977727 3.235385 0.2576588 0.03635372
##  [4,] 2.826221 3.120441 0.2942199 0.03615597
##  [5,] 2.738868 3.020288 0.2814197 0.03950085
##  [6,] 2.669860 2.933533 0.2636730 0.03957994
##  [7,] 2.598748 2.855759 0.2570109 0.03809451
##  [8,] 2.531626 2.784000 0.2523744 0.03869283
##  [9,] 2.468162 2.716498 0.2483355 0.03971815
## [10,] 2.394884 2.652241 0.2573567 0.04104674

Мы можем визуализировать результаты с помощью fviz_gap_stat, который предлагает четыре кластера как оптимальное количество кластеров.

fviz_gap_stat(gap_stat)

4. ИЕРАРХИЧЕСКАЯ КЛАСТЕРИЗАЦИЯ - D эндрограмма

Дендрограмма - это древовидная диаграмма, на которой записаны последовательности слияния или разделения.

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

Как выбрать оптимальное количество кластеров на основе результатов этого анализа, дендограммы? Как правило, ищите группы с самыми длинными «ветвями», чем они короче, тем больше они похожи на следующие «веточки» и «листья». Но имейте в виду, что, как всегда, оптимальное количество также будет зависеть от контекста, экспертных знаний, применения и т. Д.

>>> from scipy.cluster import hierarchy
>>> import matplotlib.pyplot as plt
>>> ytdist = np.array([662., 877., 255., 412., 996., 295., 468., 268.,
...                    400., 754., 564., 138., 219., 869., 669.])
>>> Z = hierarchy.linkage(ytdist, 'single')
>>> plt.figure()
>>> dn = hierarchy.dendrogram(Z)
>>> hierarchy.set_link_color_palette(['m', 'c', 'y', 'k'])
>>> fig, axes = plt.subplots(1, 2, figsize=(8, 3))
>>> dn1 = hierarchy.dendrogram(Z, ax=axes[0], above_threshold_color='y',
...                            orientation='top')
>>> dn2 = hierarchy.dendrogram(Z, ax=axes[1],
...                            above_threshold_color='#bcbddc',
...                            orientation='right')
>>> hierarchy.set_link_color_palette(None)  # reset to default after use
>>> plt.show()

Как выбрать оптимальное количество кластеров на основе результатов этого анализа, дендрограммы? Как правило, ищите группы с самыми длинными «ветвями», чем они короче, тем больше они похожи на следующие «веточки» и «листья». Но имейте в виду, что, как всегда, оптимальное количество также будет зависеть от контекста, экспертных знаний, применения и т. Д.

Спасибо, что прочитали мой первый пост на Medium.