Перевод
Ссылка на автора
Введение
В этом посте мы рассмотрим несколько случаев, когда алгоритм KMC работает неэффективно или может давать неинтуитивные результаты. В частности, мы рассмотрим следующие сценарии:
- Наше предположение о количестве (реальных) кластеров неверно.
- Особенность пространства очень размерна.
- Кластеры бывают странной или неправильной формы.
Все эти условия могут привести к проблемам с K-Means, так что давайте посмотрим.
Неверное количество кластеров
Чтобы сделать это проще, давайте определим вспомогательную функциюcompare, который создаст и решит проблему кластеризации для нас, а затем сравнит результаты.
from sklearn import datasets
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs, make_circles, make_moons
from mpl_toolkits.mplot3d import Axes3Dimport numpy as np
import pandas as pd
import itertoolsdef compare(N_features, C_centers, K_clusters, dims=[0, 1],*args):
data, targets = make_blobs(
n_samples=n_samples if 'n_samples' in args else 400,
n_features=N_features,
centers=C_centers,
cluster_std=cluster_std if 'cluster_std' in args else 0.5,
shuffle=True,
random_state=random_state if 'random_state' in args else 0)FEATS = ['x' + str(x) for x in range(N_features)]
X = pd.DataFrame(data, columns=FEATS)
X['cluster'] =
KMeans(n_clusters=K_clusters, random_state=0).fit_predict(X)fig, axs = plt.subplots(1, 2, figsize=(12, 4))
axs[0].scatter(data[:, dims[0]], data[:, dims[1]],
c='white', marker='o', edgecolor='black', s=20)
axs[0].set_xlabel('x{} [a.u.]'.format(dims[0]))
axs[0].set_ylabel('x{} [a.u.]'.format(dims[1]))
axs[0].set_title('Original dataset')
axs[1].set_xlabel('x{} [a.u.]'.format(dims[0]))
axs[1].set_ylabel('x{} [a.u.]'.format(dims[1]))
axs[1].set_title('Applying clustering')colors = itertools.cycle(['r', 'g', 'b', 'm', 'c', 'y'])
for k in range(K_clusters):
x = X[X['cluster'] == k][FEATS].to_numpy()
axs[1].scatter(
x[:, dims[0]],
x[:, dims[1]],
color=next(colors),
edgecolor='k',
alpha=0.5
)
plt.show()
Слишком мало кластеров

compare(2, 4, 3)).
Несмотря на наличие отдельных кластеров в данных, мы недооценили их количество. Как следствие, некоторые непересекающиеся группы данных вынуждены вписываться в один более крупный кластер.
Слишком много кластеров

compare(2, 2, 4)).
В отличие от последней ситуации, попытка обернуть данные в слишком много кластеров создает искусственные границы внутри реальных кластеров данных.
Высокие (er) размерные данные
Набор данных не должен быть настолько высоким в размерности, прежде чем мы начнем видеть проблемы. Хотя визуализация и, следовательно, некоторый анализ многомерных данных уже сложны (ругаясь сейчас…), поскольку KMC часто используется для понимания данных, это не помогает быть представленным с неоднозначностями.
Чтобы объяснить это, давайте сгенерируем трехмерный набор данных с четко различимыми кластерами.
fig = plt.figure(figsize=(14, 8))
ax = fig.add_subplot(111, projection='3d')data, targets = make_blobs(
n_samples=400,
n_features=3,
centers=3,
cluster_std=0.5,
shuffle=True,
random_state=0)ax.scatter(data[:, 0], data[:, 1],
zs=data[:, 2], zdir='z', s=25, c='black', depthshade=True)
ax.set_xlabel('x0 [a.u.]')
ax.set_ylabel('x1 [a.u.]')
ax.set_zlabel('x2 [a.u.]')
ax.set_title('Original distribution.')
plt.grid()
plt.show()

Хотя существует множество способов проецировать этот 3D-набор данных на 2D, существует три основных ортогональных подпространства:
Глядя наx2 : x0проекция, набор данных выглядит так, как если бы он имел только два кластера. Нижний правый «суперкластер» на самом деле представляет собой две отдельные группы, и даже если мы предполагаем,Кправильно(К = 3)Это выглядит как очевидная ошибка, несмотря на то, что кластеры очень локализованы.

compare(2, 2, 4, dims=[0, 2])).
Чтобы быть уверенным, мы должны взглянуть на оставшиеся проекции, чтобы увидеть проблему, буквально, с разных сторон.

compare(2, 2, 4, dims=[1, 2])).
compare(2, 2, 4, dims=[0, 1])).
Это имеет больше смысла!
С другой стороны, у нас было невероятное преимущество. Во-первых, с тремя измерениями мы смогли построить весь набор данных. Во-вторых, кластеры, которые существуют в наборе данных, были очень четкими, поэтому их легко обнаружить. Наконец, с трехмерным набором данных мы столкнулись только с тремя стандартными 2D-проекциями.
СлучайN, N> 3особенности, мы быне сможет построить весь набор данныхи число 2D проекций будет масштабироваться квадратично сN:
не говоря уже о том, что набор данных может иметь кластеры странной формы или нелокализованные, что является нашей следующей задачей.
Нерегулярные наборы данных
До сих пор мы упоминали о проблемах, которые «на нашей стороне». Мы посмотрели на очень «хорошо себя ведущий» набор данных и обсудили проблемы в области аналитики. Однако что делать, если набор данных не соответствует нашему решению или нашемуРешение проблемы не подходит?Это как раз тот случай, когда распределение данных происходит в странных или неправильных формах.
Если мы представим только этот график, мы можем обмануть себя, полагая, что в данных есть только два кластера. Однако при составлении графика остальных прогнозов мы быстро узнаем, что это не так.
fig, axs = plt.subplots(1, 3, figsize=(14, 4))# unequal variance
X, y = make_blobs(n_samples=1400,
cluster_std=[1.0, 2.5, 0.2],
random_state=2)
y_pred = KMeans(n_clusters=3, random_state=2).fit_predict(X)
colors = [['r', 'g', 'b'][c] for c in y_pred]axs[0].scatter(X[:, 0], X[:, 1],
color=colors, edgecolor='k', alpha=0.5)
axs[0].set_title("Unequal Variance")# anisotropically distributed data
X, y = make_blobs(n_samples=1400, random_state=156)
transformation = [
[0.60834549, -0.63667341],
[-0.40887718, 0.85253229]
]
X = np.dot(X, transformation)
y_pred = KMeans(n_clusters=3, random_state=0).fit_predict(X)
colors = [['r', 'g', 'b'][c] for c in y_pred]axs[1].scatter(X[:, 0], X[:, 1],
color=colors, edgecolor='k', alpha=0.5)
axs[1].set_title("Anisotropicly Distributed Blobs")# irregular shaped data
X, y = make_moons(n_samples=1400, shuffle=True,
noise=0.1, random_state=120)
y_pred = KMeans(n_clusters=2, random_state=0).fit_predict(X)
colors = [['r', 'g', 'b'][c] for c in y_pred]axs[2].scatter(X[:, 0], X[:, 1],
color=colors, edgecolor='k', alpha=0.5)
axs[2].set_title("Irregular Shaped Data")plt.show()

На левом графике показаны данные, чье распределение по Гауссу не имеет одинакового стандартного отклонения. Средний график представляетанизотропныйданные, означающие данные, которые вытянуты вдоль определенной оси. Наконец, правый график показывает данные, которые полностью негауссовы, несмотря на то, что они организованы в чистые кластеры.
В любом случае нерегулярность делает алгоритм KMC неэффективным. Поскольку алгоритм обрабатывает каждую точку данных одинаково и полностью независимо от других точек, алгоритмне в состоянии обнаружить любую возможную непрерывность или локальные изменения в кластере, То, что он делает, просто берет те же самые метрики и применяет это к каждой точке. В результате алгоритм KMC может производить странную или нелогичную кластеризацию в данных, даже если мы предполагаемКправильно и особенностиNне так много.
Выводы
В этом посте мы обсудили три основные причины, по которым алгоритм K-Means Clustering дает нам неправильные ответы.
- Во-первых, как количество кластеровКнужно решить априори, есть большая вероятность, что мы догадаемся
- Во-вторых, кластеризация в пространстве более высокого измерения становится громоздкой с аналитической точки зрения, и в этом случае KMC предоставит нам идеи, которые могут вводить в заблуждение.
- Наконец, для любых данных неправильной формы, KMC, скорее всего, искусственные кластеры, которые не соответствуют здравому смыслу.
Зная эти три ошибки, KMC остается полезным инструментом, особенно при проверке данных или создании меток.
Первоначально опубликовано на https://zerowithdot.com ,
From Wikipedia, the free encyclopedia
Clustered standard errors (or Liang-Zeger standard errors)[1] are measurements that estimate the standard error of a regression parameter in settings where observations may be subdivided into smaller-sized groups («clusters») and where the sampling and/or treatment assignment is correlated within each group.[2][3] Clustered standard errors are widely used in a variety of applied econometric settings, including difference-in-differences[4] or experiments.[5]
Analogous to how Huber-White standard errors are consistent in the presence of heteroscedasticity and Newey–West standard errors are consistent in the presence of accurately-modeled autocorrelation, clustered standard errors are consistent in the presence of cluster-based sampling or treatment assignment. Clustered standard errors are often justified by possible correlation in modeling residuals within each cluster; while recent work suggests that this is not the precise justification behind clustering,[6] it may be pedagogically useful.
Intuitive motivation[edit]
Clustered standard errors are often useful when treatment is assigned at the level of a cluster instead of at the individual level. For example, suppose that an educational researcher wants to discover whether a new teaching technique improves student test scores. She therefore assigns teachers in «treated» classrooms to try this new technique, while leaving «control» classrooms unaffected. When analyzing her results, she may want to keep the data at the student level (for example, to control for student-level observable characteristics). However, when estimating the standard error or confidence interval of her statistical model, she realizes that classical or even heteroscedasticity-robust standard errors are inappropriate because student test scores within each class are not independently distributed. Instead, students in classes with better teachers have especially high test scores (regardless of whether they receive the experimental treatment) while students in classes with worse teachers have especially low test scores. The researcher can cluster her standard errors at the level of a classroom to account for this aspect of her experiment.[7]
While this example is very specific, similar issues arise in a wide variety of settings. For example, in many panel data settings (such as difference-in-differences) clustering often offers a simple and effective way to account for non-independence between periods within each unit (sometimes referred to as «autocorrelation in residuals»).[4] Another common and logically distinct justification for clustering arises when a full population cannot be randomly sampled, and so instead clusters are sampled and then units are randomized within cluster. In this case, clustered standard errors account for the uncertainty driven by the fact that the researcher does not observe large parts of the population of interest.[8]
Mathematical motivation[edit]
A useful mathematical illustration comes from the case of one-way clustering in an ordinary least squares (OLS) model. Consider a simple model with N observations that are subdivided in C clusters. Let be an
vector of outcomes,
a
matrix of covariates,
an
vector of unknown parameters, and
an
vector of unexplained residuals:
As is standard with OLS models, we minimize the sum of squared residuals to get an estimate
:
From there, we can derive the classic «sandwich» estimator:
Denoting yields a potentially more familiar form
While one can develop a plug-in estimator by defining and letting
, this completely flexible estimator will not converge to
as
. Given the assumptions that a practitioner deems as reasonable, different types of standard errors solve this problem in different ways. For example, classic homoskedastic standard errors assume that
is diagonal with identical elements
, which simplifies the expression for
. Huber-White standard errors assume
is diagonal but that the diagonal value varies, while other types of standard errors (e.g. Newey–West, Moulton SEs, Conley spatial SEs) make other restrictions on the form of this matrix to reduce the number of parameters that the practitioner needs to estimate.
Clustered standard errors assume that is block-diagonal according to the clusters in the sample, with unrestricted values in each block but zeros elsewhere. In this case, one can define
and
as the within-block analogues of
and
and derive the following mathematical fact:
By constructing plug-in matrices , one can form an estimator for
that is consistent as the number of clusters
becomes large. While no specific number of clusters is statistically proven to be sufficient, practitioners often cite a number in the range of 30-50 and are comfortable using clustered standard errors when the number of clusters exceeds that threshold.
Further reading[edit]
- Alberto Abadie, Susan Athey, Guido W Imbens, and Jeffrey M Wooldridge. 2022. «When Should You Adjust Standard Errors for Clustering?» Quarterly Journal of Economics.
References[edit]
- ^ Liang, Kung-Yee; Zeger, Scott L. (1986-04-01). «Longitudinal data analysis using generalized linear models». Biometrika. 73 (1): 13–22. doi:10.1093/biomet/73.1.13. ISSN 0006-3444.
- ^ Cameron, A. Colin; Miller, Douglas L. (2015-03-31). «A Practitioner’s Guide to Cluster-Robust Inference». Journal of Human Resources. 50 (2): 317–372. doi:10.3368/jhr.50.2.317. ISSN 0022-166X. S2CID 1296789.
- ^ «ARE 212». Fiona Burlig. Retrieved 2020-07-05.
- ^ a b Bertrand, Marianne; Duflo, Esther; Mullainathan, Sendhil (2004-02-01). «How Much Should We Trust Differences-In-Differences Estimates?». The Quarterly Journal of Economics. 119 (1): 249–275. doi:10.1162/003355304772839588. hdl:1721.1/63690. ISSN 0033-5533. S2CID 470667.
- ^ Yixin Tang (2019-09-11). «Analyzing Switchback Experiments by Cluster Robust Standard Error to prevent false positive results». DoorDash Engineering Blog. Retrieved 2020-07-05.
- ^ Abadie, Alberto; Athey, Susan; Imbens, Guido; Wooldridge, Jeffrey (2017-10-24). «When Should You Adjust Standard Errors for Clustering?». arXiv:1710.02926 [math.ST].
- ^ «CLUSTERED STANDARD ERRORS». Economic Theory Blog. 2016. Archived from the original on 2016-11-06. Retrieved 28 September 2021.
- ^ «When should you cluster standard errors? New wisdom from the econometrics oracle». blogs.worldbank.org. Retrieved 2020-07-05.
From Wikipedia, the free encyclopedia
Clustered standard errors (or Liang-Zeger standard errors)[1] are measurements that estimate the standard error of a regression parameter in settings where observations may be subdivided into smaller-sized groups («clusters») and where the sampling and/or treatment assignment is correlated within each group.[2][3] Clustered standard errors are widely used in a variety of applied econometric settings, including difference-in-differences[4] or experiments.[5]
Analogous to how Huber-White standard errors are consistent in the presence of heteroscedasticity and Newey–West standard errors are consistent in the presence of accurately-modeled autocorrelation, clustered standard errors are consistent in the presence of cluster-based sampling or treatment assignment. Clustered standard errors are often justified by possible correlation in modeling residuals within each cluster; while recent work suggests that this is not the precise justification behind clustering,[6] it may be pedagogically useful.
Intuitive motivation[edit]
Clustered standard errors are often useful when treatment is assigned at the level of a cluster instead of at the individual level. For example, suppose that an educational researcher wants to discover whether a new teaching technique improves student test scores. She therefore assigns teachers in «treated» classrooms to try this new technique, while leaving «control» classrooms unaffected. When analyzing her results, she may want to keep the data at the student level (for example, to control for student-level observable characteristics). However, when estimating the standard error or confidence interval of her statistical model, she realizes that classical or even heteroscedasticity-robust standard errors are inappropriate because student test scores within each class are not independently distributed. Instead, students in classes with better teachers have especially high test scores (regardless of whether they receive the experimental treatment) while students in classes with worse teachers have especially low test scores. The researcher can cluster her standard errors at the level of a classroom to account for this aspect of her experiment.[7]
While this example is very specific, similar issues arise in a wide variety of settings. For example, in many panel data settings (such as difference-in-differences) clustering often offers a simple and effective way to account for non-independence between periods within each unit (sometimes referred to as «autocorrelation in residuals»).[4] Another common and logically distinct justification for clustering arises when a full population cannot be randomly sampled, and so instead clusters are sampled and then units are randomized within cluster. In this case, clustered standard errors account for the uncertainty driven by the fact that the researcher does not observe large parts of the population of interest.[8]
Mathematical motivation[edit]
A useful mathematical illustration comes from the case of one-way clustering in an ordinary least squares (OLS) model. Consider a simple model with N observations that are subdivided in C clusters. Let be an
vector of outcomes,
a
matrix of covariates,
an
vector of unknown parameters, and
an
vector of unexplained residuals:
As is standard with OLS models, we minimize the sum of squared residuals to get an estimate
:
From there, we can derive the classic «sandwich» estimator:
Denoting yields a potentially more familiar form
While one can develop a plug-in estimator by defining and letting
, this completely flexible estimator will not converge to
as
. Given the assumptions that a practitioner deems as reasonable, different types of standard errors solve this problem in different ways. For example, classic homoskedastic standard errors assume that
is diagonal with identical elements
, which simplifies the expression for
. Huber-White standard errors assume
is diagonal but that the diagonal value varies, while other types of standard errors (e.g. Newey–West, Moulton SEs, Conley spatial SEs) make other restrictions on the form of this matrix to reduce the number of parameters that the practitioner needs to estimate.
Clustered standard errors assume that is block-diagonal according to the clusters in the sample, with unrestricted values in each block but zeros elsewhere. In this case, one can define
and
as the within-block analogues of
and
and derive the following mathematical fact:
By constructing plug-in matrices , one can form an estimator for
that is consistent as the number of clusters
becomes large. While no specific number of clusters is statistically proven to be sufficient, practitioners often cite a number in the range of 30-50 and are comfortable using clustered standard errors when the number of clusters exceeds that threshold.
Further reading[edit]
- Alberto Abadie, Susan Athey, Guido W Imbens, and Jeffrey M Wooldridge. 2022. «When Should You Adjust Standard Errors for Clustering?» Quarterly Journal of Economics.
References[edit]
- ^ Liang, Kung-Yee; Zeger, Scott L. (1986-04-01). «Longitudinal data analysis using generalized linear models». Biometrika. 73 (1): 13–22. doi:10.1093/biomet/73.1.13. ISSN 0006-3444.
- ^ Cameron, A. Colin; Miller, Douglas L. (2015-03-31). «A Practitioner’s Guide to Cluster-Robust Inference». Journal of Human Resources. 50 (2): 317–372. doi:10.3368/jhr.50.2.317. ISSN 0022-166X. S2CID 1296789.
- ^ «ARE 212». Fiona Burlig. Retrieved 2020-07-05.
- ^ a b Bertrand, Marianne; Duflo, Esther; Mullainathan, Sendhil (2004-02-01). «How Much Should We Trust Differences-In-Differences Estimates?». The Quarterly Journal of Economics. 119 (1): 249–275. doi:10.1162/003355304772839588. hdl:1721.1/63690. ISSN 0033-5533. S2CID 470667.
- ^ Yixin Tang (2019-09-11). «Analyzing Switchback Experiments by Cluster Robust Standard Error to prevent false positive results». DoorDash Engineering Blog. Retrieved 2020-07-05.
- ^ Abadie, Alberto; Athey, Susan; Imbens, Guido; Wooldridge, Jeffrey (2017-10-24). «When Should You Adjust Standard Errors for Clustering?». arXiv:1710.02926 [math.ST].
- ^ «CLUSTERED STANDARD ERRORS». Economic Theory Blog. 2016. Archived from the original on 2016-11-06. Retrieved 28 September 2021.
- ^ «When should you cluster standard errors? New wisdom from the econometrics oracle». blogs.worldbank.org. Retrieved 2020-07-05.
Семантическое ядро в идеале собирается еще на этапе планирования сайта. Без этого не сделать грамотной структуры, которая сама по себе уже будет работать на продвижение. Опытные сеошники тоже начинают оптимизацию любого проекта со сбора семантики. Это основа основ.
Но семантика — это всего лишь список поисковых запросов. Чтобы он превратился в смысловой каркас сайта, необходима кластеризация —объединение схожих по смыслу и интенту ключей в тематические кластеры. О способах кластеризации семантического ядра пойдет речь в этой статье.
Что такое семантическое ядро

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

Сама по себе семантика — это просто набор фраз. Чтобы она работала на сайт и его видимость в поиске, ее нужно кластеризовать. Что такое кластеризация ядра? Это деление собранного списка ключей на смысловые группы, под каждую из которых на сайте будут создаваться индивидуальные посадочные страницы.
Грамотная группировка ключевых слов обеспечивает эффективное ранжирование в топе:
- каждая страница создается осмысленно, под определенную группу связанных ключей;
- для каждого кластера создается контент, отвечающий реальным потребностям пользователей;
- сокращаются расходы на продвижение: часть страниц, особенно созданных под низкочастотные запросы, выходит в топ без дополнительных танцев с бубнами.
По сути, в одном кластере собираются разные ключевики, по которым пользователи ищут одно и то же. Можно было бы сказать, что кластеризация — это поиск синонимов, но это не совсем корректно. Скорее, это синонимы в определенном контексте. Сравните: ювелирный магазин и ювелирные изделия. Это не синонимы в обычном понимании, но по этим двум запросам пользователи ищут одно и то же: где купить ювелирку, поэтому они объединяются в один кластер.
Фразы из кластера распределяются в пределах одной целевой страницы. Обычно основной ключ ставится в начало, а остальные равномерно рассредоточиваются по тексту.
Поисковый интент

