1 Кластерный анализ Автоматическая классификация — основа искусственного интеллекта. Разбиение звездного неба на созвездия — один из примеров, того что нынче называется кластерным анализом. Типичная задача кластерного анализа формулируется так: нам дано множество данных, которые можно интерпретировать как точки многомерного пространства и нам нужно разбить это множество точек на относительно небольшое множество непересекающихся классов, называемых кластерами. Обычно решение этой задачи начинается с выбора меры близости между различными точками пространства. Выбор меры близости зависит от специфики данных и мы не будем касаться этого вопроса сегодня. Мы предположим, что этот выбор уже сделан и для каждой пары точек данного множества определено положительное число, выражающее меру близости этой пары. Например, в качестве меры близости точек плоскости можно рассматривать расстояние между ними. Предполагается, что чем более близки точки (т. е. чем меньшим числом выражается мера близости между ними) тем с большим основанием их следует относить к одному кластеру. В таком случае весьма естественным выглядит следующий подход: выбираем некоторое число ε — порог классификации и считаем, что любая пара точек, расстояние между которыми не превосходит ε принадлежат одному и тому же кластеру. Тогда две точки x и y принадлежат одному и тому же кластеру в том и только случае, когда имеется последовательность точек x0 , . . . , xk начинающаяся с x0 = x, кончающаяся в xk = y и такая, что |xi − xi+1 | ≤ ε для любого i. Такую последовательность точек мы будем называть ε-цепочкой. Выбор порога классификации — дело тонкое. Иногда нам заранее известно, какое число кластеров должно получиться. В этом случае порог можно выбрать таким образом, чтобы получилось именно известное заранее количество кластеров. Оказывается, что и классификацию с данным порогом и классификацию с заданным количеством кластеров можно проводить весьма эффективными алгоритмами за время O(n2 ), где n — число точек классификации. Цепное расстояние Пусть для любой пары точек x, y некоторого множества M определено неотрицательное число, обозначаемое |x − y| и называемое мерой близости этой пары. Мы предполагаем от меры близости выполнение следующих двух условий: рефлексивность |x − x| = 0 для любого x ∈ M симметричность |x − y| = |y − x| для любых x, y ∈ M Для последовательности точек x0 , . . . xk ∈ M определим шаг как максимум |xi−1 , xi |, i = 1, . . . k. Последовательность точек x0 , . . . xk , начинающуюся с некоторой точки x = x0 , и заканчивающуюся в точке y = xk , мы будем называть цепочкой, соединяющей x и y. Определим цепное расстояние между парой точек x, y ∈ M как минимально возможной шаг цепочки, их соединяющей, и обозначим его |x − y|. Тогда цепное расстояние удовлетворяет в дополнение к условиям рефлексивности и симметричности следующему неравенству |x − z| ≤ max{|x − y| , |y − z|} для любых x, y, z ∈ M 1 (1.1) Если цепные расстояния нам известны, то классификацию с данным порогом можно провести за время O(n2 ). Мы по очереди просматриваем все точки множества и объявляем некоторые из них порождающими кластеры, а другие распределяем по образованным кластерам. При рассмотрении новой точки мы проверяем ее цепные расстояния до ранее рассмотренных точек порождающих кластеры и если обнаруживаем, что расстояние до одной из них меньше порога, то присоединяем ее к кластеру этой точки, в противном случае объявляем эту точку образующей нового кластера. Одномерный случай. В случае, когда множество M представляет собой подмножество точек числовой прямой, а мера близости представляет собой модуль разности, цепные расстояния находятся очень быстро — в линейное время O(n). Теория этих вычислений основана на следующей лемме, доказательство которой оставляется слушателям. Лемма 1.1. Если между точками x, y имеется интервал длины d свободный от точек множества M , то цепное расстояние между x и y не меньше чем d. Множество M будем считать занумерованным по возрастанию, так что xj > xi при j > i. Если оно не было упорядоченным, то упорядочим его. Сортировка выполняется, как нам известно, за время O(n log n). Лемма 1.2. Если {xi } возрастающая последовательность точек прямой, то цепное расстояние между xi и xj (j > i) равняется max{(xk+1 − xk ) | k = i, . . . j − 1} Доказательство. Так как цепочка xi , xi+1 , . . . , xj имеет шаг max{(xk+1 − xk ) | k = i, . . . j − 1}, то цепное расстояние между xi и xj не превосходит этой величины. С другой стороны это расстояние не может быть меньше чем любое из |xk − xk+1 |, k = i, . . . j − 1 в силу леммы 1.1. Алгоритм цепной развертки Итак, мы умеем быстро определять цепные расстояния между точками числового множества. Общий случай сводится к этому частному случаю с помощью следующего построения. Отображение множеств с заданными мерами близости будем называть цепной изометрией, если цепные расстояния между образами точек совпадают с цепными расстояниями между самими точками. Теорема 1.1. Пусть M некоторое множество из n точек с заданной мерой близости. Тогда за время O(n2 ) можно построить цепную изометрию этого множества на подмножество числовой прямой. Доказательство. Искомую цепную изометрию f мы будем определять в цикле длины n. При этом будет определяться растущая цепочка подмножеств M1 , . . . , Mk , . . . Mn = M , такая что Mk содержит ровно k точек подмножества M . И отображение f будет последовательно доопределяться на множествах Mk . В качестве M1 можно взять произвольное одноточечное подмножество и определить f (M1 ) = 0. Предположим, что отображение f уже определено на подмножестве Mk содержащем k точек. Определим точку x ∈ M \ Mk ближайшую к Mk . Положим Mk+1 = Mk ∪ {x} и положим f (x) = 2 maxf (Mk ) + min{|x − y| | y ∈ Mk }. Оценим сложность алгоритма. В цикле длины n выполняется операция нахождения ближайшей пары точек из Mk и M \ Mk . Так как всего пар имеется |Mk | × |M \ Mk |, то перебор всех их занимает не более O(n2 ) времени, но и не менее. Ведь в случае, когда Mk содержит половину элементов M , количество пар будет n2 /4. Итак, на первый взгляд сложность алгоритма составляет O(n3 ). Но если запоминать предыдущие результаты вычислений, то сложность можно понизить до O(n2 ). Мы заведем массив текущих расстояний Di от i-ой точки множества M до множества Mk . Для k = 1 этот массив строится в линейное время Di := |xi −x1 |. Модифицируется он также в линейное время Di := min{Di , |xi − xk+1 |}. И при наличии такого массива поиск ближайшей точки до Mk проводится в линейное время. Задачи. 1. Докажите, что построенное при доказательстве теоремы отображение f действительно является цепной изометрией. 3