Кластеризация ключевых слов должна проводиться с учетом интента. Под одной и той же формулировкой пользователи могут иметь в виду совершенно разные вещи. Например, по ключевику «тормозные колодки на Ситроен» человек может искать, где их купить, в каком автосервисе их поменять или как все сделать самому. Интент — это намерение пользователя. По интенту запросы делятся на:
- информационные: пользователь ищет полезную информацию («как чистить фильтры у робота-пылесоса»);
- навигационные: пользователь собирает данные для анализа («какой робот-пылесос купить»);
- коммерческие: пользователь определился с услугой или товаром и ищет, где его заказать («купить робот-пылесос сяоми»).
Грубая ошибка — совмещать на одной странице ключевые фразы с разным интентом. Когда человек ищет информацию, у него нет цели купить товар. Он просто хочет почитать полезную статью про смену фильтров на пылесосе. Вероятно, что пылесос у него уже есть, а, может быть, он собирает максимум данных перед принятием решения о покупке. И, наоборот, запрос с коммерческим интентом должен вести на страницу, где можно сделать заказ. Если пользователь, набрав фразу «купить робот-пылесос сяоми», попадет на обзор бытовой техники разных марок или на гайд по его подключению к системе умного дома, он быстро уйдет с сайта туда, где его интент будет учтен.
Совмещая ключевые фразы с разным интентом, вы размываете релевантность страницы, привлекаете нецелевой трафик, но это полбеды. Пользователь быстро понимает, что пришел не по адресу, и уходит с сайта обратно на страницу поиска, а это отказы, которые негативно влияют на поведенческие факторы.
Методы кластеризации запросов

Для группировки семантического ядра можно использовать три разных метода. Какой из них выбрать, зависит от объема собранной семантики и размера сайта. Часто приходится комбинировать методы, чтобы получить наиболее точный результат.
Логическое разбиение
С этого метода все начиналось. Сеошник анализирует каждый ключевик и пытается понять логику пользователя. Нужно по формулировке угадать, с каким намерением и на какую страницу стремится попасть человек.
Логическое разбиение хорошо для кластеризации запросов небольшого семантического ядра. Главные его недостатки: долго и высокая вероятность ошибок, т.к. метод основан на субъективном анализе. Ошибки могут быть как в самой логике, когда в группу добавляются ключи, не имеющие отношения к содержимому страницы, так и в неверном истолковании интента.
Кластеризация по семантической схожести
Трудоемкий метод, который требует разработки специальных формул и обучения нейронных сетей. На выходе в кластеры попадают семантически близкие ключи, объединяющиеся вокруг слов с «тяжелым весом». Если правильно подобрать формулу, результаты могут быть очень точными, но метод пока слишком сложен в исполнении и требует постоянных обновлений формул, учитывающих эволюцию алгоритмов ранжирования.
Группировка по топам

Самый оптимальный метод, хотя и он не без греха. Это кластеризация запросов на базе анализа первых страниц поисковой выдачи. На этом методе основано большинство онлайн-группировщиков ключевых слов.
Как это работает?
- Берем 2 ключа: «офсетная печать» и «заказать офсетную печать».
- Смотрим топ выдачи по обоим и ищем пересечения URL.
- Назначаем пороговое количество пересечений, по достижении которого ключевики отправляются в один кластер. В нашем случае пересечений достаточно, чтобы объединить эти 2 фразы для одной страницы на нашем сайте.
Преимущества такого метода:
- быстро;
- вполне точно;
- повсеместно распространено.
Но не всегда можно безоговорочно равняться на топы поисковиков. Включать собственную логику тоже необходимо, если есть возможность сделать лучше и логичнее, чем у конкурентов. Спорные ситуации часто возникают с синонимичными ключами, которые поисковик считает разными и выдает по ним разные результаты, хотя логики в этом никакой нет.
Например, фразы «ссылочный профиль» и «ссылочная масса» Яндекс считает разными. Чтобы продвигаться по этим ключам, все делают 2 страницы, хотя смысл обеих фраз идентичен, а логика и здравый смысл говорят, что одной страницы с хорошим контентом будет вполне достаточно.
Также причинами некорректной группировки по топу могут стать:
- новая тематика, по которой у поисковика слишком мало данных;
- в ядре много низкочастотных ключей с длинным хвостом;
- неправильно выставленный порог пересечений;
- ошибочный выбор метода.
3 метода группировки по топам

Кластеризация ядра запросов на основе анализа выдачи поисковых систем может проводиться 3 способами. Соответственно, и результаты группировки будут разными.
Soft
Принцип: есть основной ключ (обычно высокочастотник), с которым связаны все остальные в группе. При этом между собой второстепенные фразы могут вообще не пересекаться по URL в выдаче.
Например, основной ключ «заказать дизайн полиграфии». С ним будут связаны: «разработка дизайна полиграфии», «дизайн полиграфии в Твери», «дизайн для полиграфии недорого» и т.п.
Мягкий метод дает на выходе много данных, но с точностью группировки тут есть проблемы. Soft-методика подходит скорее для информационных сайтов или для небольших интернет-магазинов со скромной семантикой. Метод можно применять, когда нужно нагнать трафик на страницу по большому количеству запросов.
Hard
Принцип: по всем ключевикам в группе в выдаче имеется общий набор страниц. Если хотя бы у одного из ключей не достигается порог пересечений с остальными членами группы, он не попадает в кластер. То есть, если вы задаете порог пересечений в 3 URL, значит, у каждого запроса должно быть по 3 совпадения с остальными фразами.
Жесткий метод дает высочайшую точность результатов в 90 % при пороге пересечений в 3 URL, но количество данных внутри кластера будет меньше. Это подходит для высококонкурентных ниш, где нужна высокая релевантность посадочной страницы ключам, по которым она продвигается.
Moderate или Middle
Принцип: каждый запрос в группе связан со всеми остальными. В кластере собирается некое облако, где все фразы связаны между собой, но не жестко: нет обязательного требования пройти порог по пересечениям со всеми членами группы. У соседей могут быть разные цифры пересечений адресов в топе.
Способы кластеризации семантического ядра

Группировать ключи можно вручную, автоматически в специализированных онлайн-сервисах или в программах для кластеризации семантического ядра.
Ручная кластеризация
Ручная группировка обычно проводится только для метода логического разбиения. Но из-за высокой вероятности ошибки полученные кластеры рекомендуется перепроверять по совпадениям на SERP (странице выдачи). Это занимает слишком много времени. Если на логическую группировку ядра из 100 ключей потребуется порядка часа работы, то с последующей проверкой по пересечениям вы потратите целый день.
Исключительно ручное деление на кластеры оправдано только для совсем небольших проектов, где высокая точность не критична. В то же время человек, хорошо ориентирующийся в теме, может распределить схожие ключи по группам очень грамотно, т.к. знает специфику своего продукта и потребности целевой аудитории.
Разбивка по логике хороша как заключительный этап, когда выданный программой результат анализируется и правится, исходя из здравого смысла.
Ручную группировку удобно делать в форме таблиц или интеллект-карт. Для этого подходят стандартные офисные программы для работы с таблицами Excel, OpenOffice, LibreOffice, онлайн-аналог Excel Google Таблицы или любые доступные сервисы интеллект-карт типа XMind.
- Выгружаем собранную семантику в таблицу и выделяем запросы с высокой частотностью, которые станут основой кластеров.
- С помощью текстового фильтра или вручную находим фразы с однокоренными словами, синонимы и маркеры интента (купить, заказать и т.д.).
- На основе получившихся данных распределяем ключи по кластерам.
Подробно о ручной работе по сбору и группировке семантики мы писали в статье Как собрать семантическое ядро в Вордстат Яндекса — инструкция для новичков.
Алгоритм работы с сервисами

Все популярные онлайн-сервисы кластеризации семантического ядра работают на основе группировки по топу поисковой выдачи. Принцип работы у них приблизительно одинаковый, отличаются нюансы и набор настроек.
Посмотрим, как пользоваться сервисами, на примере популярного инструмента от команды PromoPult. Здесь группировка по топу проводится только методом Hard.
Для начала работы требуется:
- авторизоваться;
- указать название нового проекта;
- при желании ввести адрес сайта;
- загрузить файл со списком семантики в формате XLSX или ввести скопированный список в соответствующее поле (не менее 20 запросов);
- настроить параметры кластеризации.
Настройки зависят от сервиса. В PromoPult предлагают задать конкретным числом или диапазоном порог совпадений (точность). Стандартный порог от 3 до 5. Дальше выбираем поисковик, по топу которого будет проводиться анализ (обычно или Яндекс, или Google), и регион. PromoPult предлагает также более тонкую профессиональную настройку.
В зависимости от объема семантического ядра будет указана стоимость кластеризации вашего проекта. Запустить группировку можно, пополнив счет. Чем больше ядро, тем дольше придется ждать результатов: 100 запросов обрабатываются около минуты. Но это несоизмеримо быстрее, чем группировать семантику руками.
Отчет об онлайн-кластеризации данных сервис предоставляет в формате XLSX. В документе будет по одной странице для каждого выбранного поисковика в одном регионе с заданным порогом совпадений. Бонусом инструмент предоставляет отчет о частотности по каждому ключу, список адресов конкурентов и даже подберет релевантные страницы для каждого кластера на вашем сайте (если вы указали на него ссылку в самом начале).
Остальные сервисы плюс-минус работают по тому же сценарию. Некоторые предоставляют возможность выбрать метод группировки (Hard или Soft). В остальном разница лишь в цене и интерфейсе.
Обзор популярных онлайн-группировщиков
SERanking
| Бесплатный период | Цена | Ограничения по объему СЯ | Метод | Поисковые системы | Настройка региона | Порог пересечений |
| 14 дней | от 0,12 руб.
за слово |
нет | Soft
Hard |
Яндекс
|
есть | 1–9 |
Сервис предоставляет возможность проверить частотность, но за дополнительную плату 0,25 руб. за слово.
Плюсы: понятный интерфейс, есть все необходимые настройки, можно купить подписку или платить по факту.
PromoPult
| Бесплатный период | Цена | Ограничения по объему СЯ | Метод | Поисковые системы | Настройка региона | Порог пересечений |
| до 100 запросов бесплатно | от 0,11 руб.
за слово |
min 20
запросов |
Hard | Яндекс
|
есть | 1–10 |
Сервис автоматически предоставляет отчеты по частотности, списки конкурентов и релевантных страниц на сайте для созданных кластеров.
Плюсы: возможность тонких настроек для более точной группировки ключей внутри больших кластеров, бесплатные бонусы.
Serpstat
| Бесплатный период | Цена | Ограничения по объему СЯ | Метод | Поисковые системы | Настройка региона | Сила связи |
| есть | От 55 $ в
месяц |
зависит от тарифа | Soft
Hard |
Яндекс
|
есть | Weak
Medium Strong |
Серпстат реализует принцип иерархической кластеризации, когда семантически близкие группы объединяются в суперкластеры, а те, в свою очередь, группируются в еще более крупные протокластеры.
Вместо порога пересечений сервис предлагает выбрать один из трех уровней «силы связей», которая рассчитывается, исходя из индекса семантической схожести. 30 пересечений страниц на выдаче — это максимум возможных совпадений.
Сервис многофункциональный, оплатить отдельно группировку нельзя, придется выбирать тариф и оплачивать полный набор инструментов SEO-платформы.
Плюсы: в отчете кластеры уже выстроены в иерархическую структуру, что упрощает работу с вложенностью страниц при создании сайта.
Rush-analytics
| Бесплатный период | Цена | Ограничения по объему СЯ | Метод | Поисковые системы | Настройка региона | Порог пересечений |
| есть | от 500 руб. в месяц | зависит от тарифа | Soft
Hard |
Яндекс
|
есть | 3–8 |
Вместе с онлайн-кластеризацией запросов сервис бесплатно предоставляет отчет со списком конкурентов и подсветкой тематических слов из выдачи. Также определяется лучшая страница конкурента для каждого кластера.
Есть 3 алгоритма выбора вершины кластера — главного ключевика, к которому привязываются остальные фразы:
- По данным Wordstat выбирается самый частотный ключ.
- По маркерам вы сами назначаете основные ключевые фразы.
- Гибридный: после ручного маркирования вершины кластера выбираются автоматически по данным Вордстата среди оставшихся ключевиков.
Megaindex
| Бесплатный период | Цена | Ограничения по объему СЯ | Метод | Поисковые системы | астройка региона | Порог пересечений |
| До 1000 запросов бесплатно | от 2990 руб. в месяц | Зависит от тарифа | — | Яндекс
|
есть | 3–10 |
Сервис сам собирает семантику по конкурентам, которых вы вводите в соответствующее поле. Полученный список отправляется на кластеризацию. Можно настроить регион и количество совпадений. В отчете предоставляются сведения о частотности ключей.
Плюсы: можно собрать и провести кластеризацию небольшого семантического ядра бесплатно и даже без регистрации.
Keys.so
| Бесплатный период | Цена | Ограничения по объему СЯ | Метод | Поисковые системы | Настройка региона | Порог пересечений |
| Нет | от 1500 руб. в месяц | Зависит от тарифа | — | Яндекс
|
нет | 10–100 % |
В настройках можно задать уровень связанности ключей от 10 до 100%: чем выше процент, тем мельче дробятся группы. Можно исключить запросы с низкой частотностью и указать порог частотности для главного ключа.
Плюсы: удобно устроена работа с результатами. Прямо в сервисе можно структурировать группы, менять их расположение, удалять ненужные, искать близкие по семантике с помощью фильтров.
Topvisor
| Бесплатный период | Цена | Ограничения по объему СЯ | Метод | Поисковые системы | Настройка региона | Порог пересечений |
| нет | от 0,105 руб. слово | — | Soft
Hard Moderate |
Яндекс
|
есть | 1–9 |
Представлены 3 варианта кластеризации:
- по топ 10;
- по релевантности;
- по целевым URL.
Плюсы: сервис предоставляет возможность кластеризации по методу Moderate.
Just-magic
| Бесплатный период | Цена | Ограничения по объему СЯ | Метод | Поисковые системы | Настройка региона | Порог пересечений |
| До 100 запросов | Рассчитывается по факту | — | Hard | Яндекс
|
есть | не регулируется |
На выходе кроме кластеров вы получаете дополнительную информацию: геозависимость, уровень «коммерческости» ключа, URL обнаруженных релевантных страниц, можно запросить отчет по частотности, причем настроить анализ частотности можно по нескольким параметрам.
Semparser
| Бесплатный период | Цена | Ограничения по объему СЯ | Метод | Поисковые системы | Настройка региона | Порог пересечений |
| До 50 запросов | Чем больше запросов, тем ниже цена за слово | — | — | Яндекс
|
есть | 1–10 |
Сервис заточен на кластеризацию запросов онлайн. Здесь все инструменты связаны с работой над семантикой и структурой сайта:
- группировщик ключевых слов;
- создание структуры сайта;
- определение сайтов-лидеров по каждому запросу и кластеру;
- определение геозависимости и «коммерческости» запросов;
- определение релевантных страниц по каждому кластеру;
- генератор ТЗ копирайтеру;
- проверка текстов на соответствие ключам из кластера.
engine.seointellect.ru
| Бесплатный период | Цена | Ограничения по объему СЯ | Метод | Поисковые системы | Настройка региона | Порог пересечений |
| нет | от 0,2 руб. слово | — | Soft
Hard Balance |
Яндекс | есть | не регулируется |
Небольшой сервис для оптимизации сайта со своим стандартным кластеризатором семантического ядра.
Majento
| Бесплатный период | Цена | Ограничения по объему СЯ | Метод | Поисковые системы | Настройка региона | Порог пересечений |
| нет | Бесплатно | 250 запросов без регистрации;
500 запросов с регистрацией |
Soft
Hard |
Яндекс | нет | не регулируется |
Бесплатный сервис, который может сгруппировать семантическое ядро из 500 ключей по топу Яндекса. Если указать свой домен, то в отчете появится информация по релевантным страницам для каждого кластера. Скачать отчет можно в формате CSV.
Be1
| Бесплатный период | Цена | Ограничения по объему СЯ | Метод | Поисковые системы | Настройка региона | Порог пересечений |
| нет | Бесплатно | 400 запросов | — | Яндекс | да | не регулируется |
Бесплатный сервис с возможностью настройки региона. Отчет доступен онлайн в форме удобной таблицы, которую можно редактировать и скачать в формате CSV.
Сервисов с онлайн-инструментами кластеризации очень много, мы перечислили далеко не все. Но среди профессиональных сеошников из-за более точных результатов авторитетом пользуются три SEO-платформы:
- SERanking;
- PromoPult;
- Serpstat.
Софт для кластеризации семантического ядра

Помимо онлайн-сервисов существуют программы с функцией кластеризации.
Key Collector
https://www.key-collector.ru/
Есть несколько алгоритмов деления запросов на группы:
- по отдельным словам (удобно для составления списка минус-слов);
- по составу фраз (группируются похожие фразы);
- по поисковой выдаче (группировка по пересечениям на SERP);
- по конкурентам в поисковой выдаче (группировка по принадлежности фраз конкурентам);
- по тегам групп.
Key Collector профессиональная программа для работы с семантикой. У нее множество функций и гибкие настройки под конкретный проект. Программа платная, первая лицензия стоит 2200 руб. За эти деньги вы получаете в бессрочное пользование мощнейший инструмент для сбора и кластеризации семантического ядра.
KeyAssort
https://keyassort.com/
Программа, заточенная на группировку семантического ядра. Имеет 3 функции:
- кластеризация;
- построение структуры сайта на базе полученных данных;
- отчет по лидерам в топе по кластерам и запросам.
Большой выбор настроек позволяет регулировать необходимую для конкретного проекта точность группировки. Анализ проводится по топу выдачи от 5 до 50.
Есть демо версия без права скачать результат. Полная версия стоит 29.95 $.
Key Clustered
https://keyclusterer.ru/
Бесплатный десктопный кластеризатор, аналогичный программе Key Assort. В настройках можно выбрать метод Soft или Hard, задать порог пересечений от 1 до 10 и количество позиций в топе. После автоматической кластеризации открывается функция ручной группировки. На выходе кроме кластеров вы получите список лучших конкурентов.
Программа работает с семантикой любого объема. Отчет предоставляется в формате Excel.
Mindserp
http://rashad.su/mindserp/
Программа работает с готовым списком ключей и имеет 3 функции:
- кластеризация ключевых слов;
- анализ топа выдачи по заданному ключевику;
- выявление коммерческих запросов.
Настроек много, по каждой выпадает подсказка по ходу работы. Можно задать регион, поисковую систему, браузер (для Google), длину топа (10, 20 и т.д.), количество пересечений URL, строгий—мягкий метод, глубину уровней групп (1 или 2), исключить из анализа главные страницы и т.д. С отчетом можно работать прямо в программе, готовый результат выгружается только в Excel.
Цена софта 3000 руб., разработчики предоставляют демо версию на 2 дня.
Из представленного софта наиболее точные результаты при сравнительном анализе кластеризации «идеального» ядра показала программа KeyAssort. Данные проверки опубликованы здесь: https://habr.com/ru/post/354986/.
Параметры эффективной кластеризации

Эффективность кластеризации зависит от нескольких вещей:
- объема и качества выявленных запросов для каждого кластера (попали ли туда все необходимые ключи);
- релевантности контента страницы своему кластеру (будет ли пользователь удовлетворен содержимым страницы);
- совместимости запросов в пределах одной страницы (не размывается ли релевантность из-за ключей с разным интентом).
Ни один группировщик семантики не способен на автомате разделить семантику на группы идеально точно и без косяков. Но на качество результатов автоматической группировки можно влиять: выбрать наиболее корректный сервис или программу-кластеризатор, грамотно подготовить семантику, провести ручную проверку кластеров.
Автоматическая кластеризация имеет массу преимуществ, главное из которых скорость работы и точный сравнительный анализ огромного массива данных. Человеку понадобятся месяцы кропотливой работы на то, что сервис сделает за несколько минут.
Но ручную кластеризацию никто не отменял. Все группировщики ошибаются, часть ключевиков остается за бортом кластеров, потому что проверка не выявила пересечений. Человеку проще разобраться со смысловыми нюансами, разгадать интент запроса и определить корректность выявленных групп. Поэтому самые точные результаты дает автоматическая кластеризация с последующей ручной корректировкой.
Ошибки при кластеризации

Если грамотная кластеризация позитивно отражается на продвижении, то ошибки группировки способны загубить проект, даже с качественно собранной семантикой.
Самые частые ошибки:
- запросы с разным интентом в одном кластере;
- ключи не соответствуют тематике страницы;
- нет синонимов в собранном СЯ;
- неполное СЯ только с ВЧ и СЧ-запросами;
- слишком объемные кластеры с кучей ключевых фраз;
- СЯ не очищено от мусора (дублей, левых ключей, запросов с нулевой частотностью, ошибок, опечаток, спецсимволов).
Все эти косяки в итоге ведут к размытию релевантности и ухудшению поведенческих факторов, это дорога к низкому ранжированию в поисковиках.
Выводы
Кластеризация — суперважный этап подготовки семантического ядра. На этапе разработки делать структуру сайта без кластеризованной семантики просто преступление и деньги на ветер. Хорошая структура всегда выстраивается на базе запросов, объединенных в грамотные кластеры.
Кластеризация нужна и для готовых сайтов: с уточнения семантики и группировки ключевиков начинаются работы по оптимизации.
Но единожды собрав и сгруппировав ядро, нельзя вечно почивать на лаврах. В топе идет постоянный движ, поисковые алгоритмы меняются, хитроумность сеошников растет, поэтому ваши, с таким трудом собранные запросы постепенно покрываются мхом. Семантику надо время от времени обновлять, убирать со страниц устаревшие ключи, добавлять что-то новое.
Проблема оценки качества в задаче кластеризации трудноразрешима, как минимум, по двум причинам:
- Теорема невозможности Клейнберга — не существует оптимального алгоритма кластеризации.
- Многие алгоритмы кластеризации не способны определить настоящее количество кластеров в данных. Чаще всего количество кластеров подается на вход алгоритма и подбирается несколькими запусками алгоритма.
Содержание
- 1 Методы оценки качества кластеризации
- 2 Внешние меры оценки качества
- 2.1 Обозначения
- 2.2 Индекс Rand
- 2.3 Индекс Adjusted Rand
- 2.4 Индекс Жаккара (англ. Jaccard Index)
- 2.5 Индекс Фоулкса – Мэллова (англ. Fowlkes-Mallows Index)
- 2.6 Hubert Г statistic
- 2.7 Индекс Phi
- 2.8 Minkowski Score
- 2.9 Индекс Гудмэна-Крускала (англ. Goodman-Kruskal Index)
- 2.10 Entropy
- 2.11 Purity
- 2.12 F-мера
- 2.13 Variation of Information
- 3 Внутренние меры оценки качества
- 3.1 Компактность кластеров (англ. Cluster Cohesion)
- 3.2 Отделимость кластеров (англ. Cluster Separation)
- 3.3 Индекс Данна (англ. Dunn Index)
- 3.4 Обобщенный Индекс Данна (gD31, gD41, gD51, gD33, gD43, gD53)
- 3.5 Индекс S_Dbw
- 3.6 Силуэт (англ. Silhouette)
- 3.7 Индекс Calinski–Harabasz
- 3.8 Индекс C
- 3.9 Индекс Дэвиcа-Болдуина (англ. Davies–Bouldin Index)
- 3.10 Score function
- 3.11 Индекс Gamma
- 3.12 Индекс COP
- 3.13 Индекс CS
- 3.14 Индекс Sym
- 3.15 Индексы SymDB, SymD, Sym33
- 3.16 Negentropy increment
- 3.17 Индекс SV
- 3.18 Индекс OS
- 4 Сравнение
- 5 См. также
- 6 Источники информации
- 7 Примечания
Методы оценки качества кластеризации
Метод оценки качества кластеризации — инструментарий для количественной оценки результатов кластеризации.
Принято выделять две группы методов оценки качества кластеризации:
- Внешние (англ. External) меры основаны на сравнении результата кластеризации с априори известным разделением на классы.
- Внутренние (англ. Internal) меры отображают качество кластеризации только по информации в данных.
Внешние меры оценки качества
Данные меры используют дополнительные знания о кластеризуемом множестве: распределение по кластерам, количество кластеров и т.д.
Обозначения
Дано множество из элементов, разделение на классы , и полученное разделение на кластеры , совпадения между и могут быть отражены в таблице сопряженности , где каждое обозначает число объектов, входящих как в , так и в : .
Пусть .
Также рассмотрим пары из элементов кластеризуемого множества . Подсчитаем количество пар, в которых:
- Элементы принадлежат одному кластеру и одному классу —
- Элементы принадлежат одному кластеру, но разным классам —
- Элементы принадлежат разным кластерам, но одному классу —
- Элементы принадлежат разным кластерам и разным классам —
Индекс Rand
Индекс Rand оценивает, насколько много из тех пар элементов, которые находились в одном классе, и тех пар элементов, которые находились в разных классах, сохранили это состояние после кластеризации алгоритмом.
Имеет область определения от 0 до 1, где 1 — полное совпадение кластеров с заданными классами, а 0 — отсутствие совпадений.
Индекс Adjusted Rand
где — значения из таблицы сопряженности.
В отличие от обычного индекса Rand, индекс Adjusted Rand может принимать отрицательные значения, если .
Индекс Жаккара (англ. Jaccard Index)
Индекс Жаккара похож на Индекс Rand, только не учитывает пары элементов находящиеся в разные классах и разных кластерах ().
Имеет область определения от 0 до 1, где 1 — полное совпадение кластеров с заданными классами, а 0 — отсутствие совпадений.
Индекс Фоулкса – Мэллова (англ. Fowlkes-Mallows Index)
Индекс Фоулкса – Мэллова используется для определения сходства между двумя кластерами.
Более высокое значение индекса означает большее сходство между кластерами. Этот индекс также хорошо работает на зашумленных данных.
Hubert Г statistic
Данная мера отражает среднее расстояние между объектами разных кластеров:
где , — матрица близости, а
Можно заметить, что два объекта влияют на , только если они находятся в разных кластерах.
Чем больше значение меры — тем лучше.
Индекс Phi
Классическая мера корреляции между двумя переменными:
Minkowski Score
Индекс Гудмэна-Крускала (англ. Goodman-Kruskal Index)
Entropy
Энтропия измеряет «чистоту» меток классов:
Стоит отметить, что если все кластера состоят из объектов одного класса, то энтропия равна 0.
Purity
Чистота ставит в соответствие кластеру самый многочисленный в этом кластере класс.
Чистота находится в интервале [0, 1], причём значение = 1 отвечает оптимальной кластеризации.
F-мера
F-мера представляет собой гармоническое среднее между точностью (precision) и полнотой (recall).
Variation of Information
Данная мера измеряет количество информации, потерянной и полученной при переходе из одного кластера в другой.
Внутренние меры оценки качества
Данные меры оценивают качество структуры кластеров опираясь только непосредственно на нее, не используя внешней информации.
Компактность кластеров (англ. Cluster Cohesion)
Идея данного метода в том, что чем ближе друг к другу находятся объекты внутри кластеров, тем лучше разделение.
Таким образом, необходимо минимизировать внутриклассовое расстояние, например, сумму квадратов отклонений:
- , где — количество кластеров.
Отделимость кластеров (англ. Cluster Separation)
В данном случае идея противоположная — чем дальше друг от друга находятся объекты разных кластеров, тем лучше.
Поэтому здесь стоит задача максимизации суммы квадратов отклонений:
- , где — количество кластеров.
Индекс Данна (англ. Dunn Index)
Индекс Данна имеет множество вариаций, оригинальная версия выглядит следующим образом:
- ,
где:
- — межкластерное расстояние (оценка разделения), ,
- — диаметр кластера (оценка сплоченности), .
Обобщенный Индекс Данна (gD31, gD41, gD51, gD33, gD43, gD53)
Все эти вариации являются комбинациями 3 вариантов вычисления оценки разделения и оценки компактности
Оценки разделения:
- ,
- ,
- .
Оценки компактности:
- ,
- .
Обобщенный индекс Данна, как и обычный, должен возрастать вместе с улучшением качества кластеризации.
Индекс S_Dbw
Основан на вычислении Евклидовой нормы
и стандартных отклонений
- ,
- .
Сам индекс определяется формулой:
- .
Здесь
- ,
- ,
- , если и в ином случае.
Должен снижаться с улучшением кластеризации.
Силуэт (англ. Silhouette)
Значение силуэта показывает, насколько объект похож на свой кластер по сравнению с другими кластерами.
Оценка для всей кластерной структуры:
- ,
где:
- — среднее расстояние от до других объектов из кластера (компактность),
- — среднее расстояние от до объектов из другого кластера (отделимость).
Можно заметить, что
- .
Чем ближе данная оценка к 1, тем лучше.
Есть также упрощенная вариация силуэта: и вычисляются через центры кластеров.
Индекс Calinski–Harabasz
Компактность основана на расстоянии от точек кластера до их центроидов, а разделимость — на расстоянии от центроид кластеров до глобального центроида. Должен возрастать.
Индекс C
Индекс C представляет собой нормализованную оценку компактности:
- ,
где:
- ,
- — сумма минимальных (максимальных) расстояний между парами всех объектов во всем датасете.
Индекс Дэвиcа-Болдуина (англ. Davies–Bouldin Index)
Это, возможно, одна из самых используемых мер оценки качества кластеризации.
Она вычисляет компактность как расстояние от объектов кластера до их центроидов, а отделимость — как расстояние между центроидами.
- ,
где:
Существует еще одна вариация данной меры, которая была предложена автором вместе с основной версией:
C-индекс и индекс Дэвиcа-Болдуина должны минимизироваться для роста кластеризации.
Score function
Индекс, основанный на суммировании. Здесь оценка компактности выражается в дистанции от точек кластера до его центроида, а оценка разделимости — в дистанции от центроидов кластеров до глобального центроида.
- ,
где:
- ,
Чтобы функция оценки была эффективной, она должна максимизировать bcd, минимизировать wcd и быть ограниченной. Чем больше данный индекс, тем выше качество.
Индекс Gamma
где:
- — число пар таких, что (1) и принадлежат разным кластерам, и (2) ,
- .
Индекс COP
В данной мере компактность вычисляется как расстояние от точек кластера до его центроиды, а разделимость основана на расстоянии до самого отдаленного соседа.
- .
Индекс CS
Был предложен в области сжатия изображений, но может быть успешно адаптирован для любого другого окружения. Он оценивает компактность по диаметру кластера, а отделимость — как дистанцию между ближайшими элементами двух кластеров.
- .
Чем меньше значение данного индекса, тем выше качество кластеризации.
Индекс Sym
- .
Здесь — дистанция симметрии для точки из кластера .
Чем выше данное значение, тем лучше.
Индексы SymDB, SymD, Sym33
Модифицируют оценку компактности для индексов Дэвиса-Боулдина, Данна и gD33 соответственно.
SymDB вычисляется аналогично DB с изменением вычисления на:
- .
Данная оценка должна уменьшаться для улучшения качества кластеризации.
В SymD переопределена функция :
- .
в Sym33 аналогично SymD переопределена :
- .
Последние две оценки должны расти для улучшения качества кластеризации.
Negentropy increment
В отличие от подавляющего большинства других оценок, не основывается на сравнении компактности и разделимости. Определяется следующим образом:
- .
Здесь , — определитель ковариационной матрицы кластера , — определитель ковариационной матрицы всего датасета.
Данная оценка должна уменьшаться пропорционально росту качества кластеризации.
Индекс SV
Одна из самых новых из рассматриваемых в данном разделе оценок. Измеряет разделимость по дистанции между ближайшими точка кластеров, а компактность — по расстоянию от пограничных точек кластера до его центроида.
- .
Данная оценка должна увеличиваться.
Индекс OS
Отличается от предыдущей оценки усложненным способом вычисления оценки разделимости.
- .
Где
- .
при , и в ином случае.
Функции и определены следующим образом:
- .
- .
Данная оценка, как и предыдущая, должна возрастать.
Сравнение
Не существует лучшего метода оценки качества кластеризации. Однако, в рамках исследования[1] была предпринята попытка сравнить существующие меры на различных данных. Полученные результаты показали, что на искусственных датасетах наилучшим образом себя проявили индексы , и . На реальных датасетах лучше всех показал себя .
В Таблице 1 приведены оценки сложности мер качества кластеризации ( — число объектов в рассматриваемом наборе данных):
Из всех рассмотренных мер, меры , , и наиболее полно соответствуют когнитивному представлению асессоров о качестве кластеризации[2].
См. также
- Кластеризация
- Оценка качества в задачах классификации и регрессии[на 28.01.19 не создан]
Источники информации
- Wikipedia — Category:Clustering criteria
- Сивоголовко Е. В. Методы оценки качества четкой кластеризации
- Cluster Validation
- Halkidi, M., Batistakis, Y., Vazirgiannis, M., 2001. On clustering validation techniques. Journal of intelligent information systems, 17(2-3), pp.107-145.
- Pal, N.R., Biswas, J., 1997. Cluster validation using graph theoretic concepts. Pattern Recognition, 30(6), pp.847-857.
Примечания
- ↑ An extensive comparative study of cluster validity indices
- ↑ Towards cluster validity index evaluation and selection
Кластеризация запросов (группировка) — это разделение семантического ядра на небольшие логические группы (кластеры),
которые можно продвигать на одной странице.
Кластеризация семантического ядра — главный источник головной боли и нервного тика при работе с семантикой у
начинающих оптимизаторов и предпринимателей, самостоятельно продвигающих свой сайт.
Сегодня мы разберем:
- Что скрывается за страшным словом «кластеризация».
- Какой поисковый интент у «поискового интента».
- Как выйти победителем при первой в своей жизни кластеризации.
А главное, как выбрать удобный способ кластеризации запросов без ущерба для точности сортировки и кошелька
оптимизатора.
Если вы не путаете «SEO» и «СЕО», но еще не знаете про разницу между Soft и Hard группировкой, то попали по адресу.
Погнали!
Определяем поисковый интент
Итак, семантическое ядро вы уже
составили. После сбора семантики и очистки ядра от нецелевых вхождений можно приступать к кластеризации.
Первый этап сортировки поисковых запросов начинается с определения интента.
Поисковый интент — это цель, намерение пользователя, которое вкладывается в запрос при поиске.
Поисковый интент используется Google и «Яндексом» для формирования релевантной выдачи, когда сайты сортируются в
поиске с учетом смысловой содержательности поискового запроса и намерения пользователя. Интент может быть
коммерческим, когда намерение пользователя — найти товар или заказать услуги, или информационным, где основная цель —
узнать информацию о продукте.
Для корректного ранжирования на посадочной странице все ключевые слова должны принадлежать одному интенту. При этом,
в зависимости от сезонности и спроса на товары, поисковый запрос может приобретать в разное время коммерческий или
информационный интент.

Сортировать ключевые слова в зависимости от интента можно по фактору коммерческости — показателя, определяющего уровень преобладания продающего намерения над информационным при поиске. Поисковые запросы с высоким уровнем коммерческости следует размещать на коммерческих страницах, с низким — в информационных, при смешанном показателе придется искать баланс.
Разберем тонкости проверки на примере условно-бесплатного Arsenkin Tools Commerce. Сервис позволяет бесплатно проверять до 100 ключевых слов в день, также можно приобрести подписку за 549 рублей на 1 месяц и проверять до 2 500 запросов. Для проверки достаточно вставить семантическое ядро, выбрать регион и запустить анализ.

Результаты анализа выводятся в формате таблицы с отображением процента коммерческости.
Коммерческость поискового запроса — это доминирование коммерческого интента у пользователя, вводящего запрос в браузерной строке.
Запросы с коммерческостью менее 35 % имеют информационный интент и подходят для публикации в блоге, FAQ или гайдах, от 60 % — в каталоге товаров и коммерческих страницах. Поисковые запросы с коммерческостью в 35–60 % имеют смешанный интент — использовать их требуется аккуратно, иначе есть риск размыть релевантность страницы.

Для сортировки результаты копируем в таблицу Excel или «Google Таблицы», после чего выделяем столбец с процентным показателем комммерческости и сортируем.

Таким образом таблица отсортируется. Вверху будут поисковые запросы с информационным интентом, а в нижней части — с коммерческим.
Выбираем подходящий метод кластеризации
Методика кластеризации поисковых запросов подбирается с учетом объема собранной семантики и количества страниц на сайте. Чаще всего применяется комбинированный метод, где используется несколько вариантов кластеризации, что позволяет добиться наиболее точного результата. Мы же разберем каждый метод по отдельности.
Логическая кластеризация
Точечный инструмент для группировки небольших семантических ядер. Кластеризация ключевых слов проводится вручную: оптимизатор определяет цель поиска и смысловую релевантность для каждого поискового запроса. Муторно, но действенно.

Точность и качество логической группировки зависит от объема семантического ядра. Чем больше требуется отсортировать поисковых запросов, тем выше риск допустить ошибки: сбиться с логики кластеризации, пропустить слова или неправильно определить интент.
Кластеризация по семантической схожести
Для кластеризации семантического ядра используются сложные формулы и обучаемые нейросети. Смысл группировки сводится к объединению в кластеры семантически близких поисковых запросов. При этом ключевые слова могут не иметь лексикографического сходства, но всегда похожи по семантике.
Пример. Группа в семантическом ядре формируется, если у всех поисковых запросов есть пересечение с ключевым словом. Например, “lada check engine”, “купить коврики lada”, и ”как почистить коврики lada” попадут в одну группу, при этом 2 последних поисковых запроса сформируют еще один отдельный кластер.
Проводить кластеризацию по семантической схожести для молодого сайта нет смысла: такая задача поручается нейросетям при наличии большого семантического ядра. При этом такая группировка не учитывает коммерческость, ведь после кластеризации придется еще сортировать ключи в зависимости от поискового интента.
Кластеризация по топам
Наиболее правильный и популярный способ группировки семантики. Смысл кластеризации заключается в объединении поисковых запросов в кластеры согласно семантической базе сайтов, находящихся в топе выдачи «Яндекс» и Google.

Из популярных программ для кластеризации стоит выделить KeyClusterer, AllSubmitter, а также Key Collector. В отличие от онлайн-сервисов с оплатой по подписке, десктопное ПО приобретается единоразово по лицензии, а скорость кластеризации зависит от производительности компьютера.
Логика метода заключается в поиске пересечений ключевых слов на страницах сайтов, находящихся в топе поисковых систем. Обычно проводится кластеризация по топ-3 или топ-10, реже учитываются список из 50 сайтов в рейтинге.
Для увеличения точности группировки перед кластеризацией задается порог пересечений: ключевые слова объединяются в кластер только если будут найдены, например, на сразу двух, пяти или десяти сайтах.
| Логическая группировка | Кластеризация по топам | Группировка по семантической схожести | |
| Кому подойдет | Молодым сайтам, визиткам и лендингам | Многостраничным ресурсам и e-commerce | Маркетплейсам, онлайн-библиотекам |
| Когда подойдет | При небольшом семантическом ядре | Для работы с ядром среднестатистического сайта | Для группировки крупных семантических ядер |
| Преимущества | Точный результат, возможность учесть несколько переменных при кластеризации | Быстрый и недорогой способ обработать большое семантическое ядро | Возможность сегментировать большие массивы неструктурированных данных |
| Недостатки | Сложность группировки и высокий риск ошибок при долгой сортировке | Часто требуется повторная ручная кластеризация, чтобы сделать лучше, чем у конкурентов | Сложность реализации и необходимость повторной обработки семантики |
| Можно ли выполнить начинающему оптимизатору | Да, вручную | Да, через сервисы или софт | Нет, нужен сложный и дорогой софт |
На практике лучше совмещать несколько методов кластеризации. Например, группировать объемное ядро по топам, а сложные ключи со смешанным интентом сортировать вручную.
Подбираем алгоритм кластеризации семантического ядра по топам
Для корректной кластеризации даже для небольшого сайта рекомендуется сначала провести группировку семантики по топам поисковой выдачи и лишь затем сегментировать спорные ключевые слова вручную. Кластеризация на основании анализа поисковой выдачи может проводиться тремя способами-уровнями: Soft, Middle, Hard. Рассмотрим каждый из них.
Soft-кластеризация

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

Это жесткий, но точный метод сегментации ключевых слов в семантическом ядре, который подходит для высококонкурентных и сложных тематик. При таком подходе отсеивается много поисковых запросов, однако удается создать кластер с максимально релевантными ключевыми словами к тематике посадочной страницы.
При Hard-кластеризации кластер создается только в случае пересечения всех ключевых фраз среди URL-адресов, входящих в топ-10 поисковой выдачи. Помимо пересечения главного ключевого слова также проводится сравнение вспомогательных поисковых запросов: кластер образуется только при выполнении обоих этих условий.
Порог кластеризации определяет число совпадений не только главного поискового запроса, но и всех входящих в кластер запросов. При этом чем выше порог кластеризации, тем меньше ключевых слов попадает в кластер семантического ядра.
Middle-кластеризация

Middle-кластеризация — компромисс между слабой точностью Soft-метода и жесткостью к отбору Hard-группировки. Выбирается главный тематико-задающий поисковый запрос, к которому привязываются остальные ключевые слова, прошедшие порог кластеризации по количеству URL в выдаче Google или «Яндекс». При этом кластеризатор сравнивает все зависимые с главным запросом ключевые слова друг с другом.
Так поисковые запросы связываются между собой внутри кластера семантического ядра, но могут отличаться в разных парах проверяемых URL. У всех ключевых слов в кластере нет задачи пройти пересечение по URL-адресам в топе, сопутствующие поисковые запросы попадают в группу вместе с тематикозадающим запросом.
Middle-кластеризация подходит для информационных ресурсов с большим семантическим ядром или интернет-магазинам в слабоконкурентных нишах. Такой подход обеспечивает большую точность, чем при Soft-кластеризации, и не позволяет отсеивать большинство ключевых слов, как при Hard-группировке.
Сервисы и приложения для кластеризации семантического ядра
Для кластеризации семантики по анализу поисковых топов можно использовать десктопное ПО или онлайн-сервисы. Различие — в скорости, функциональности и цене. Рассмотрим, какой вариант кластеризации предпочтительнее исходя из задач оптимизатора.
Программы для кластеризации семантики
Desktop-программы предлагают большую функциональность, чем онлайн-сервисы, что позволяет тонко выбрать параметры группировки поисковых запросов или настроить интерфейс софта. У офлайн-программ для кластеризации есть ряд преимуществ и недостатков:
| Плюсы | Минусы |
| Можно гибко настроить параметры кластеризации и редактировать семантическое ядро внутри программы | Кластеризация выполняется на компьютере пользователя: для работы с большим семантическим ядром требуется стабильный интернет и производительное железо |
| Возможность полностью автоматизировать работу с семантикой. Например, в Key Collector ядро можно спарсить, очистить и сразу кластеризовать | Все функциональные программы для кластеризации платные. Цена наиболее популярного Key Collector — 2 200 рублей |
| Desktop-программы поддерживают больше форматов для импорта и экспорта, а также позволяют создать шаблон с настройками для дальнейшей работы с семантикой | Интерфейс desktop-программ сложнее, чем у онлайн-сервисов. Для удобной работы требуется пройти обучение и посмотреть гайды |
Наиболее популярным софтом для кластеризации считаются AllSubmitter, KeyClusterer и Key Collector.
Пример кластеризации запросов в Key Collector
Рассмотрим пример группировки семантического ядра на основе анализа поисковой выдаче на примере Key Collector — пожалуй, обязательного инструмента для SEO-специалистов.
Прежде чем приступить к кластеризации, в программу требуется загрузить все семантическое ядро. Если данные собирались в Key Collector, нужно открыть сохраненный файл программы, если со сторонней программы — нужен импорт. Для импорта файлом или добавления вручную скопированных поисковых запросов переходим в раздел «Главная», где выбираем «Добавить фразы». Далее вставляем скопированную семантику или указываем адрес к файлу на компьютере:

Для группировки важно собрать по всем фразам частотность — это можно сделать здесь же в программе
Отмечаем галочкой все поисковые запросы и переходим в раздел «Данные», где нажимаем «Анализ групп». Теперь выбираем параметр «По поисковой выдаче (улучшенная)», отмечаем поисковые системы и количество URL в выдаче для анализа. Далее нужно выбрать силу SERP для кластеризации — для семантики, где преобладают двух- или трехсловные поисковые запросы, будет достаточно порога в 3 пересечения.

На скриншоте показан пример Soft-кластеризации методом «объединения» запросов. Для проведения Hard-кластеризации режим группировки в настройках нужно заменить на «пересечение». При обновлении семантического ядра процедуру кластеризации придется повторить.
Онлайн-сервисы для кластеризации
Более простой подход к кластеризации производится с помощью онлайн-сервисов. Это позволяет обработать семантику быстрее и не требует обучения, как для профильного софта. Здесь также есть свои преимущества и недостатки:
| Плюсы | Минусы |
| Кластеризация проходит в максимально удобном формате — в пару кликов | Сервисы не позволяют обрабатывать большие семантические ядра |
| Оптимизатору не требуется вникать в технические нюансы. Интерфейс крайне дружественен пользователям | У онлайн-сервисов много ограничений: по количеству проверок, числу ключевых слов в ядре |
| Для разовых или нерегулярных работ онлайн-сервисы — наиболее удобный инструмент для кластеризации | В долгосрочной перспективе приобретение профильного ПО оказывается выгоднее и практичнее |
Наиболее популярные сервисы для кластеризации — Coolakov, Semantist и SeoQuick.
Пример онлайн кластеризации запросов в SeoQuick
Для примера рассмотрим SeoQuick — это наиболее доступный и функциональный сервис. Он позволяет сделать за день 4 кластеризации с семантическим ядром до 5 000 ключевых слов.

Затем открываем «Расширенные функции». Также можно импортировать файлы txt, xls, xlsx, csv.
В дополнительных настройках можно задать список стоп-слов, обязательных поисковых запросов или приказать учитывать словосочетания как одно цельное ключевое слово.

Разбираем основные ошибки при кластеризации семантического ядра
Кластеризация считается самым сложным этапом при работе с семантическим ядром, на котором часто возникают ошибки. Рассмотрим топ популярных ошибок и дадим рекомендации по их упреждению.
| Распространенная проблема | Почему данная ошибка так популярна | Как не допустить ошибки при кластеризации |
| Запрос с разным интентом в одном семантическом кластере | Отсутствие четкого понимания интента и отказ от сегментирования ключевых слов по коммерческости | Обязательно сортировать семантику по коммерческости при кластеризации |
| Несоответствие ключевых слов тематике посадочной страницы | Нарушена логика группировки при ручной кластеризации или сегментирование объемного ядра Soft-кластеризатором | Провести чистку семантики, увеличить точность кластеризации, выбрав Middle- или Hard-метод сортировки. Отсортировать проблемные кластеры вручную после кластеризации |
| Слишком много ключевых слов в одном кластере | Попытка структурировать большое семантическое ядро Soft-кластеризацией | Повысить точность кластеризации для объемной семантики поможет middle или hard группировка |
| Ошибки в ключевых словах | Ручная кластеризация или неправильный перенос собранных ключевых слов после сбора семантики | Предупредить ошибки в ключевых словах помогает автоматический парсинг и экспорт собранной семантики в кластеризатор. Для удаления уже имеющихся ошибок перед кластеризацией нужно провести чистку ядра |
| Много дублей, мусорных вхождений и запросов с нулевой частотностью | Запуск кластеризации сразу после парсинга семантики, без чистки ядра | Провести чистку семантического ядра перед кластеризацией |
Кластеризация — обязательный этап поисковой оптимизации после расширения структуры сайта и обновления семантического ядра. Посмотрите, как это работает на практике, на примере кейса для Rusplitka.ru.
Грамотная кластеризация специалистов агентства Kokoc Group позволила сегментировать семантику после крупного обновления товарного ассортимента, помогла улучшить ранжирование сайта в поиске и увеличить количество уникальных визитов.

Это дало бонус при ранжировании и положительно повлияло на поведенческие факторы.
Если вам требуется помощь с кластеризацией большого семантического ядра или комплексное SEO-продвижение сайта, обращайтесь к специалистам Kokoc Group.
Кластеризация неразмеченных данных можно выполнить с помощью модуля sklearn.cluster.
Каждый алгоритм кластеризации имеет два варианта: класс, реализующий fit метод изучения кластеров на данных поезда, и функция, которая, учитывая данные поезда, возвращает массив целочисленных меток, соответствующих различным кластерам. Для класса метки над обучающими данными можно найти в labels_ атрибуте.
2.3.1. Обзор методов кластеризации

| Название метода | Параметры | Масштабируемость | Использование | Геометрия (используемая метрика) |
|---|---|---|---|---|
| К-средник | число кластеров | Очень большое значение n симплов среднее n_clusters вместе с Мини батчи K-средних | Универсальный, любой размер кластеров, плоская геометрия, не слишком много кластеров | Дистанция между точками |
| Афинное распространение | дамфинг, предпочтение выборки | Не масштабируется с помощью n_clusters | Много кластеров, не равномерный размер кластера, неплоская геометрия | Дистанция графа (например граф ближайших соседей) |
| Средний сдвиг | пропускная способность | Не масштабируется с помощью n_clusters | Много кластеров, не равномерный размер кластера, неплоская геометрия | Дистанция между точками |
| Спектральная кластеризация | число кластеров | Средняя n симплов маленькое n_clasters | Мало кластеров, или размер кластера, неплоская геометрия | Дистанция графа (например граф ближайших соседей) |
| Иерархическая кластеризация | чилсо кластеров или порог расстояния | Большое n симплов и n_clasters | Мало кластеров, возможно ограничене связей | Дистанция между точками |
| Агломеративная кластеризация | число кластеров, порог дистанции, тип связи, дистанция | Большое n симплов и n_clasters | Мало кластеров, возможно ограничене связей и не Евклидовое расстояние | Любая попарная дистанция |
| DBSCAN | размер окрестности | Очень большое n симплов и среднее n_clasters | не плоская геометрия, неравномерный размер кластеров | Дистанция между ближайшими точками |
| OPTICS | Минимальное количество элементов в кластере | Очень большое n симплов и большое n_clasters | не плоская геометрия, неравномерный размер кластеров, переменная плотность кластеров | Дистанция между точками |
| Гауссовская Смешаянная модель | много параметров | не масштабируемо | плоская геометрия, подходит для оценки плотности | Расстояния до центров Махаланобиса |
| Birch | факторы ветвления, порог, не обязательный глобальный кластер | Большое n симплов и n_clasters | Большой объем данных, удаление выбросов, сокращение данных | Евклидовое расстояние между точками |
Неплоская геометрия кластеризации полезно когда кластеры имеют специфичную форму, то есть многообразие и стандартное евклидовое расстояние в качестве метрики не подходят. Это случай возникает в двух верхних строках рисунка.
Гауссовская Смешаянная модель полезна для кластеризации описанные в другой статье документации, посвященная смешанным моделям. Метод K-средних можно расматривать как частный случай Гауссовской смешанной модели с равной ковариации для каждого компонента.
Методы трансдуктивной кластеризации (в отличие отметодов индуктивной кластеризации) не предназначены для применения к новым, невидимым данным.
2.3.2. K-средних
Эти KMeans данные алгоритмы кластеров пытаются отдельными образцы в п групп одинаковой дисперсии, сводя к минимуму критерия , известный как инерция или внутри-кластера сумм квадратов (см ниже). Этот алгоритм требует указания количества кластеров. Он хорошо масштабируется для большого количества образцов и используется в широком диапазоне областей применения во многих различных областях.
Алгоритм k-средних делит набор $N$ образцы $X$ в $K$ непересекающиеся кластеры $C$, каждый из которых описывается средним $mu_j$ образцов в кластере. Средние значения обычно называют «центроидами» кластера; обратите внимание, что это, как правило, не баллы из $X$, хотя они живут в одном пространстве.
Алгоритм K-средних нацелен на выбор центроидов, которые минимизируют инерцию или критерий суммы квадратов внутри кластера : $$sum_{i=0}^{n}min_{mu_j in C}(||x_i — mu_j||^2)$$
Инерцию можно определить как меру того, насколько кластеры внутренне связаны. Он страдает различными недостатками:
- Инерция предполагает, что кластеры выпуклые и изотропные, что не всегда так. Он плохо реагирует на удлиненные кластеры или коллекторы неправильной формы.
- Инерция — это не нормализованная метрика: мы просто знаем, что более низкие значения лучше, а ноль — оптимально. Но в очень многомерных пространствах евклидовы расстояния имеют тенденцию становиться раздутыми (это пример так называемого «проклятия размерности»). Выполнение алгоритма уменьшения размерности, такого как анализ главных компонентов (PCA) перед кластеризацией k-средних, может облегчить эту проблему и ускорить вычисления.

K-средних часто называют алгоритмом Ллойда. В общих чертах алгоритм состоит из трех шагов. На первом этапе выбираются начальные центроиды, а самый простой метод — выбрать $k$ образцы из набора данных $X$. После инициализации K-средних состоит из цикла между двумя другими шагами. Первый шаг присваивает каждой выборке ближайший центроид. На втором этапе создаются новые центроиды, взяв среднее значение всех выборок, назначенных каждому предыдущему центроиду. Вычисляется разница между старым и новым центроидами, и алгоритм повторяет эти последние два шага, пока это значение не станет меньше порогового значения. Другими словами, это повторяется до тех пор, пока центроиды не переместятся значительно.
K-средних эквивалентно алгоритму максимизации ожидания с маленькой, все равной диагональной ковариационной матрицей.

Алгоритм также можно понять через концепцию диаграмм Вороного. Сначала рассчитывается диаграмма Вороного точек с использованием текущих центроидов. Каждый сегмент на диаграмме Вороного становится отдельным кластером. Во-вторых, центроиды обновляются до среднего значения каждого сегмента. Затем алгоритм повторяет это до тех пор, пока не будет выполнен критерий остановки. Обычно алгоритм останавливается, когда относительное уменьшение целевой функции между итерациями меньше заданного значения допуска. В этой реализации дело обстоит иначе: итерация останавливается, когда центроиды перемещаются меньше допуска.
По прошествии достаточного времени K-средние всегда будут сходиться, однако это может быть локальным минимумом. Это сильно зависит от инициализации центроидов. В результате вычисление часто выполняется несколько раз с разными инициализациями центроидов. Одним из способов решения этой проблемы является схема инициализации k-means++, которая была реализована в scikit-learn (используйте init='k-means++'параметр). Это инициализирует центроиды (как правило) удаленными друг от друга, что, вероятно, приводит к лучшим результатам, чем случайная инициализация, как показано в справочнике.
K-means++ также может вызываться независимо для выбора начальных значений для других алгоритмов кластеризации, sklearn.cluster.kmeans_plusplus подробности и примеры использования см. В разделе .
Алгоритм поддерживает выборочные веса, которые могут быть заданы параметром sample_weight. Это позволяет присвоить некоторым выборкам больший вес при вычислении центров кластеров и значений инерции. Например, присвоение веса 2 выборке эквивалентно добавлению дубликата этой выборки в набор данных $X$.
Метод K-средних может использоваться для векторного квантования. Это достигается с помощью метода преобразования обученной модели KMeans.
2.3.2.1. Низкоуровневый параллелизм
KMeans преимущества параллелизма на основе OpenMP через Cython. Небольшие порции данных (256 выборок) обрабатываются параллельно, что, кроме того, снижает объем памяти. Дополнительные сведения о том, как контролировать количество потоков, см. В наших заметках о параллелизме .
Примеры:
- Демонстрация предположений k-средних : демонстрация того, когда k-средних работает интуитивно, а когда нет
- Демонстрация кластеризации K-средних на данных рукописных цифр : Кластеризация рукописных цифр
Рекомендации:
- «K-means ++: преимущества тщательного посева» Артур, Дэвид и Сергей Васильвицкий, Труды восемнадцатого ежегодного симпозиума ACM-SIAM по дискретным алгоритмам , Общество промышленной и прикладной математики (2007)
2.3.2.2. Мини-партия K-средних
Это MiniBatchKMeans вариант KMeans алгоритма, который использует мини-пакеты для сокращения времени вычислений, но при этом пытается оптимизировать ту же целевую функцию. Мини-пакеты — это подмножества входных данных, которые выбираются случайным образом на каждой итерации обучения. Эти мини-пакеты резко сокращают объем вычислений, необходимых для схождения к локальному решению. В отличие от других алгоритмов, которые сокращают время сходимости k-средних, мини-пакетные k-средние дают результаты, которые, как правило, лишь немного хуже, чем стандартный алгоритм.
Алгоритм повторяется между двумя основными шагами, аналогично обычным k-средним. На первом этапе $b$ образцы выбираются случайным образом из набора данных, чтобы сформировать мини-пакет. Затем они присваиваются ближайшему центроиду. На втором этапе обновляются центроиды. В отличие от k-средних, это делается для каждой выборки. Для каждой выборки в мини-пакете назначенный центроид обновляется путем взятия среднего потокового значения выборки и всех предыдущих выборок, назначенных этому центроиду. Это приводит к снижению скорости изменения центроида с течением времени. Эти шаги выполняются до тех пор, пока не будет достигнута сходимость или заранее определенное количество итераций.
MiniBatchKMeans сходится быстрее, чем KMeans, но качество результатов снижается. На практике эта разница в качестве может быть довольно небольшой, как показано в примере и цитированной ссылке.

Примеры:
- Сравнение алгоритмов кластеризации K-средних и MiniBatchKMeans : сравнение KMeans и MiniBatchKMeans
- Кластеризация текстовых документов с использованием k-средних : кластеризация документов с использованием разреженных MiniBatchKMeans
- Онлайн обучение словаря частей лиц
2.3.3. Распространения близости (Affinity Propagation)
AffinityPropagation создает кластеры, отправляя сообщения между парами образцов до схождения. Затем набор данных описывается с использованием небольшого количества образцов, которые определяются как наиболее репрезентативные для других образцов. Сообщения, отправляемые между парами, представляют пригодность одного образца быть образцом другого, который обновляется в ответ на значения из других пар. Это обновление происходит итеративно до сходимости, после чего выбираются окончательные образцы и, следовательно, дается окончательная кластеризация.

Метод Распространения близости может быть интересным, поскольку он выбирает количество кластеров на основе предоставленных данных. Для этой цели двумя важными параметрами являются предпочтение , которое контролирует, сколько экземпляров используется, и коэффициент демпфирования, который снижает ответственность и сообщения о доступности, чтобы избежать числовых колебаний при обновлении этих сообщений.
Главный недостаток метода Распространения близости — его сложность. Алгоритм имеет временную сложность порядка $O(N^2 T)$, где $N$ количество образцов и $T$ — количество итераций до сходимости. Далее, сложность памяти порядка $O(N^2)$ если используется плотная матрица подобия, но может быть сокращена, если используется разреженная матрица подобия. Это делает метод Распространения близости наиболее подходящим для наборов данных малого и среднего размера.
Примеры:
- Демонстрация алгоритма кластеризации распространения близости: метода Распространения близости на синтетических наборах данных 2D с 3 классами.
- Визуализация структуры фондового рынка Финансовые временные ряды метода Распространения близости для поиска групп компаний
Описание алгоритма: сообщения, отправляемые между точками, относятся к одной из двух категорий. Во-первых, это ответственность $r(i,k)$, которое является накопленным свидетельством того, что образец $k$ должен быть образцом для образца $i$. Второе — доступность $a(i,k)$ что является накопленным свидетельством того, что образец $i$ следует выбрать образец $k$ быть его образцом, и учитывает значения для всех других образцов, которые $k$ должен быть образцом. Таким образом, образцы выбираются по образцам, если они (1) достаточно похожи на многие образцы и (2) выбираются многими образцами, чтобы быть репрезентативными.
Более формально ответственность за образец $k$ быть образцом образца i дан кем-то: $$r(i, k) leftarrow s(i, k) — max [ a(i, k’) + s(i, k’) forall k’ neq k ]$$
Где $s(i,k)$ сходство между образцами $i$ а также $k$. Наличие образца $k$ быть образцом образца $i$ дан кем-то: $$a(i, k) leftarrow min [0, r(k, k) + sum_{i’~s.t.~i’ notin {i, k}}{r(i’, k)}]$$
Начнем с того, что все значения для $r$ и $a$ aустановлены в ноль, и расчет каждой итерации повторяется до сходимости. Как обсуждалось выше, чтобы избежать числовых колебаний при обновлении сообщений, коэффициент демпфирования $lambda$ вводится в итерационный процесс: $$r_{t+1}(i, k) = lambdacdot r_{t}(i, k) + (1-lambda)cdot r_{t+1}(i, k)$$ $$a_{t+1}(i, k) = lambdacdot a_{t}(i, k) + (1-lambda)cdot a_{t+1}(i, k)$$
где $t$ указывает время итерации.
2.3.4. Средний сдвиг
MeanShift кластеризация направлена на обнаружение капель в образцах с плавной плотностью. Это алгоритм на основе центроидов, который работает, обновляя кандидатов в центроиды, чтобы они были средними точками в данном регионе. Затем эти кандидаты фильтруются на этапе постобработки, чтобы исключить почти дубликаты и сформировать окончательный набор центроидов.
Учитывая центроид кандидата $x_i$ для итерации $t$, кандидат обновляется в соответствии со следующим уравнением: $$x_i^{t+1} = m(x_i^t)$$
Где $N(x_i)$ это соседство образцов на заданном расстоянии вокруг $x_i$ а также $m$ — вектор среднего сдвига, который вычисляется для каждого центроида, который указывает на область максимального увеличения плотности точек. Это вычисляется с использованием следующего уравнения, эффективно обновляющего центроид до среднего значения выборок в его окрестности: $$m(x_i) = frac{sum_{x_j in N(x_i)}K(x_j — x_i)x_j}{sum_{x_j in N(x_i)}K(x_j — x_i)}$$
Алгоритм автоматически устанавливает количество кластеров, вместо того, чтобы полагаться на параметр bandwidth, который определяет размер области для поиска. Этот параметр можно установить вручную, но можно оценить с помощью предоставленной estimate_bandwidth функции, которая вызывается, если полоса пропускания не задана.
Алгоритм не отличается высокой масштабируемостью, так как он требует многократного поиска ближайшего соседа во время выполнения алгоритма. Алгоритм гарантированно сходится, однако алгоритм прекратит итерацию, когда изменение центроидов будет небольшим.
Маркировка нового образца выполняется путем нахождения ближайшего центроида для данного образца.
Примеры:
- Демонстрация алгоритма кластеризации среднего сдвига: кластеризация среднего сдвига на синтетических наборах данных 2D с 3 классами.
Рекомендации:
- «Средний сдвиг: надежный подход к анализу пространства признаков». Д. Команичиу и П. Меер, IEEE Transactions on Pattern Analysis and Machine Intelligence (2002)
2.3.5. Спектральная кластеризация
SpectralClustering выполняет низкоразмерное встраивание матрицы аффинности между выборками с последующей кластеризацией, например, с помощью K-средних, компонентов собственных векторов в низкоразмерном пространстве. Это особенно эффективно с точки зрения вычислений, если матрица аффинности является разреженной, а amgрешатель используется для проблемы собственных значений (обратите внимание, amg что решающая программа требует, чтобы был установлен модуль pyamg ).
Текущая версия SpectralClustering требует, чтобы количество кластеров было указано заранее. Это хорошо работает для небольшого количества кластеров, но не рекомендуется для многих кластеров.
Для двух кластеров SpectralClustering решает выпуклую релаксацию проблемы нормализованных разрезов на графе подобия: разрезание графа пополам так, чтобы вес разрезаемых рёбер был мал по сравнению с весами рёбер внутри каждого кластера. Этот критерий особенно интересен при работе с изображениями, где вершинами графа являются пиксели, а веса ребер графа подобия вычисляются с использованием функции градиента изображения.
Предупреждение:
Преобразование расстояния в хорошее сходство
Обратите внимание, что если значения вашей матрицы подобия плохо распределены, например, с отрицательными значениями или с матрицей расстояний, а не с подобием, спектральная проблема будет сингулярной, а проблема неразрешима. В этом случае рекомендуется применить преобразование к элементам матрицы. Например, в случае матрицы расстояний со знаком обычно применяется тепловое ядро:
similarity = np.exp(-beta * distance / distance.std()) См. Примеры такого приложения.
Примеры:
- Спектральная кластеризация для сегментации изображения : сегментирование объектов на шумном фоне с использованием спектральной кластеризации.
- Сегментирование изображения греческих монет по регионам : спектральная кластеризация для разделения изображения монет по регионам.
2.3.5.1. Различные стратегии присвоения меток
Могут использоваться различные стратегии присвоения меток, соответствующие assign_labels параметру SpectralClustering. "kmeans" стратегия может соответствовать более тонким деталям, но может быть нестабильной. В частности, если вы не контролируете random_state, он может не воспроизводиться от запуска к запуску, так как это зависит от случайной инициализации. Альтернативная "discretize" стратегия воспроизводима на 100%, но имеет тенденцию создавать участки довольно ровной и геометрической формы.
2.3.5.2. Графики спектральной кластеризации
Спектральная кластеризация также может использоваться для разбиения графов через их спектральные вложения. В этом случае матрица аффинности является матрицей смежности графа, а SpectralClustering инициализируется с помощью affinity='precomputed':
>>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)
Рекомендации:
- «Учебное пособие по спектральной кластеризации» Ульрике фон Люксбург, 2007 г.
- «Нормализованные разрезы и сегментация изображения» Джианбо Ши, Джитендра Малик, 2000 г.
- «Случайный взгляд на спектральную сегментацию» Марина Мейла, Цзяньбо Ши, 2001
- «О спектральной кластеризации: анализ и алгоритм» Эндрю Й. Нг, Майкл И. Джордан, Яир Вайс, 2001 г.
- «Предварительно обусловленная спектральная кластеризация для задачи потокового графа стохастического разбиения блоков» Давид Жужунашвили, Андрей Князев
2.3.6. Иерархическая кластеризация
Иерархическая кластеризация — это общее семейство алгоритмов кластеризации, которые создают вложенные кластеры путем их последовательного слияния или разделения. Эта иерархия кластеров представлена в виде дерева (или дендрограммы). Корень дерева — это уникальный кластер, который собирает все образцы, а листья — это кластеры только с одним образцом. См. Страницу в Википедии для получения более подробной информации.
В AgglomerativeClustering объекте выполняет иерархическую кластеризацию с использованием подхода снизу вверх: каждый начинает наблюдения в своем собственном кластере, и кластеры последовательно объединены вместе. Критерии связывания определяют метрику, используемую для стратегии слияния:
- Ward минимизирует сумму квадратов разностей во всех кластерах. Это подход с минимизацией дисперсии, и в этом смысле он аналогичен целевой функции k-средних, но решается с помощью агломеративного иерархического подхода.
- Максимальное (Maximum) или полное связывание (complete linkage) сводит к минимуму максимальное расстояние между наблюдениями пар кластеров.
- Среднее связывание (Average linkage) минимизирует среднее расстояние между всеми наблюдениями пар кластеров.
- Одиночная связь (Single linkage) минимизирует расстояние между ближайшими наблюдениями пар кластеров.
AgglomerativeClustering может также масштабироваться до большого количества выборок, когда он используется вместе с матрицей связности, но требует больших вычислительных затрат, когда между выборками не добавляются ограничения связности: он рассматривает на каждом шаге все возможные слияния.
2.3.6.1. Различные типы связи: Ward, полный, средний и одиночный связь
AgglomerativeClustering поддерживает стратегии Ward, одиночного, среднего и полного связывания.

Агломеративный кластер ведет себя по принципу «богатый становится богатее», что приводит к неравномерному размеру кластера. В этом отношении одинарная связь — худшая стратегия, и Ward дает самые обычные размеры. Однако сродство (или расстояние, используемое при кластеризации) нельзя изменять с помощью Уорда, поэтому для неевклидовых показателей хорошей альтернативой является среднее связывание. Одиночная связь, хотя и не устойчива к зашумленным данным, может быть вычислена очень эффективно и поэтому может быть полезна для обеспечения иерархической кластеризации больших наборов данных. Одиночная связь также может хорошо работать с неглобулярными данными.
Примеры:
- Различная агломеративная кластеризация по двумерному встраиванию цифр : изучение различных стратегий связывания в реальном наборе данных.
2.3.6.2. Визуализация кластерной иерархии
Можно визуализировать дерево, представляющее иерархическое слияние кластеров, в виде дендрограммы. Визуальный осмотр часто может быть полезен для понимания структуры данных, особенно в случае небольших размеров выборки.

2.3.6.3. Добавление ограничений связи
Интересным аспектом AgglomerativeClustering является то, что к этому алгоритму могут быть добавлены ограничения связности (только соседние кластеры могут быть объединены вместе) через матрицу связности, которая определяет для каждой выборки соседние выборки, следующие заданной структуре данных. Например, в приведенном ниже примере швейцарского рулона ограничения связности запрещают объединение точек, которые не являются смежными на швейцарском рулоне, и, таким образом, избегают образования кластеров, которые проходят через перекрывающиеся складки рулона.
Эти ограничения полезны для наложения определенной локальной структуры, но они также ускоряют алгоритм, особенно когда количество выборок велико.
Ограничения связности накладываются через матрицу связности: scipy разреженную матрицу, которая имеет элементы только на пересечении строки и столбца с индексами набора данных, которые должны быть связаны. Эта матрица может быть построена из априорной информации: например, вы можете захотеть сгруппировать веб-страницы, объединяя только страницы со ссылкой, указывающей одну на другую. Это также можно узнать из данных, например, используя sklearn.neighbors.kneighbors_graph для ограничения слияния до ближайших соседей, как в этом примере , или с помощью, sklearn.feature_extraction.image.grid_to_graphчтобы разрешить слияние только соседних пикселей на изображении, как в примере с монетой.
Примеры:
- Демонстрация структурированной иерархической кластеризации Варда на изображении монет : Кластеризация Варда для разделения изображения монет на регионы.
- Иерархическая кластеризация: структурированная и неструктурированная палата : пример алгоритма Уорда в швейцарской системе, сравнение структурированных подходов и неструктурированных подходов.
- Агломерация признаков против одномерного выбора: пример уменьшения размерности с агломерацией признаков на основе иерархической кластеризации Уорда.
- Агломеративная кластеризация со структурой и без нее
Предупреждение Ограничения по подключению с одиночным, средним и полным подключением
Ограничения связности и одиночная, полная или средняя связь могут усилить аспект агломеративной кластеризации «богатый становится еще богаче», особенно если они построены на sklearn.neighbors.kneighbors_graph. В пределе небольшого числа кластеров они имеют тенденцию давать несколько макроскопически занятых кластеров и почти пустые. (см. обсуждение в разделе «Агломеративная кластеризация со структурой и без нее» ). Одиночная связь — самый хрупкий вариант связи в этом вопросе.




2.3.6.4. Варьируя метрику
Одиночная, средняя и полная связь может использоваться с различными расстояниями (или сходствами), в частности евклидовым расстоянием ( l2 ), манхэттенским расстоянием (или Cityblock, или l1 ), косинусным расстоянием или любой предварительно вычисленной матрицей аффинности.
- Расстояние l1 часто хорошо для разреженных функций или разреженного шума: то есть многие из функций равны нулю, как при интеллектуальном анализе текста с использованием вхождений редких слов.
- косинусное расстояние интересно тем, что оно инвариантно к глобальному масштабированию сигнала.
Рекомендации по выбору метрики — использовать метрику, которая максимизирует расстояние между выборками в разных классах и минимизирует его внутри каждого класса.
2.3.7. DBSCAN
Алгоритм DBSCAN рассматривает кластеры , как участки высокой плотности , разделенных районах с низкой плотностью. Из-за этого довольно общего представления кластеры, обнаруженные с помощью DBSCAN, могут иметь любую форму, в отличие от k-средних, которое предполагает, что кластеры имеют выпуклую форму. Центральным компонентом DBSCAN является концепция образцов керна , то есть образцов, находящихся в областях с высокой плотностью. Таким образом, кластер представляет собой набор образцов керна, каждый из которых находится близко друг к другу (измеряется с помощью некоторой меры расстояния), и набор образцов, не относящихся к керну, которые близки к образцу керна (но сами не являются образцами керна). В алгоритме есть два параметра, min_samples и eps, которые формально определяют, что мы имеем в виду, когда говорим «плотный» . Выше min_samples или ниже eps указывают на более высокую плотность, необходимую для формирования кластера.
Более формально мы определяем образец керна как образец в наборе данных, так что существуют min_samples другие образцы на расстоянии eps, которые определены как соседи образца керна. Это говорит нам о том, что основной образец находится в плотной области векторного пространства. Кластер — это набор образцов керна, который можно построить путем рекурсивного взятия образца керна, поиска всех его соседей, которые являются образцами керна, поиска всех их соседей, которые являются образцами керна, и т. Кластер также имеет набор неосновных выборок, которые представляют собой выборки, которые являются соседями керновой выборки в кластере, но сами не являются основными выборками. Интуитивно эти образцы находятся на периферии кластера.
Любой образец керна по определению является частью кластера. Любая выборка, не являющаяся образцом керна и находящаяся по крайней мере eps на расстоянии от любой выборки керна, считается алгоритмом выбросом.
Хотя параметр в min_samples первую очередь контролирует устойчивость алгоритма к шуму (на зашумленных и больших наборах данных может быть желательно увеличить этот параметр), параметр epsимеет решающее значение для правильного выбора для набора данных и функции расстояния и обычно не может быть оставлен на значение по умолчанию. Он контролирует локальное окружение точек. Если выбран слишком маленький размер, большая часть данных вообще не будет кластеризована (и помечена как -1 для «шума»). Если выбран слишком большой, близкие кластеры будут объединены в один кластер, и в конечном итоге весь набор данных будет возвращен как единый кластер. Некоторые эвристики для выбора этого параметра обсуждались в литературе, например, на основе перегиба на графике расстояний до ближайших соседей (как обсуждается в ссылках ниже).
На рисунке ниже цвет указывает на принадлежность к кластеру, а большие кружки обозначают образцы керна, найденные алгоритмом. Меньшие кружки — это неосновные образцы, которые все еще являются частью кластера. Более того, выбросы обозначены ниже черными точками.

Выполнение
Алгоритм DBSCAN является детерминированным, всегда генерируя одни и те же кластеры, когда им предоставляются одни и те же данные в одном порядке. Однако результаты могут отличаться, если данные предоставляются в другом порядке. Во-первых, даже если основные образцы всегда будут назначаться одним и тем же кластерам, метки этих кластеров будут зависеть от порядка, в котором эти образцы встречаются в данных. Во-вторых, что более важно, кластеры, которым назначены неосновные выборки, могут различаться в зависимости от порядка данных. Это может произойти, если образец неосновного керна находится на расстоянии меньше, чем epsдва образца керна в разных кластерах. Согласно треугольному неравенству эти два образца керна должны быть дальше, чемepsдруг от друга, иначе они были бы в одном кластере. Неосновная выборка назначается тому кластеру, который сгенерирован первым при передаче данных, поэтому результаты будут зависеть от порядка данных.
Текущая реализация использует шаровые деревья и kd-деревья для определения окрестности точек, что позволяет избежать вычисления полной матрицы расстояний (как это было сделано в версиях scikit-learn до 0.14). Сохранена возможность использования пользовательских метрик; подробности см NearestNeighbors.
Потребление памяти для больших размеров выборки
Эта реализация по умолчанию неэффективна с точки зрения памяти, поскольку она строит полную матрицу попарного сходства в случае, когда нельзя использовать kd-деревья или шаровые деревья (например, с разреженными матрицами). Эта матрица будет потреблять $n^2$ плавает. Вот несколько способов обойти это:
- Используйте кластеризацию OPTICS вместе с
extract_dbscanметодом. Кластеризация OPTICS также вычисляет полную попарную матрицу, но сохраняет в памяти только одну строку (сложность памяти n). - График окрестностей с разреженным радиусом (где предполагается, что отсутствующие записи находятся вне eps) можно предварительно вычислить эффективным с точки зрения памяти способом, и dbscan можно обработать с помощью
metric='precomputed'. Смотритеsklearn.neighbors.NearestNeighbors.radius_neighbors_graph. - Набор данных можно сжать, удалив точные дубликаты, если они встречаются в ваших данных, или используя BIRCH. Тогда у вас будет относительно небольшое количество представителей для большого количества точек. Затем вы можете
sample_weightуказать при установке DBSCAN.
Рекомендации:
- «Алгоритм на основе плотности для обнаружения кластеров в больших пространственных базах данных с шумом» Эстер, М., Х. П. Кригель, Дж. Сандер и X. Сюй, в материалах 2-й Международной конференции по открытию знаний и интеллектуальному анализу данных, Портленд, штат Орегон , AAAI Press, стр. 226–231. 1996 г.
- «Новый взгляд на DBSCAN: почему и как вы должны (по-прежнему) использовать DBSCAN. Шуберт, Э., Сандер, Дж., Эстер, М., Кригель, HP, и Сюй, X. (2017). В транзакциях ACM в системах баз данных (TODS), 42 (3), 19.
2.3.8. ОПТИКА
В OPTICS акции алгоритма много общих с DBSCAN алгоритмом, и можно рассматривать как обобщение DBSCAN, что расслабляет epsтребование от одного значения до диапазона значений. Ключевое различие между DBSCAN и OPTICS заключается в том, что алгоритм OPTICS строит граф достижимости , который назначает каждой выборке reachability_ расстояние и точку в ordering_ атрибуте кластера ; эти два атрибута назначаются при подборе модели и используются для определения принадлежности к кластеру. Если OPTICS запускается со значением по умолчанию inf, установленным для max_eps, то извлечение кластера в стиле DBSCAN может выполняться повторно за линейное время для любого заданного eps значения с использованием этого cluster_optics_dbscan метода. Параметр max_eps более низкое значение приведет к сокращению времени выполнения, и его можно рассматривать как максимальный радиус окрестности от каждой точки для поиска других потенциальных достижимых точек.

Расстояния достижимости, генерируемые OPTICS, позволяют извлекать кластеры с переменной плотностью в пределах одного набора данных. Как показано на приведенном выше графике, объединение расстояний достижимости и набора данных ordering_ дает график достижимости , где плотность точек представлена на оси Y, а точки упорядочены таким образом, что соседние точки являются смежными. «Вырезание» графика достижимости по одному значению дает результаты, подобные DBSCAN; все точки над «вырезом» классифицируются как шум, и каждый раз, когда есть перерыв при чтении слева направо, означает новый кластер. При извлечении кластеров по умолчанию с помощью OPTICS анализируются крутые уклоны на графике, чтобы найти кластеры, и пользователь может определить, что считается крутым уклоном, используя параметр xi. Существуют также другие возможности для анализа на самом графике, такие как создание иерархических представлений данных с помощью дендрограмм графика достижимости, а иерархия кластеров, обнаруженных алгоритмом, может быть доступна через cluster_hierarchy_ параметр. Приведенный выше график имеет цветовую кодировку, поэтому цвета кластеров в плоском пространстве соответствуют кластерам линейных сегментов на графике достижимости. Обратите внимание, что синий и красный кластеры находятся рядом на графике достижимости и могут быть иерархически представлены как дочерние элементы более крупного родительского кластера.
Сравнение с DBSCAN
Результаты cluster_optics_dbscan метода OPTICS и DBSCAN очень похожи, но не всегда идентичны; в частности, маркировка периферийных и шумовых точек. Отчасти это связано с тем, что первые образцы каждой плотной области, обработанной OPTICS, имеют большое значение достижимости, будучи близкими к другим точкам в своей области, и поэтому иногда будут помечены как шум, а не периферия. Это влияет на соседние точки, когда они рассматриваются как кандидаты на то, чтобы их пометить как периферию или как шум.
Обратите внимание, что для любого отдельного значения eps DBSCAN будет иметь более короткое время выполнения, чем OPTICS; однако для повторных запусков с разными eps значениями один запуск OPTICS может потребовать меньше совокупного времени выполнения, чем DBSCAN. Также важно отметить , что выход ОПТИКА» близок к DBSCAN, только если epsи max_eps близки.
Вычислительная сложность
Деревья пространственной индексации используются, чтобы избежать вычисления полной матрицы расстояний и обеспечить эффективное использование памяти для больших наборов выборок. С помощью metric ключевого слова можно указать различные метрики расстояния .
Для больших наборов данных аналогичные (но не идентичные) результаты можно получить с помощью HDBSCAN. Реализация HDBSCAN является многопоточной и имеет лучшую алгоритмическую сложность во время выполнения, чем OPTICS, за счет худшего масштабирования памяти. Для очень больших наборов данных, которые исчерпывают системную память с помощью HDBSCAN, OPTICS будет поддерживатьn (в отличие от $n^2$) масштабирование памяти; тем не менее, max_eps для получения решения в разумные сроки, вероятно, потребуется настройка параметра.
Рекомендации:
- «ОПТИКА: точки упорядочивания для определения структуры кластеризации». Анкерст, Михаэль, Маркус М. Бройниг, Ханс-Петер Кригель и Йорг Зандер. В ACM Sigmod Record, vol. 28, вып. 2. С. 49-60. ACM, 1999.
2.3.9. BIRCH (сбалансированное итеративное сокращение и кластеризация с использованием иерархий — balanced iterative reducing and clustering using hierarchies)
Для Birch заданных данных он строит дерево, называемое деревом функций кластеризации (CFT). Данные по существу сжимаются с потерями до набора узлов Clustering Feature (CF Nodes). Узлы CF имеют ряд подкластеров, называемых подкластерами функций кластеризации (подкластеры CF), и эти подкластеры CF, расположенные в нетерминальных узлах CF, могут иметь узлы CF в качестве дочерних.
Подкластеры CF содержат необходимую информацию для кластеризации, что избавляет от необходимости хранить все входные данные в памяти. Эта информация включает:
- Количество образцов в подкластере.
- Линейная сумма — n-мерный вектор, содержащий сумму всех выборок.
- Squared Sum — сумма квадратов нормы L2 всех выборок.
- Центроиды — чтобы избежать пересчета линейной суммы / n_samples.
- Квадратная норма центроидов.
Алгоритм BIRCH имеет два параметра: порог и коэффициент ветвления. Фактор ветвления ограничивает количество подкластеров в узле, а порог ограничивает расстояние между входящей выборкой и существующими подкластерами.
Этот алгоритм можно рассматривать как экземпляр или метод сокращения данных, поскольку он сокращает входные данные до набора подкластеров, которые получаются непосредственно из конечных точек CFT. Эти сокращенные данные могут быть дополнительно обработаны путем подачи их в глобальный кластеризатор. Этот глобальный кластеризатор может быть установлен с помощью n_clusters. Если n_clusters установлено значение None, подкластеры из листьев считываются напрямую, в противном случае шаг глобальной кластеризации помечает эти подкластеры в глобальные кластеры (метки), а выборки сопоставляются с глобальной меткой ближайшего подкластера.
Описание алгоритма:
- Новый образец вставляется в корень дерева CF, который является узлом CF. Затем он объединяется с подкластером корня, который имеет наименьший радиус после объединения, ограниченный пороговыми условиями и условиями фактора ветвления. Если у подкластера есть дочерний узел, то это повторяется до тех пор, пока он не достигнет листа. После нахождения ближайшего подкластера в листе свойства этого подкластера и родительских подкластеров рекурсивно обновляются.
- Если радиус подкластера, полученного путем слияния новой выборки и ближайшего подкластера, больше квадрата порога, и если количество подкластеров больше, чем коэффициент ветвления, то для этой новой выборки временно выделяется пространство. Берутся два самых дальних подкластера, и подкластеры делятся на две группы на основе расстояния между этими подкластерами.
- Если у этого разбитого узла есть родительский подкластер и есть место для нового подкластера, то родительский подкластер разбивается на два. Если места нет, то этот узел снова делится на две части, и процесс продолжается рекурсивно, пока не достигнет корня.
BIRCH или MiniBatchKMeans?
- BIRCH не очень хорошо масштабируется для данных большого размера. Как правило, если
n_featuresоно больше двадцати, лучше использовать MiniBatchKMeans. - Если количество экземпляров данных необходимо уменьшить или если требуется большое количество подкластеров в качестве этапа предварительной обработки или иным образом, BIRCH более полезен, чем MiniBatchKMeans.
Как использовать partial_fit?
Чтобы избежать вычисления глобальной кластеризации, при каждом обращении partial_fit пользователя рекомендуется
- Установить
n_clusters=Noneизначально - Обучите все данные несколькими вызовами partial_fit.
- Установите
n_clustersнеобходимое значение с помощьюbrc.set_params(n_clusters=n_clusters. - Вызов,
partial_fitнаконец, без аргументов, т.е.brc.partial_fit()который выполняет глобальную кластеризацию.

Рекомендации:
- Тиан Чжан, Рагху Рамакришнан, Марон Ливни БЕРЕЗА: эффективный метод кластеризации данных для больших баз данных. https://www.cs.sfu.ca/CourseCentral/459/han/papers/zhang96.pdf
- Роберто Пердиши JBirch — Java-реализация алгоритма кластеризации BIRCH https://code.google.com/archive/p/jbirch
2.3.10. Оценка эффективности кластеризации
Оценка производительности алгоритма кластеризации не так тривиальна, как подсчет количества ошибок или точности и отзыва контролируемого алгоритма классификации. В частности, любая метрика оценки должна учитывать не абсолютные значения меток кластера, а, скорее, если эта кластеризация определяет разделения данных, аналогичные некоторому основному набору истинных классов или удовлетворяющему некоторому предположению, так что члены, принадлежащие к одному классу, более похожи чем члены разных классов в соответствии с некоторой метрикой сходства.
2.3.10.1. Индекс Rand
Учитывая знания о назначениях базовых классов истинности labels_true и назначениях нашим алгоритмом кластеризации одних и тех же выборок labels_pred, (скорректированный или нескорректированный) индекс Рэнда — это функция, которая измеряет сходство двух назначений, игнорируя перестановки:
>>> from sklearn import metrics >>> labels_true = [0, 0, 0, 1, 1, 1] >>> labels_pred = [0, 0, 1, 1, 2, 2] >>> metrics.rand_score(labels_true, labels_pred) 0.66...
Индекс Rand не гарантирует получение значения, близкого к 0,0 при случайной маркировке. Скорректированный индекс Rand вносит поправку на случайность и дает такую основу.
>>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...
Как и в случае со всеми метриками кластеризации, можно переставить 0 и 1 в предсказанных метках, переименовать 2 в 3 и получить ту же оценку:
>>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...
Более того, оба rand_score adjusted_rand_score они симметричны : замена аргумента не меняет оценок. Таким образом, их можно использовать в качестве критериев консенсуса:
>>> metrics.rand_score(labels_pred, labels_true) 0.66... >>> metrics.adjusted_rand_score(labels_pred, labels_true) 0.24...
Идеальная маркировка оценивается в 1,0:
>>> labels_pred = labels_true[:] >>> metrics.rand_score(labels_true, labels_pred) 1.0 >>> metrics.adjusted_rand_score(labels_true, labels_pred) 1.0
Плохо согласованные ярлыки (например, независимые ярлыки) имеют более низкие оценки, а для скорректированного индекса Rand оценка будет отрицательной или близкой к нулю. Однако для нескорректированного индекса Rand оценка, хотя и ниже, не обязательно будет близка к нулю:
>>> labels_true = [0, 0, 0, 0, 0, 0, 1, 1] >>> labels_pred = [0, 1, 2, 3, 4, 5, 5, 6] >>> metrics.rand_score(labels_true, labels_pred) 0.39... >>> metrics.adjusted_rand_score(labels_true, labels_pred) -0.07...
2.3.10.1.1. Преимущества
- Интерпретируемость : нескорректированный индекс Рэнда пропорционален количеству пар выборок, метки которых одинаковы в обоих
labels_predи /labels_trueили различаются в обоих. - Случайные (единообразные) присвоения меток имеют скорректированный балл индекса Rand, близкий к 0,0 для любого значения
n_clustersиn_samples(что не относится, например, к нескорректированному индексу Rand или V-мере). - Ограниченный диапазон : более низкие значения указывают на разные маркировки, аналогичные кластеры имеют высокий (скорректированный или нескорректированный) индекс Rand, 1,0 — это оценка идеального соответствия. Диапазон оценок составляет [0, 1] для нескорректированного индекса Rand и [-1, 1] для скорректированного индекса Rand.
- Не делается никаких предположений о структуре кластера: (скорректированный или нескорректированный) индекс Rand может использоваться для сравнения всех видов алгоритмов кластеризации и может использоваться для сравнения алгоритмов кластеризации, таких как k-средних, который предполагает изотропные формы капли с результатами спектрального анализа. алгоритмы кластеризации, которые могут найти кластер со «сложенными» формами.
2.3.10.1.2. Недостатки
- Вопреки инерции, (скорректированный или нескорректированный) индекс Рэнда требует знания основных классов истинности, что почти никогда не доступно на практике или требует ручного назначения аннотаторами-людьми (как в условиях контролируемого обучения). Однако (скорректированный или нескорректированный) индекс Rand также может быть полезен в чисто неконтролируемой настройке в качестве строительного блока для консенсусного индекса, который может использоваться для выбора модели кластеризации (TODO).
- Нескорректированный индекс Rand часто близко к 1,0 , даже если самим кластеризациям существенно различаются. Это можно понять, интерпретируя индекс Рэнда как точность маркировки пар элементов, полученную в результате кластеризации: на практике часто существует большинство пар элементов, которым присваивается
differentметка пары как при прогнозируемой, так и при базовой кластеризации истинности, что приводит к высокой доля парных меток, которые согласны, что впоследствии приводит к высокой оценке.
Примеры:
- Поправка на случайность при оценке производительности кластеризации : анализ влияния размера набора данных на значение показателей кластеризации для случайных назначений.
2.3.10.1.3. Математическая постановка
Если C — это наземное присвоение класса истинности, а K — кластеризация, давайте определим $a$ и $b$ в виде:
- $a$, количество пар элементов, которые находятся в одном наборе в C и в одном наборе в K
- $b$, количество пар элементов, которые находятся в разных наборах в C и в разных наборах в K
Затем нескорректированный индекс Рэнда рассчитывается следующим образом: $$text{RI} = frac{a + b}{C_2^{n_{samples}}}$$
где $C_2^{n_{samples}}$ — общее количество возможных пар в наборе данных. Не имеет значения, выполняется ли расчет для упорядоченных пар или неупорядоченных пар, если расчет выполняется последовательно.
Однако индекс Rand не гарантирует, что случайные присвоения меток получат значение, близкое к нулю (особенно, если количество кластеров имеет тот же порядок величины, что и количество выборок).
Чтобы противостоять этому эффекту, мы можем дисконтировать ожидаемый RI. $E[text{RI}]$ случайных маркировок путем определения скорректированного индекса Rand следующим образом: $$text{ARI} = frac{text{RI} — E[text{RI}]}{max(text{RI}) — E[text{RI}]}$$
Рекомендации
- Сравнение разделов Л. Хуберт и П. Араби, Журнал классификации 1985 г.
- Свойства скорректированного индекса Рэнда Хьюберта- Араби Д. Стейнли, Психологические методы, 2004 г.
- Запись в Википедии для индекса Rand
- Запись в Википедии о скорректированном индексе Рэнда
2.3.10.2. Оценки на основе взаимной информации
Учитывая знания о назначениях базовых классов истинности labels_true и назначениях нашим алгоритмом кластеризации одних и тех же выборок labels_pred, взаимная информация — это функция, которая измеряет согласованность двух назначений, игнорируя перестановки. Доступны две различные нормализованные версии этой меры: нормализованная взаимная информация (NMI) и скорректированная взаимная информация (AMI) . NMI часто используется в литературе, в то время как AMI был предложен совсем недавно и нормируется на случайность :
>>> from sklearn import metrics >>> labels_true = [0, 0, 0, 1, 1, 1] >>> labels_pred = [0, 0, 1, 1, 2, 2] >>> metrics.adjusted_mutual_info_score(labels_true, labels_pred) 0.22504...
Можно переставить 0 и 1 в предсказанных метках, переименовать 2 в 3 и получить тот же результат:
>>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.adjusted_mutual_info_score(labels_true, labels_pred) 0.22504...
Все, mutual_info_score, adjusted_mutual_info_scoreи normalized_mutual_info_scoreявляется симметричным: замена аргумента не меняет рейтинг. Таким образом, их можно использовать в качестве меры консенсуса :
>>> metrics.adjusted_mutual_info_score(labels_pred, labels_true) 0.22504...
Идеальная маркировка оценивается в 1,0:
>>> labels_pred = labels_true[:] >>> metrics.adjusted_mutual_info_score(labels_true, labels_pred) 1.0 >>> metrics.normalized_mutual_info_score(labels_true, labels_pred) 1.0
Это неверно mutual_info_score, поэтому судить о них труднее:
>>> metrics.mutual_info_score(labels_true, labels_pred) 0.69...
Плохие (например, независимые маркировки) имеют отрицательные оценки:
>>> labels_true = [0, 1, 2, 0, 3, 4, 5, 1] >>> labels_pred = [1, 1, 0, 0, 2, 2, 2, 2] >>> metrics.adjusted_mutual_info_score(labels_true, labels_pred) -0.10526...
2.3.10.2.1. Преимущества
- Случайные (унифицированные) присвоения меток имеют оценку AMI, близкую к 0,0 для любого значения
n_clustersиn_samples(что не относится, например, к необработанной взаимной информации или V-мере). - Верхняя граница 1 : значения, близкие к нулю, указывают на два назначения меток, которые в значительной степени независимы, а значения, близкие к единице, указывают на значительное согласие. Кроме того, AMI, равный ровно 1, указывает, что два присвоения меток равны (с перестановкой или без нее).
2.3.10.2.2. Недостатки
- Вопреки инерции, меры на основе MI требуют знания основных классов истинности, хотя на практике они почти никогда не доступны или требуют ручного назначения аннотаторами-людьми (как в условиях контролируемого обучения).
Однако показатели на основе MI также могут быть полезны в чисто неконтролируемой настройке в качестве строительного блока для согласованного индекса, который можно использовать для выбора модели кластеризации
- NMI и MI не подвергаются случайной корректировке.
Примеры:
- Поправка на случайность при оценке производительности кластеризации: анализ влияния размера набора данных на значение показателей кластеризации для случайных назначений. Этот пример также включает скорректированный индекс ранда.
2.3.10.2.3. Математическая постановка
Предположим, что два присвоения метки (одних и тех же N объектов), $U$ а также $V$. Их энтропия — это величина неопределенности для набора разбиений, определяемая следующим образом:
$$H(U) = — sum_{i=1}^{|U|}P(i)log(P(i))$$
где $P(i) = |U_i| / N$ вероятность того, что объект выбран наугад из $U$ попадает в класс $U_i$. Аналогично дляV:
$$H(V) = — sum_{j=1}^{|V|}P'(j)log(P'(j))$$
С участием $P'(j) = |V_j| / N$. Взаимная информация (MI) между $U$ и $V$ рассчитывается по:
$$text{MI}(U, V) = sum_{i=1}^{|U|}sum_{j=1}^{|V|}P(i, j)logleft(frac{P(i,j)}{P(i)P'(j)}right)$$
где $P(i, j) = |U_i cap V_j| / N$ вероятность того, что случайно выбранный объект попадает в оба класса $U_i$ а также $V_j$.
Это также может быть выражено в формулировке множества элементов:
$$text{MI}(U, V) = sum_{i=1}^{|U|} sum_{j=1}^{|V|} frac{|U_i cap V_j|}{N}logleft(frac{N|U_i cap V_j|}{|U_i||V_j|}right)$$
Нормализованная взаимная информация определяется как
$$text{NMI}(U, V) = frac{text{MI}(U, V)}{text{mean}(H(U), H(V))}$$
Это значение взаимной информации, а также нормализованного варианта не скорректировано на случайность и будет иметь тенденцию к увеличению по мере увеличения количества различных меток (кластеров), независимо от фактического количества «взаимной информации» между назначениями меток.
Ожидаемое значение для взаимной информации можно рассчитать с помощью следующего уравнения [VEB2009] . В этом уравнении $a_i = |U_i|$ (количество элементов в $U_i$) а также $b_j = |V_j|$ (количество элементов в $V_j$).
$$E[text{MI}(U,V)]=sum_{i=1}^{|U|} sum_{j=1}^{|V|} sum_{n_{ij}=(a_i+b_j-N)^+ }^{min(a_i, b_j)} frac{n_{ij}}{N}log left( frac{ N.n_{ij}}{a_i b_j}right) frac{a_i!b_j!(N-a_i)!(N-b_j)!}{N!n_{ij}!(a_i-n_{ij})!(b_j-n_{ij})! (N-a_i-b_j+n_{ij})!}$$
Используя ожидаемое значение, скорректированная взаимная информация может быть затем рассчитана с использованием формы, аналогичной форме скорректированного индекса Rand:
$$text{AMI} = frac{text{MI} — E[text{MI}]}{text{mean}(H(U), H(V)) — E[text{MI}]}$$
Для нормализованной взаимной информации и скорректированной взаимной информации нормализующее значение обычно представляет собой некоторое обобщенное среднее энтропий каждой кластеризации. Существуют различные обобщенные средства, и не существует твердых правил предпочтения одного по сравнению с другим. Решение в основном принимается отдельно для каждого поля; например, при обнаружении сообществ чаще всего используется среднее арифметическое. Каждый метод нормализации обеспечивает «качественно похожее поведение» [YAT2016] . В нашей реализации это контролируется average_methodпараметром.
Vinh et al. (2010) назвали варианты NMI и AMI методом их усреднения [VEB2010] . Их средние «sqrt» и «sum» являются средними геометрическими и арифметическими; мы используем эти более общие имена.
2.3.10.3. Однородность, полнота и V-мера
Зная о назначении основных классов истинности выборкам, можно определить некоторую интуитивно понятную метрику, используя условный энтропийный анализ.
В частности, Розенберг и Хиршберг (2007) определяют следующие две желательные цели для любого кластерного задания:
- однородность : каждый кластер содержит только членов одного класса.
- полнота : все члены данного класса относятся к одному кластеру.
Мы можем превратить эти концепции в партитуры homogeneity_score и completeness_score. Оба ограничены снизу 0,0 и выше 1,0 (чем выше, тем лучше):
>>> from sklearn import metrics >>> labels_true = [0, 0, 0, 1, 1, 1] >>> labels_pred = [0, 0, 1, 1, 2, 2] >>> metrics.homogeneity_score(labels_true, labels_pred) 0.66... >>> metrics.completeness_score(labels_true, labels_pred) 0.42...
Их гармоническое среднее значение, называемое V-мерой , вычисляется по формуле v_measure_score:
>>> metrics.v_measure_score(labels_true, labels_pred) 0.51...
Формула этой функции выглядит следующим образом:
$$v = frac{(1 + beta) times text{homogeneity} times text{completeness}}{(beta times text{homogeneity} + text{completeness})}$$
beta по умолчанию используется значение 1.0, но для использования значения менее 1 для бета-версии:
>>> metrics.v_measure_score(labels_true, labels_pred, beta=0.6) 0.54...
больший вес будет приписан однородности, а использование значения больше 1:
>>> metrics.v_measure_score(labels_true, labels_pred, beta=1.8) 0.48...
больший вес будет приписан полноте.
V-мера фактически эквивалентна описанной выше взаимной информации (NMI), при этом функция агрегирования является средним арифметическим [B2011] .
Однородность, полнота и V-мера могут быть вычислены сразу, используя homogeneity_completeness_v_measure следующее:
>>> metrics.homogeneity_completeness_v_measure(labels_true, labels_pred) (0.66..., 0.42..., 0.51...)
Следующее назначение кластеризации немного лучше, поскольку оно однородное, но не полное:
>>> labels_pred = [0, 0, 0, 1, 2, 2] >>> metrics.homogeneity_completeness_v_measure(labels_true, labels_pred) (1.0, 0.68..., 0.81...)
Примечание:
v_measure_score является симметричным : его можно использовать для оценки соответствия двух независимых присвоений одному и тому же набору данных.
Это не относится к completeness_score и homogeneity_score: оба связаны отношениями:
homogeneity_score(a, b) == completeness_score(b, a)
2.3.10.3.1. Преимущества
- Ограниченные баллы : 0,0 — это настолько плохо, насколько это возможно, 1,0 — идеальный балл.
- Интуитивная интерпретация: кластеризацию с плохой V-мерой можно качественно проанализировать с точки зрения однородности и полноты, чтобы лучше понять, какие «ошибки» допускаются при задании.
- Не делается никаких предположений о структуре кластера : может использоваться для сравнения алгоритмов кластеризации, таких как k-среднее, которое предполагает изотропные формы капли, с результатами алгоритмов спектральной кластеризации, которые могут находить кластер со «сложенными» формами.
2.3.10.3.2. Недостатки
- Ранее введенные метрики не нормализованы в отношении случайной маркировки : это означает, что в зависимости от количества выборок, кластеров и основных классов истинности полностью случайная маркировка не всегда будет давать одинаковые значения для однородности, полноты и, следовательно, v-меры.
В частности, случайная маркировка не даст нулевых оценок, особенно когда количество кластеров велико. Эту проблему можно спокойно игнорировать, если количество выборок больше тысячи, а количество кластеров меньше 10. Для меньших размеров выборки или большего количества кластеров безопаснее использовать скорректированный индекс, такой как Скорректированный индекс ранда (ARI) .

- Эти метрики требуют знания основных классов истинности, хотя почти никогда не доступны на практике или требуют ручного назначения аннотаторами-людьми (как в условиях контролируемого обучения).
Примеры:
- Поправка на случайность при оценке производительности кластеризации : анализ влияния размера набора данных на значение показателей кластеризации для случайных назначений.
2.3.10.3.3. Математическая постановка
Оценки однородности и полноты формально даются по формуле:
$$h = 1 — frac{H(C|K)}{H(C)}$$
$$c = 1 — frac{H(K|C)}{H(K)}$$
где $H(C|K)$ является условной энтропией классов с учетом кластерных назначений и определяется выражением:
$$H(C|K) = — sum_{c=1}^{|C|} sum_{k=1}^{|K|} frac{n_{c,k}}{n} cdot logleft(frac{n_{c,k}}{n_k}right)$$
а также $H(C)$ — энтропия классов и определяется выражением:
$$H(C) = — sum_{c=1}^{|C|} frac{n_c}{n} cdot logleft(frac{n_c}{n}right)$$
с участием n общее количество образцов, $n_c$ а также $n_k$ количество образцов, соответственно принадлежащих к классу c и кластер $k$, и наконец $n_{c, k}$ количество образцов из класса c назначен кластеру k.
Условная энтропия кластеров данного класса $H(C|K)$ и энтропия кластеров $H(K)$ определены симметричным образом.
Розенберг и Хиршберг далее определяют V-меру как гармоническое среднее однородности и полноты:
$$v = 2 cdot frac{h cdot c}{h + c}$$
2.3.10.4. Результаты Фаулкса-Мэллоуса
Индекс Фаулкса-Мэллоуса ( sklearn.metrics.fowlkes_mallows_score) может использоваться, когда известны наземные присвоения классов истинности выборкам. FMI по шкале Fowlkes-Mallows определяется как среднее геометрическое для попарной точности и отзыва:
$$text{FMI} = frac{text{TP}}{sqrt{(text{TP} + text{FP}) (text{TP} + text{FN})}}$$
Где TP— количество истинных положительных результатов (True Positive) (т.е. количество пар точек, принадлежащих одним и тем же кластерам как в истинных, так и в предсказанных метках), FP— это количество ложных положительных результатов (False Positive) (то есть количество пар точек, принадлежащих к одинаковые кластеры в истинных метках, а не в предсказанных метках) и FN является количеством ложно-отрицательных (False Negative) (т. е. количеством пар точек, принадлежащих одним и тем же кластерам в предсказанных метках, а не в истинных метках).
Оценка варьируется от 0 до 1. Высокое значение указывает на хорошее сходство между двумя кластерами.
>>> from sklearn import metrics >>> labels_true = [0, 0, 0, 1, 1, 1] >>> labels_pred = [0, 0, 1, 1, 2, 2]
>>> metrics.fowlkes_mallows_score(labels_true, labels_pred) 0.47140...
Можно переставить 0 и 1 в предсказанных метках, переименовать 2 в 3 и получить тот же результат:
>>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.fowlkes_mallows_score(labels_true, labels_pred) 0.47140...
Идеальная маркировка оценивается в 1,0:
>>> labels_pred = labels_true[:] >>> metrics.fowlkes_mallows_score(labels_true, labels_pred) 1.0
Плохие (например, независимые маркировки) имеют нулевые баллы:
>>> labels_true = [0, 1, 2, 0, 3, 4, 5, 1] >>> labels_pred = [1, 1, 0, 0, 2, 2, 2, 2] >>> metrics.fowlkes_mallows_score(labels_true, labels_pred) 0.0
2.3.10.4.1. Преимущества
- Случайное (единообразное) присвоение меток имеет оценку FMI, близкую к 0,0 для любого значения
n_clustersиn_samples(что не относится, например, к необработанной взаимной информации или V-мере). - Верхний предел — 1 : значения, близкие к нулю, указывают на два назначения меток, которые в значительной степени независимы, а значения, близкие к единице, указывают на значительное согласие. Кроме того, значения ровно 0 указывают на чисто независимые присвоения меток, а FMI ровно 1 указывает, что два назначения меток равны (с перестановкой или без нее).
- Не делается никаких предположений о структуре кластера : может использоваться для сравнения алгоритмов кластеризации, таких как k-среднее, которое предполагает изотропные формы капли, с результатами алгоритмов спектральной кластеризации, которые могут находить кластер со «сложенными» формами.
2.3.10.4.2. Недостатки
- Вопреки инерции, меры, основанные на FMI, требуют знания основных классов истинности, хотя почти никогда не доступны на практике или требуют ручного назначения аннотаторами-людьми (как в условиях контролируемого обучения).
Рекомендации
- EB Fowkles и CL Mallows, 1983. «Метод сравнения двух иерархических кластеров». Журнал Американской статистической ассоциации. http://wildfire.stat.ucla.edu/pdflibrary/fowlkes.pdf
- Запись в Википедии об Индексе Фаулкса-Маллоуза
2.3.10.5. Коэффициент силуэта
Если наземные метки достоверности неизвестны, оценка должна выполняться с использованием самой модели. Коэффициент силуэта ( sklearn.metrics.silhouette_score) является примером такой оценки, где более высокий показатель коэффициента силуэта относится к модели с лучше определенными кластерами. Коэффициент силуэта определяется для каждого образца и состоит из двух баллов:
- a : Среднее расстояние между образцом и всеми другими точками того же класса.
- b : Среднее расстояние между образцом и всеми другими точками в следующем ближайшем кластере .
Тогда коэффициент силуэта s для одного образца определяется как:
$$s = frac{b — a}{max(a, b)}$$
Коэффициент силуэта для набора образцов дается как среднее значение коэффициента силуэта для каждого образца.
>>> from sklearn import metrics >>> from sklearn.metrics import pairwise_distances >>> from sklearn import datasets >>> X, y = datasets.load_iris(return_X_y=True)
При обычном использовании коэффициент силуэта применяется к результатам кластерного анализа.
>>> import numpy as np >>> from sklearn.cluster import KMeans >>> kmeans_model = KMeans(n_clusters=3, random_state=1).fit(X) >>> labels = kmeans_model.labels_ >>> metrics.silhouette_score(X, labels, metric='euclidean') 0.55...
Рекомендации
- Питер Дж. Руссеу (1987). «Силуэты: графическое средство для интерпретации и проверки кластерного анализа». Вычислительная и прикладная математика 20: 53–65. DOI: 10.1016 / 0377-0427 (87) 90125-7 .
2.3.10.5.1. Преимущества
- Оценка ограничена от -1 за неправильную кластеризацию до +1 за высокоплотную кластеризацию. Баллы около нуля указывают на перекрывающиеся кластеры.
- Оценка выше, когда кластеры плотные и хорошо разделенные, что относится к стандартной концепции кластера.
2.3.10.5.2. Недостатки
- Коэффициент силуэта обычно выше для выпуклых кластеров, чем для других концепций кластеров, таких как кластеры на основе плотности, подобные тем, которые получены с помощью DBSCAN.
Примеры:
- Выбор количества кластеров с анализом силуэта в кластеризации KMeans : в этом примере анализ силуэта используется для выбора оптимального значения для n_clusters.
2.3.10.6. Индекс Калински-Харабаса
Если наземные метки достоверности неизвестны, индекс Калински-Харабаса ( sklearn.metrics.calinski_harabasz_score) — также известный как критерий отношения дисперсии — можно использовать для оценки модели, где более высокий балл Калински-Харабаса относится к модели с более определенными кластерами.
Индекс представляет собой отношение суммы дисперсии между кластерами и дисперсии внутри кластера для всех кластеров (где дисперсия определяется как сумма квадратов расстояний):
>>> from sklearn import metrics >>> from sklearn.metrics import pairwise_distances >>> from sklearn import datasets >>> X, y = datasets.load_iris(return_X_y=True)
При обычном использовании индекс Калински-Харабаса применяется к результатам кластерного анализа:
>>> import numpy as np >>> from sklearn.cluster import KMeans >>> kmeans_model = KMeans(n_clusters=3, random_state=1).fit(X) >>> labels = kmeans_model.labels_ >>> metrics.calinski_harabasz_score(X, labels) 561.62...
2.3.10.6.1. Преимущества
- Оценка выше, когда кластеры плотные и хорошо разделенные, что относится к стандартной концепции кластера.
- Счет быстро подсчитывается.
2.3.10.6.2. Недостатки
- Индекс Калински-Харабаса обычно выше для выпуклых кластеров, чем для других концепций кластеров, таких как кластеры на основе плотности, подобные тем, которые получены с помощью DBSCAN.
2.3.10.6.3. Математическая постановка
Для набора данных $E$ размера $n_E$ который был сгруппирован в $k$ кластеры, оценка Калински-Харабаса $s$ определяется как отношение средней дисперсии между кластерами и дисперсии внутри кластера:
$$s = frac{mathrm{tr}(B_k)}{mathrm{tr}(W_k)} times frac{n_E — k}{k — 1}$$
где $tr(B_k)$ является следом межгрупповой дисперсионной матрицы и $tr(W_k)$ является следом матрицы дисперсии внутри кластера, определяемой следующим образом:
$$W_k = sum_{q=1}^k sum_{x in C_q} (x — c_q) (x — c_q)^T$$
$$B_k = sum_{q=1}^k n_q (c_q — c_E) (c_q — c_E)^T$$
с участием $C_q$ набор точек в кластере $q$, $c_q$ центр кластера $q$, $c_E$ центр $E$, а также $n_q$ количество точек в кластере $q$.
Рекомендации
- Калински Т. и Харабаш Дж. (1974). «Дендритный метод кластерного анализа» . Коммуникации в теории статистики и методах 3: 1-27. DOI: 10.1080 / 03610927408827101 .
2.3.10.7. Индекс Дэвиса-Болдина
Если наземные метки истинности неизвестны, для оценки модели можно использовать индекс Дэвиса-Болдина (sklearn.metrics.davies_bouldin_score), где более низкий индекс Дэвиса-Болдина относится к модели с лучшим разделением между кластерами.
Этот индекс означает среднее «сходство» между кластерами, где сходство — это мера, которая сравнивает расстояние между кластерами с размером самих кластеров.
Ноль — это наименьший возможный результат. Значения, близкие к нулю, указывают на лучшее разделение.
При обычном использовании индекс Дэвиса-Болдина применяется к результатам кластерного анализа следующим образом:
>>> from sklearn import datasets >>> iris = datasets.load_iris() >>> X = iris.data >>> from sklearn.cluster import KMeans >>> from sklearn.metrics import davies_bouldin_score >>> kmeans = KMeans(n_clusters=3, random_state=1).fit(X) >>> labels = kmeans.labels_ >>> davies_bouldin_score(X, labels) 0.6619...
2.3.10.7.1. Преимущества
- Вычисление Дэвиса-Боулдина проще, чем оценка Силуэта.
- В индексе вычисляются только количества и характеристики, присущие набору данных.
2.3.10.7.2. Недостатки
- Индекс Дэвиса-Боулдинга обычно выше для выпуклых кластеров, чем для других концепций кластеров, таких как кластеры на основе плотности, подобные тем, которые получены из DBSCAN.
- Использование центроидного расстояния ограничивает метрику расстояния евклидовым пространством.
2.3.10.7.3. Математическая постановка
Индекс определяется как среднее сходство между каждым кластером. $C_i$ для $i=1, …, k$ и его самый похожий $C_j$. В контексте этого индекса сходство определяется как мера $R_{ij}$ что торгуется:
- $s_i$, среднее расстояние между каждой точкой кластера $i$ и центроид этого кластера — также известный как диаметр кластера.
- $d_{ij}$, расстояние между центрами скоплений $i$ а также $j$.
Простой выбор для построения $R_{ij}$ так что он неотрицателен и симметричен:
$$R_{ij} = frac{s_i + s_j}{d_{ij}}$$
Тогда индекс Дэвиса-Болдина определяется как:
$$DB = frac{1}{k} sum_{i=1}^k max_{i neq j} R_{ij}$$
Рекомендации
- Дэвис, Дэвид Л .; Боулдин, Дональд В. (1979). «Мера разделения кластеров» IEEE-транзакции по анализу шаблонов и машинному интеллекту. ПАМИ-1 (2): 224-227. DOI: 10.1109 / TPAMI.1979.4766909 .
- Халкиди, Мария; Батистакис, Яннис; Вазиргианнис, Михалис (2001). «О методах кластеризации валидации» Журнал интеллектуальных информационных систем, 17 (2-3), 107-145. DOI: 10,1023 / А: 1012801612483 .
- Запись в Википедии для индекса Дэвиса-Болдина .
2.3.10.8. Матрица непредвиденных обстоятельств
Матрица непредвиденных обстоятельств ( sklearn.metrics.cluster.contingency_matrix) сообщает мощность пересечения для каждой истинной / прогнозируемой пары кластеров. Матрица непредвиденных обстоятельств обеспечивает достаточную статистику для всех метрик кластеризации, где выборки независимы и одинаково распределены, и нет необходимости учитывать некоторые экземпляры, которые не были кластеризованы.
Вот пример:
>>> from sklearn.metrics.cluster import contingency_matrix
>>> x = ["a", "a", "a", "b", "b", "b"]
>>> y = [0, 0, 1, 1, 2, 2]
>>> contingency_matrix(x, y)
array([[2, 1, 0],
[0, 1, 2]])
Первая строка выходного массива указывает, что есть три образца, истинный кластер которых равен «a». Из них два находятся в предсказанном кластере 0, один — в 1 и ни один — в 2. И вторая строка указывает, что есть три выборки, истинный кластер которых равен «b». Из них ни один не находится в прогнозируемом кластере 0, один — в 1, а два — в 2.
Матрица неточностей для классификации является квадратной матрицей непредвиденной где порядок строк и столбцов соответствует списку классов.
2.3.10.8.1. Преимущества
- Позволяет изучить распространение каждого истинного кластера по прогнозируемым кластерам и наоборот.
- Вычисленная таблица непредвиденных обстоятельств обычно используется при вычислении статистики сходства (как и другие, перечисленные в этом документе) между двумя кластерами.
2.3.10.8.2. Недостатки
- Матрицу непредвиденных обстоятельств легко интерпретировать для небольшого количества кластеров, но становится очень трудно интерпретировать для большого количества кластеров.
- Он не дает ни одной метрики для использования в качестве цели для оптимизации кластеризации.
2.3.10.9. Матрица неточности пар
Матрица смешения пар ( sklearn.metrics.cluster.pair_confusion_matrix) представляет собой матрицу подобия 2×2
$$begin{split}C = left[begin{matrix}
C_{00} & C_{01}
C_{10} & C_{11}
end{matrix}right]end{split}$$
между двумя кластерами, вычисленными путем рассмотрения всех пар выборок и подсчета пар, которые назначены в один и тот же или в разные кластеры в рамках истинной и прогнозируемой кластеризации.
В нем есть следующие записи:
$C_{00}$: количество пар с обеими кластерами, в которых образцы не сгруппированы вместе
$C_{10}$: количество пар с истинной кластеризацией меток, в которых образцы сгруппированы вместе, но в другой кластеризации образцы не сгруппированы вместе
$C_{01}$: количество пар с истинной кластеризацией меток, в которых образцы не сгруппированы вместе, а другая кластеризация содержит образцы, сгруппированные вместе
$C_{11}$: количество пар с обеими кластерами, имеющими образцы, сгруппированные вместе
Если рассматривать пару образцов, сгруппированных вместе как положительную пару, то, как и в бинарной классификации, количество истинных отрицательных значений равно $C_{00}$, ложноотрицательные $C_{10}$, истинные положительные стороны $C_{11}$ а ложные срабатывания $C_{01}$.
Идеально совпадающие метки имеют все ненулевые записи на диагонали независимо от фактических значений меток:
>>> from sklearn.metrics.cluster import pair_confusion_matrix
>>> pair_confusion_matrix([0, 0, 1, 1], [0, 0, 1, 1])
array([[8, 0],
[0, 4]])
>>> pair_confusion_matrix([0, 0, 1, 1], [1, 1, 0, 0])
array([[8, 0],
[0, 4]])
Метки, которые назначают все члены классов одним и тем же кластерам, являются полными, но не всегда могут быть чистыми, следовательно, наказываются и имеют некоторые недиагональные ненулевые записи:
>>> pair_confusion_matrix([0, 0, 1, 2], [0, 0, 1, 1])
array([[8, 2],
[0, 2]])
Матрица не симметрична:
>>> pair_confusion_matrix([0, 0, 1, 1], [0, 0, 1, 2])
array([[8, 0],
[2, 2]])
Если члены классов полностью разделены по разным кластерам, назначение полностью неполное, следовательно, матрица имеет все нулевые диагональные элементы:
>>> pair_confusion_matrix([0, 0, 0, 0], [0, 1, 2, 3])
array([[ 0, 0],
[12, 0]])
Рекомендации
- Л. Хьюберт и П. Араби, Сравнение разделов, журнал классификации 1985 < https://link.springer.com/article/10.1007%2FBF01908075 > _
Ни один опытный SEO-специалист не работает с сайтом без сбора семантического ядра. В идеале это делают еще во время планирования сайта, а уже потом обдумывают и структуру, и контент, и продвижение. Но чтобы список релевантных поисковых запросов и ключевых слов превратился в смысловую основу сайта, их нужно объединить в тематические кластеры по смыслу. Расскажем о кластеризации семантического ядра подробнее.
Определение кластеризации
Под кластеризацией ядра понимается деление имеющегося множества ключей на кластеры (группы по смыслу). Каждому кластеру должен соответствовать индивидуальный лендинг на сайте.
Если ключи грамотно сгруппированы, это сказывается на ранжировании в поисковой выдаче. Каждый лендинг создается осмысленно,а каждому из кластеров соответствует интересный конечному пользователю контент. Страницы, созданные под конкретные запросы, легко выходят в топ поисковой выдачи, что снижает расходы на продвижение сайта.
Один и тот же кластер объединяет разные ключевые слова, по которым потенциальные клиенты ищут примерно одно и то же. Это могут быть как синонимы, так и просто запросы, близкие по смыслу (к примеру, пользователи, ищущие «магазин обуви» и «обувь», на самом деле ищут, где эту обувь можно купить).
Ключи из одного и того же кластера, как правило, распределяются по одному лендингу, причем основной ключ идет в начале.
Читайте также: «Как составить семантическое ядро»
Поисковый интент
Начальный этап сортировки поисковых запросов — это определение поискового интента (намерения пользователя при поиске информации). Интент используется поисковыми системами для выдачи сайтов и веб-страниц, близких по смыслу тому, что ищет пользователь.
Интент бывает информационным (с целью информирования о чем-либо) или коммерческим (с целью покупки товаров и услуг). Один и тот же запрос может приобретать информационный или коммерческий интент в зависимости от спроса, его сезонности, доступности товара и других факторов.

Поисковый запрос с различным целями поиска: информационным и коммерческим
Сортировать ключи по интенту можно в том числе по фактору присутствия коммерческой составляющей: наиболее «коммерческие» запросы стоит соотносить с коммерческими лендингами, наименее — с информационными.
Распространенная ошибка — совмещение ключей с разным интентом в пределах одной страницы. Чаще всего, когда человек ищет информацию о каком-то объекте или уточняет детали, он не собирается ничего купить. К примеру, если пользователь интересуется, как починить компьютер, он вряд ли принял решение о покупке нового, а если ищет советы стилиста, заказывать одежду он если и будет, то позже. Совмещение фраз с коммерческим и информационным интентом ведет к снижению релевантности веб-страницы, повышению нецелевого трафика и процента отказов.
Александр Шестаков, руководитель направления ссылочных продуктов Links.Sape:
«Кластеризовать семантическое ядро можно различными способами. В числе основных: методы отбора по поисковому интенту, непосредственно по семантике и по соответствию топ-10 поисковой выдачи.
Семантика — самое широкое понятие, разделяющее все запросы на две объемные группы: коммерческие и информационные. Эти категории всегда продвигают на разных страницах сайта, не смешивая их.
Интент категоризирует запросы более узко, обозначая схожие намерения у разных групп пользователей. Размещать получившиеся кластеры можно на одних страницах, внимательно анализируя значения слов и поведенческие факторы.
При анализе топ-10 поисковой выдачи SEO-специалист ищет запросы, по которым в выдаче обнаруживаются общие результаты, и формирует кластеры исходя из таких пересечений. При этом строгость отбора может варьироваться: оптимизатор может ограничиться тем, чтобы каждый запрос пересекался только с 1-2 другими из того же кластера, а может оставить в кластере только те, которые пересекаются со всеми остальными одновременно. Чем выше требования к количеству пересечений, тем больше времени займет анализ. Скорее всего, кластер запросов в этом случае получится меньшего размера, но он будет более релевантным».
Методы кластеризации запросов
Существует несколько вариантов кластеризации поисковых запросов: как правило, они применяются в сочетании друг с другом. Перечислим и объясним основные методы.
Логическое разбиение
Это точечный инструмент ядер для небольших семантических, предполагающий ручную работу SEO-специалиста, который самостоятельно определяет релевантность каждого запроса по смыслу. Это кропотливая, но довольно действенная схема.
Читайте также: «SEO-продвижение интернет-магазина для начинающих»
По семантической схожести
Этот метод кластеризации осуществляется при помощи искусственного интеллекта, способного объединять поисковые запросы в кластеры по близости семантики, причем лексикографическое сходство ключей не является обязательным критерием.
Для недавно созданного сайта кластеризация по семантической схожести не работает: для нее нужно большое семантическое ядро. Ну и при автоматической кластеризации не учитывается коммерческая составляющая запросов, потому сортировать ключи по интенту придется вручную.
Группировка по топам
Кластеризация запросов по топам считается наиболее точным и действенным методом. В его основе лежит объединение в кластеры согласно базе сайтов из топа поисковой выдачи Google и Яндекс. Для кластеризации по топам используются специальные программы, о которых мы расскажем чуть позже. Проводить ее можно тремя методами.
Soft
В основе так называемого мягкого метода кластеризации находится высокочастотный ключ, являющийся своего рода связующим звеном с остальными ключами в группе, которые вообще могут не пересекаться друг с другом по URL. Достоинство этого метода заключается в большом объеме данных, но точность группировки при этом оставляет желать лучшего. Для информационных сайтов и небольших интернет-магазинов такой метод вполне подходит для увеличения трафика, но вот с целевыми запросами уже могут быть проблемы.
Hard
Жесткий метод кластеризации основан на наличии общего набора страниц в поисковой выдаче по всем входящим в группу ключам. Ключ не включается в кластер, если он находится за порогом пересечения с остальными: к примеру, если у вас есть порог в 3 URL, то каждый запрос должен совпадать с остальными фразами трижды. При таком пороге пересечений точность результатов достигает целых 90%, но объем кластера выходит значительно меньше, чем при мягком методе. Подобная методика идеально подходит для высококонкурентных ниш, в которых необходима высокая релевантность лендингов выбранным ключам: большинство интернет-магазинов вполне соответствует этому требованию.
Moderate или Middle
Этот метод представляет собой нечто среднее между двумя перечисленными выше. В отдельной группе каждый запрос должен быть связан с другими. Кластер же напоминает некое облако взаимосвязанных фраз без жестких требований по порогу пересечения, и коэффициенты пересечений адресов в топе у соседних ключей могут отличаться друг от друга.
Анна Юдачева. Индивидуальный предприниматель (ведет два производственных проекта и один по транспортным перевозкам; работает с маркетплейсами):
«Составление семантического ядра – первое с чего начинается работа над проектом. На первоначальном этапе должны быть выделены профильные направления деятельности организации. Это должны быть отдельные самостоятельные блоки, которые состоят из высокочастотных запросов.
Приведу пример кластеризации по контекстной рекламе для
завода по производству строительного материала – керамзита. Важными блоками будут такие разделы как «Керамзит», «Керамзитобетонные блоки», «Керамзитобетон» и др. Далее необходимо проработать каждый раздел на среднечастотные и низкочастотные запросы, из которых потом будет проводиться кластеризация по рекламным блокам. Остановимся на разделе «Керамзит», на этом этапе должно быть хорошее погружение в деятельность компании. Важно понимать, какие виды продукции выпускает завод, варианты фасовки, каким транспортным средством перевозят (водный, автомобильный, ж/д) и многое другое. Изучив эту информацию, маркетолог приступает к формированию среднечастотных и низкочастотных запросов, например «керамзит купить», «керамзит 10 20 мм», «керамзит в мешках », «сухая засыпка», «керамзит с доставкой» и т.д.
На следующем этапе необходимо проанализировать, с какими соседними городами или странами сотрудничает предприятие. Таким образом, первый кластер СЯ по выделенной теме может быть поделен по странам или по городам, куда отправляют груз. Соответственно, подобранные запросы будут повторяться в каждом блоке контекстной рекламы, но различаться по геолокации и цене запроса.
Второй способ кластеризации: «по определяющему слову» выделенных запросов для продвижения, например «купить», «заказать», «цена», «фракции». То есть в каждом блоке будут запросы с указанными вхождениями. При такой работе очень важно отминусовать запросы из соседних блоков, чтобы не было дублей ключевиков и не составлять самим себе конкуренцию и удорожать запрос. Например, в группе объявлений «купить», необходимо прописать минус-слова «цена», «в мешках», т.е. показывая рекламу по ключевому слову «купить керамзит» за счет минус-слов мы не будем дублировать запрос «купить керамзит в мешках», который будет показываться в кластере «в мешках».
И последний кластер, который хотела бы выделить — это деление рекламы на блоки по продукции, т.е. в разделе «керамзит» будут кластеры исключительно по видам продукции «керамзит 0 5 мм», «керамзит 5 10 мм», «керамзит 10 20 мм».
Отмечу, что выбор кластера должен быть сформирован от задач, которые стоят перед маркетологом. Если нужно продать любую фракцию керамзита фасованного именно в мешки, то это одна работа, а если нужно продать определенную фракцию любой фасовки, то деление на блоки будет другим».
Способы кластеризации ядра
Группировать ключи можно двумя основными способами — вручную либо автоматически.
Ручная кластеризация
Ручной способ применяется в основном при логическом разбиении. Но так как при этом методе возможны ошибки, готовые кластеры надо перепроверять: на группировку и перепроверки ядра, состоящего из 100 ключевиков, требуется полноценный рабочий день.
Ограничиться только ручной кластеризацией возможно лишь для небольших сайтов, где не нужно гнаться за высокой точностью. Однако грамотный специалист, владеющий конкретной тематикой, может сделать кластеры вручную так, что результат будет релевантен требованиям целевой аудитории. Вести статистику в таком случае целесообразно в Excel, LibreOffice Calc, Google Spreadsheets или аналогичных программах.
Автоматическая кластеризация
Большинство популярных онлайн-сервисов для кластеризации семантического ядра основано на топе поисковой выдачи. Более точные настройки уже зависят от конкретного сервиса: вручную задаются порог совпадений, поисковая система и регион. Стоимость кластеризации зависит от объема семантического ядра.
А теперь кратко расскажем об основных используемых программах для автоматической кластеризации.
Key Collector
Это платная профессиональная программа с бессрочной лицензией для работы с семантическим ядром. Делить запросы на группы можно по тегам групп, по поисковой выдаче и конкурентам в ней, отдельным словам или составу фраз.

Программа Key Collector
KeyAssort
У этой программы существуют две версии : бесплатная демо-версия и платная полная. С ее помощью возможна кластеризация поисковых запросов, формирование структуры сайта на основе результатов и отчета по лидерам топа поисковой выдачи.

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

Программа Key Clustered
Владислав Сувернев, интернет-маркетолог, эксперт в области продвижения в интернете:
«Я для себя выделяю три способа кластеризации семантического ядра:
— Ручной. Сколько бы сервисов не придумало человечество, старые добрые глаза и руки специалиста они на 100% в этом вопросе не заменят. Я люблю заниматься кластеризацией семантики в обычной Гугл-таблице или Экселе. Но если ядро получилось на несколько тысяч запросов, кластеризовать его полностью вручную будет та еще задачка.
— Автоматический. Полная противоположность первому — здесь мы все отдаем на откуп сервисам типа Key Collector, Key Assort или Keys.so. Пользуюсь этим методом редко, только если сроки сильно горят и заказчик готов пожертвовать качеством ради скорости выполнения этой задачи. Обычно за такими сервисами все равно нужно подчищать руками, здесь на помощь как раз приходит третий метод.
— Комбинированный. Стараюсь пользоваться им как можно чаще, если не всегда. При этом методе первоначальную работу отдаю сервисам, которые перечислил выше, а затем руками подчищаю за ними. Такой метод позволяет сделать работу быстрее, чем ручной и качественнее, чем полностью автоматический.
Важно понимать, зачем вы делаете кластеризацию СЯ. Например, для рекламы в Яндекс Директ семантическое ядро разделяют на группы для того, чтобы не получить статус «Мало показов» и создать для каждой группы максимально релевантные запросам объявления. В таком случае нужно помнить, что есть техническое ограничение для кампаний в Директе — не больше 1000 групп на кампанию.
Если брать этот пример, то можно назвать «эффективной кластеризацией» ту, которая привела к появлению кампании без статуса «Мало показов» и в нужно лимите — до 1000 групп».
Дмитрий Матвеев. Предприниматель, генеральный директор компании «Мой Автопрокат»:
«Автоматизация процессов это, безусловно, полезно и правильно, но доверять всю работу программным алгоритмам нельзя, поэтому рекомендую использовать комбинированный способ. Первичная кластеризация производится с помощью онлайн-сервиса, а в дальнейшем дорабатывается вручную, т.к. ТОП выдачи поисковых машин в некоторых случаях не соответствует интенту (потребности пользователя), особенно для узкоспециализированных и низкоконкурентных ключевых фраз.
Для небольшого семантического ядра по низкоконкурентным запросам, как правило, отрабатывает Soft-метод кластеризации, при котором не производится дополнительная проверка совпадений URL по каждой ключевой фразе. Для ресурсов, которые имеют сложную структуру, продвигаются по высокочастотным запросам, дополнительная «шлифовка» кластеров с помощью Hard метода будет не лишней.
Мы протестировали несколько сервисов, начиная с Coolakov, который позволяет бесплатно кластеризовать до 500 ключевых фраз и не всегда группирует достаточно точно. Также были испытаны SerpStat, Топвизор, KeyAssort, Just Magic. В итоге выбор остановлен на Rush Analytics. Обладает точным алгоритмом и удобным интерфейсом. Единственным минусом можно считать глубину анализа – сервис работает по ТОП-10 выдачи поисковых систем».
Параметры, влияющие на эффективность кластеризации
На эффективность кластеризации влияет несколько важных параметров:
1. Качество и объем запросов по каждому кластеру и вхождение туда нужных ключевых слов и фраз.
2. Релевантность контента лендинга соответствующему кластеру и удовлетворенность пользователя качеством этого контента.
3. Совместимость различных запросов на одной и той же странице и отсутствие ключей с различным между собой интентом.
Ни одна программа для автоматической кластеризации не работает идеально точно и безошибочно. Но улучшить качество работы софта можно при грамотной подготовке семантического ядра и последующей ручной проверке получившихся кластеров.
Автоматическая кластеризация помогает значительно увеличить скорость работы с большими массивами данных, обработать которые вручную практически невозможно. Программа выполняет за несколько минут объем, на который у человека может уйти несколько месяцев работы, но ручная проверка результатов все равно необходима. Человеческий интеллект превосходит искусственный при работе с семантическими нюансами слов и фраз, отгадывании интента и корректность полученных групп, потому автоматическая работа всегда должна сочетаться с ручной.
Дмитрий Матвеев. Предприниматель, генеральный директор компании «Мой Автопрокат»:
«Всегда в первую очередь нужно отталкиваться от потребностей пользователя и брать интент за основу кластеризации. Набор важных технических параметров при формировании кластеров необходимо определять по конкретному типу ресурса, сфере деятельности, индивидуальным особенностям проекта. Для объемного семантического ядра в высококонкурентной сфере очень важно учитывать порог кластеризации, т.е. сколько одинаковых URL у разных запросов. Чем выше значение, тем точнее кластера, но увеличивается их количество и уменьшается размер, что может потребовать больших усилий и затрат по созданию новых страниц (что не всегда целесообразно). Также для некоторых проектов важно учитывать глубину анализа выдачи. Большая часть сервисов «пробивает» ТОП-10, однако некоторые позволяют анализировать ТОП-30 или даже ТОП-50. Благодаря этому можно снизить погрешности алгоритмов».
Частые ошибки, возникающие при кластеризации
Даже при качественно собранном семантическом ядре ошибки кластеризации могут негативно сказаться на поведенческих факторах ранжировании сайта. Среди наиболее распространенных ошибок стоит отметить разный интент запросов на одной и той же странице, отсутствие синонимов в семантическом ядре, несоответствие ключевых слов тематике лендинга, неполное ядро, содержащее только высоко- и среднечастотные запросы, обилие «мусора» (посторонних ключей, ошибок, опечаток, дублей, специальных символов). Все эти нюансы необходимо тщательно отслеживать.
Читайте также: «Как провести SEO-аудит сайта»
Кластеризация — незаменимый этап при подготовке семантики, от которого зависит разработка структуры сайта. Если же у вас уже есть готовый сайт, который вы намерены развивать и предлагать, то семантику необходимо периодически уточнять и группировать ключевые слова: без этого оптимизация невозможна.
Топ поисковой выдачи Google и Яндекс постоянно меняется, потому семантическое ядро не собирается раз и навсегда. Поэтому обновление семантики, обновление устаревших ключей и совершенствование контента сайта — это постоянная и кропотливая работа. Делать это стоит, используя специальные программы и проверяя результаты их работы вручную: так вы добьетесь оптимальной скорости процесса без потерь для качества.
Создать аккаунт на AdvantShop
На платформе вы сможете быстро создать интернет-магазин, лендинг или автоворонку.
Воспользоваться консультацией специалиста
Ответим на любые ваши вопросы и поможем выйти на маркетплейсы.
Связаться
Все курсы > Вводный курс > Занятие 16
Основная идея кластерного анализа (clustering, cluster analysis) заключается в том, чтобы разбить объекты на группы или кластеры таким образом, чтобы внутри группы эти наблюдения были более похожи друг на друга, чем на объекты другого кластера.

При этом мы заранее не знаем на какие кластеры необходимо разбить наши данные. Это связано с тем, что мы обучаем модель на неразмеченных данных (unlabeled data), то есть без целевой переменной, компонента y. Именно поэтому в данном случае говорят по машинное обучение без учителя (Unsupervised Learning).
Кластерный анализ может применяться для сегментации потребителей, обнаружения аномальных наблюдений (например, при выявлении мошенничества) и в целом для структурирования данных, о содержании которых мало что известно заранее.
Как же разбить данные на кластеры?
Изучая векторы и матрицы, мы узнали, что векторы данных можно сравнивать между собой (оценивать их схожесть), измеряя расстояние между ними. Кластерный анализ использует именно этот подход. Мы измеряем расстояние между точками и на основе этого измерения принимаем решение к какому кластеру отнести то или иное наблюдение.
В рамках этого занятия мы поговорим про алгоритм, который называется методом k-средних (k-means clustering method).
Метод k-средних
Давайте пошагово разберемся в том, как работает этот алгоритм.
Шаг 1. Вначале возьмем данные и самостоятельно выберем желаемое количество кластеров и обозначим их буквой k (отсюда название метода). Пусть в данном случае их будет три.

Шаг 2. Расположим несколько точек. Их количество будет равно количеству кластеров. Эти точки называются центроидами. Посчитаем расстояние от наших данных до каждого из центроидов. Логично отнести наблюдение к тому центроиду, который находится ближе.

В частности, T1 будет отнесена к C2.
Шаг 3. Таким образом, каждая точка будет отнесена к определенному центроиду (кластеру).

Шаг 4. Сместим наши центроиды в центр получившихся кластеров.

Шаг 5. Вновь отнесем точки к каждому из центроидов. Некоторые наблюдения «переметнутся» к другому центроиду.

Мы будем повторять шаги 4 и 5 до тех пор, пока алгоритм не стабилизируется, то есть до тех пор, пока наблюдения не перестанут переходить от одного центроида (кластера) к другому.
Говоря более формально, цель алгоритма — минимизировать сумму квадратов внутрикластерных расстояний до центра кластера (within-cluster sum of squares, WCSS, наша функция потерь):

Остается нерешенным важный вопрос.
Сколько кластеров выбрать?
Есть два способа выбора количества кластеров:
- Экспертный метод. Выбор количества кластеров будет зависеть от знания о предметной области (domain knowledge)
- Метод локтя (elbow method). Мы также можем (1) обучить модель используя несколько вариантов количества кластеров, (2) измерить сумму квадратов внутрикластерных расстояний и (3) выбрать тот вариант, при котором данное расстояние перестанет существенно уменьшаться.
На графике метод локтя выглядит следующим образом.

Как мы видим, после того как количество кластеров достигает трех, сумма квадратов внутрикластерных расстояний перестает существенно уменьшаться. Значит в данном случае три кластера и будет оптимальным значением.
О важности нормализации данных
Алгоритм очень чувствителен к масштабу признаков. В связи с этим нормализация данных (feature scaling) приобретает особое значение. Так как при формировании кластеров мы измеряем расстояние (в частности, Евклидово расстояние), то признаки с большим масштабом будут иметь больший вес. Приведу пример.
Предположим у вас есть данные о возрасте и ежемесячных тратах людей по кредитным картам.

Нам нужно определить насколько человек 1 отличается (насколько велико расстояние) от человека 2 и 3. В зависимости от этого мы будем формировать наши кластеры.
Вначале давайте обратимся к здравому смыслу. Мы видим, что респонденты 1 и 2 схожи, потому что им обоим около 20-ти и расходы у них примерно одинаковы. Респондент 3, имея схожие расходы, сильно отличается из-за своего возраста. Он в два раза старше. Это особенно легко увидеть на графике ниже:

Теперь посмотрим, что скажет математика, если мы оставим масштаб признаков без изменений.
Напомню формулу Евклидова расстояния.
$$ D = sqrt {left( {x_1-x_2 } right)^2 + left( {y_1-y_2 } right)^2} $$
В данном случае x1 и x2 — это возраст двух сравниваемых нами людей, а y1 и y2 — их расходы. Подставим значения в формулу.
$$ D_1 = sqrt {left( {23-20 } right)^2 + left( {55000-50000 } right)^2 } approx 5000 $$
$$ D_2 = sqrt {left( {40-20 } right)^2 + left( {50500-50000 } right)^2 } approx 500 $$
Как мы видим, расстояние от человека 1 до человека 2 целых 5000 единиц (лет и рублей), в то время как до человека 3 только 500. Результат обратный тому, на который мы рассчитывали исходя из здравого смысла.
Это связано с тем, что масштаб второго признака (расходов) намного больше масштаба первого (возраст). И даже небольшое изменение в расходах вызывает существенное изменение расстояния, в то время как значительное изменение возраста не оказывает на него практически никакого влияния.
Практический пример — цветы ириса
Для иллюстрации работы алгоритма кластеризации мы возьмем еще один классический датасет из библиотеки sklearn, а именно данные о цветах ириса.

По традиции вначале откроем ноутбук к этому занятию⧉
Этап 1. Загрузка данных
Давайте сразу загрузим данные и преобразуем их в формат датафрейма из библиотеки Pandas.
|
# импортируем набор данных из модуля datasets библиотеки sklearn from sklearn.datasets import load_iris iris = load_iris() # создаем датафрейм, берем данные из iris.data и название столбцов из iris.feature_names iris_df = pd.DataFrame(iris.data, columns = iris.feature_names) # смотрим первые пять значений iris_df.head() |

|
# посмотрим на размерность iris_df.shape |
В данном случае речь идет о наборе данных, который состоит из 150 образцов цветов ириса, разделенных на три вида (Iris setosa, Iris virginica и Iris versicolor) по 50 растений в каждом. Каждый образец описан четырьмя атрибутами (длиной и шириной чашелистика и длиной и шириной лепестка).
Обратите внимание, мы сознательно не стали использовать целевую переменную, потому что решаем задачу кластеризации и предполагается, что мы не знаем заранее на какие группы или кластеры удастся разбить наши данные.
С другой стороны, тот факт, что нам заранее известно, что видов здесь три, поможет нам оценить качество кластерного анализа (об этом ниже).
Этап 2. Предварительная обработка данных
Для начала посмотрим, присутствуют ли пропущенные значения.
|
sepal length (cm) 0 sepal width (cm) 0 petal length (cm) 0 petal width (cm) 0 dtype: int64 |
Мы видим, что пропущенных значений нет. Датасет был предварительно обработан.
Категориальных переменных у нас также нет. Это становится понятно из результата функции head().
Остается разобраться с масштабом признаков. Как уже было сказано, для метода k-средних нормализация данных имеет особое значение. Даже небольшое различие в масштабе признаков может повлиять на конечный результат.
|
# импортируем необходимый класс из модуля preprocessing библиотеки sklearn from sklearn.preprocessing import StandardScaler # создадим объект этого класса scaler = StandardScaler() # приведем данные к единому масштабу iris_scaled = scaler.fit_transform(iris_df) # заново создадим датафрейм с нормализованными значениями iris_df_scaled = pd.DataFrame(iris_scaled, columns = iris.feature_names) # посмотрим на первые пять строк iris_df_scaled.round(2).head() |

Этап 3 и 4. EDA и отбор признаков
Для целей кластерного анализа мы возьмем все имеющиеся у нас данные.
|
# оставим все признаки и для наглядности поместим наши данные в переменную Х # целевой переменной у нас разумеется нет X = iris_df_scaled |
Этап 5.1. Обучение модели
Самый главный вопрос, который нам предстоит решить на этапе обучения модели заключается в выборе количества кластеров.
Количество кластеров в методе k-средних являтся так называемым гиперпараметром, то есть параметром, который нужно задать до обучения модели.
Мы усложним решаемую нами задачу и сделаем вид, что не обладаем экспертными знаниями о количестве видов ириса (на самом деле напомню, мы знаем, что их три). Значит нужно использовать метод локтя.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# импортируем нужный класс from sklearn.cluster import KMeans # создадим пустой список для записи показателя WCSS (нашей ошибки) wcss = [] # воспользуемся новой для нас функцией range(), она возвращает последовательность чисел # в данном случае числа от 1 до 10 for i in range(1, 11): # настроим параметры модели (подробнее об этом расскажу чуть дальше) kmeans = KMeans(n_clusters = i, init = ‘k-means++’, max_iter = 300, n_init = 10, random_state = 42) # обучим модель на наших данных с разным количеством кластеров kmeans.fit(X) # для каждого кластера рассчитаем ошибку (атрибут inertia_) и поместим в список wcss.append(kmeans.inertia_) # зададим размер график plt.figure(figsize = (10,6)) # передадим функции plot() последовательность кластеров и ошибку WCSS plt.plot(range(1, 11), wcss) # и добавим подписи plt.title(‘Выбор количества кластеров методом локтя’) plt.xlabel(‘Количество кластеров’) plt.ylabel(‘WCSS’) |

Как видно на графике, когда мы перешли от трех до четырех кластеров, ошибка перестала существенно уменьшаться (это согласуется с тем, что видом действительно три).
Давайте создадим объект класса нашей модели, используя три кластера в качестве гипепараметра модели.
|
# заново обучим модель с тремя кластерами kmeans = KMeans(n_clusters = 3, init = ‘k-means++’, max_iter = 300, n_init = 10, random_state = 42) |
Подробнее рассмотрим параметры модели:
- n_clusters: это количество кластеров, на которые мы хотим разбить наши наблюдения
- init: определяет, как мы выберем первоначальное расположение (инициализацию) центроидов; есть два варианта, (1) выбрать центроиды случайно
init = ‘random’ или (2) выбрать их так, чтобы центроиды с самого начала располагались максимально далеко друг от друга
init = ‘k-means++’; второй вариант оптимальнее - n_init: сколько раз алгоритм будет инициализирован, т.е. сколько раз будут выбраны центроиды до начала оптимизации; на выходе будет выбран тот вариант, где ошибка была минимальна
- max_iter: максимальное количество итераций алгоритма после первоначального выбора центроидов
- random_state: воспроизводимость результата, с этим мы уже знакомы
Обучим модель и сделаем прогноз:
|
# обучение и прогноз в данном случае можно сделать одним методом .fit_predict() y_pred = kmeans.fit_predict(X) |
Этап 5.2. Оценка качества модели
Остается проверить качество модели и здесь возникает сложность. Ведь если при обучении с учителем у нас был критерий (целевая переменная), то здесь такого критерия нет.
Впрочем, так как у нас учебный датасет, и мы заранее знаем, к какому виду относится каждый цветок, то можем сравнить результат нашей модели с целевой переменной.
На настоящих данных такое конечно невозможно.
Вначале преобразуем нашу целелевую переменную (iris.target) и наш прогноз (y_pred) в датафрейм (предварительно слегка их изменив, подробности в ноутбуке⧉).
|
# поместим переменные в словарь d = {‘Target’ : iris.target, ‘Prediction’ : y_pred} # превратим словарь в датафрейм с соответствующими названиями столбцов df = pd.DataFrame(d, columns = [‘Target’, ‘Prediction’]) |

С помощью функции where() создадим массив Numpy, в котором сравним каждую строчку датафрейма, и если целевая переменная и прогноз совпадают, зададим значение True, в противном случае — False.
|
comparison = np.where(df[‘Target’] == df[‘Prediction’], True, False) print(type(comparison)) print(comparison[:5]) |
|
<class ‘numpy.ndarray’> [ True True True True True] |
Добавим этот массив в качестве столбца в датафрейм.
|
result[‘Comparison’] = comparison result.head() |

Выведем долю совпавших (True) и не совпавших (False) значений. Для этого используем функцию value_counts(), которая подсчитает, сколько раз встречается каждое значение. Параметр
normalize = True вернет относительное значение или процент. Ровно это нам и нужно.
|
df[‘Comparison’].value_counts(normalize = True).round(2) |
|
True 0.83 False 0.17 Name: Comparison, dtype: float64 |
Как мы видим, модель была права в 83% случаев. Теперь давайте визуально оценим результат.
В исходном датафрейме четыре признака, а значит четыре измерения, столько мы представить графически не можем. Давайте возьмем первый (sepal length) и второй (sepal width) столбец исходного датафрейма.
Вначале построим точечную диаграмму целевой переменной.
|
# зададим размер plt.figure(figsize = (10,6)) # возьмем первый и второй столбцы с помощью функции iloc() # параметр с задаст каждой точке определенный код (0, 1, 2), а # camp определит цвет каждой из точек plt.scatter(X.iloc[:,0], X.iloc[:,1], c = iris.target, cmap = ‘Paired’) |

Теперь посмотим на результат алгоритма кластеризации.
|
plt.figure(figsize = (10,6)) # снова построим точечную диаграмму, но коды точек возьмем из y_pred plt.scatter(X.iloc[:,0], X.iloc[:,1], c = y_pred, cmap=‘Paired’) # кроме того выведем центроиды с помощью атрибута cluster_centers_ # зададим размер s = 150, красный цвет c = ‘red’, тип маркера — треугольник, и подпись plt.scatter(kmeans.cluster_centers_[:,0], kmeans.cluster_centers_[:,1], s = 150, c = ‘red’, marker = ‘^’, label = ‘Centroids’) # укажем, где разместить легенду plt.legend(loc = ‘upper right’) |

Выводы. Как мы видим, алгоритм идеально справился с кластером 0 (светлоголубой), однако допустил ошибки при разделение кластеров 1 и 2 (желтый и коричневый цвета). Почему?
На самом деле все дело в самом алгоритме. Как мы сказали выше, алгоритм группирует данные вокруг центроидов, а это значит, что он хорошо работает с выпуклыми и далеко расположенными друг от друга кластерами. Как только данные «проникают друг в друга» и расположены слишком близко, алгоритм теряется.
Иллюстрация ниже примерно показывает, что сделал алгоритм с нашими исходными видами и почему он ошибочно группировал некоторые точки.

Подведем итог
При решении задач кластеризации мы берем данные, обязательно их масштабируем и выбираем количество кластеров (с помощью экспертной оценки или метода локтя). К сожалению, дать точную оценку качества кластеризации бывает очень сложно из-за отсутствия разметки.
Вопросы для закрепления
Почему кластеризация называется машинным обучением без учителя?
Посмотреть правильный ответ
Ответ: в таких задачах отсутствует целевая переменная, разметка. Алгоритм пытается структурировать данные, о которых мало что известно заранее.
Как выбирается гиперпараметр модели (количество кластеров)?
Посмотреть правильный ответ
Ответ: существует два способа: (1) экспертное мнение и (2) метод локтя
В чем заключаются основные ограничения модели k-средних?
Посмотреть правильный ответ
Ответ: модель (1) очень чувствительна к масштабу признаков, и кроме того алгоритм предполагает (2) выпуклость и (3) разделенность данных
Дополнительные упражнения⧉ вы найдете в конце ноутбука.
Мы закончили третий раздел классических алгоритмов машинного обучения. Пора переходить к более продвинутым задачам. Начнем с рекомендательных систем.
Ответы на вопросы
Вопрос. Скажите, а чем init = ‘k-means++’ лучше, чем init = ‘random’?
Ответ. Давайте разбираться. В первую очередь, посмотрим на случайную инициализацию центроидов (
init = ‘random’). Как следует из самой формулировки, мы случайным образом выбираем центры кластеров, и затем алгоритм, как описано в лекции, старается минимизировать функцию потерь (WCSS в данном случае).
У такого подхода есть один недостаток. Если центры кластеров выбираются слишком близко друг к другу, то алгоритм может «разделить» то, что должно быть единым кластером, и «объединить» два разных. Пример ошибочной кластеризации на рисунке ниже.

Как мы видим, алгоритм действительно минимизировал WCSS, однако лишь в пределах того, что ему позволил изначальный выбор положения центроидов. Это так называемый локальный минимум функции потерь. Глобальный же найден не был. Схематически глобальный минимум мог бы выглядеться как на графике ниже.

В данном случае глобальный оптимум был бы достигнут за счет максимизации изначального расстояния между центроидами. На этом и основан метод k-means++ (
init = ‘k-means++’).
Сам по себе алгоритм k-means++ очень прост:
- Первый центроид выбирается случайно.
- Далее рассчитывается Евклидово расстояние между этим центроидом и всеми остальными точками датасета. Наиболее удаленная точка станет следующим центроидом.
- Каждая точка относится к ближайшему выбранному центроиду.
- Точка, наиболее удаленная от «своего» центроида, становится следующим центром кластера.
- Повторяем шаги 3 и 4 до тех пор, пока не выявим k центроидов.