Структурирование пространства признаков

## Идея

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

### Важное замечание

Везде далее предполагается, что функция расстояния удовлетворяет неравенству треугольника.

## KD-trees

**K-D[imensional] trees** — один из способов этого добиться.

### Построение

Мы разбиваем пространство на

D

{\displaystyle D}

-мерные прямоугольники при построении дерева. На каждом шаге мы ищем признак с наибольшим разбросом или стандартным отклонением и ассоциируем с узлом предикат

x

c
u
r
r
e
n
t

<
m
e
d
(

x

c
u
r
r
e
n
t

)

{\displaystyle x^{current}<med(x^{current})}

. По этому предикату часть объектов отправляется в левого сына, а часть — в правого. В сыновьях процедура рекурсивно повторяется. То, что разбиение производится по медиане, важно, так как это позволяет поддерживать сбалансированность дерева. Когда в узле становится меньше объектов, чем

n

m
i
n

{\displaystyle n\_{min}}

 (количество объектов в листе

n

m
i
n

{\displaystyle n\_{min}}

 — это параметр алгоритма, который известен заранее), дальнейшее разбиение этого узла прекращается. Естественно, если процесс выродился (например, все объекты абсолютно одинаковы), процесс прекращается.

В лучшем случае глубина дерева получается

O
(

log

2

⁡
N
)

{\displaystyle O(\log \_{2}N)}

, в худшем случае

O
(
N
)

{\displaystyle O(N)}

(ХОТЕЛОСЬ БЫ ПРИМЕР).

### Поиск соседей

При поиске ближайших соседей для

X

{\displaystyle X}

 мы ищем (спускаясь по дереву от корня) лист, в который попадает наш объект (по предикатам), находим ближайший объект/объекты

X

N
N

{\displaystyle X\_{NN}}

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

ρ
(
X
,

X

N
N

)

{\displaystyle \rho (X,X\_{NN})}

 или у нас не хватает объектов до искомого количества

K

{\displaystyle K}

, то мы должны проверить тот узел. Иначе мы понимаем, что там нет ничего интересного.

что такое соседние узлы при подъеме вверх? Не очень понятен обход при поиске ближайших соседей

Проверка происходит рекурсивно.

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

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

### Расстояние от точки до прямоугольника

Расстояние от точки

X
∈

R

D

{\displaystyle X\in \mathbb {R} ^{D}}

 до прямоугольника

{

(

h

1

,
…
,

h

D

)

:

h

i

m
i
n

≤

h

i

≤

h

i

m
a
x

}

{\displaystyle \left\{\left(h^{1},\dots ,h^{D}\right):h^{i~min}\leq h\_{i}\leq h^{i~max}\right\}}

 получается по формуле

ρ
(
X
,
Z
)

{\displaystyle \rho (X,Z)}

, где

Z

{\displaystyle Z}

 получается покоординатно по формуле:

Z

d

=

{

h

i

m
i
n

,

x

d

<

h

i

m
i
n

x

d

,

h

i

m
i
n

≤

x

d

≤

h

i

m
a
x

h

i

m
a
x

,

x

d

>

h

i

m
a
x

{\displaystyle Z^{d}={\begin{cases}h^{i~min},&x^{d}<h^{i~min}\\x^{d},&h^{i~min}\leq x^{d}\leq h^{i~max}\\h^{i~max},&x^{d}>h^{i~max}\\\end{cases}}}

## Ball trees

Это последовательности вложенных (в смысле вложенности множеств объектов, а не геометрическом) последовательностей шаров.

Каждый объект из шара-родителя ассоциируется с каким-либо вложенным шаром.

Каждый шар задаётся центром

c

{\displaystyle c}

,
множеством своих объектов

# Ω
{

z

1

,
…
,

z

s

}

{\displaystyle \Omega =\{z\_{1},\dots ,z\_{s}\}}

 и радиусом

# R

max
i

ρ
(

z

i

,
c
)

{\displaystyle R={\underset {i}{\max }}\rho (z\_{i},c)}

.

### Построение

Построение производится рекурсивно.

Пусть на данном шаге мы находимся в шаре

B
a
l
l
(
c
,
Ω
)

{\displaystyle Ball(c,\Omega )}

. Тогда мы строим два вложенных шара следующим образом:

* Выбираем

c

1

=

a
r
g
m
a
x

z

i

∈
Ω

ρ
(

z

i

,
c
)

{\displaystyle c\_{1}={\underset {z\_{i}\in \Omega }{argmax}}\rho (z\_{i},c)}
* Выбираем

c

2

=

a
r
g
m
a
x

z

i

∈
Ω

ρ
(

z

i

,

c

1

)

{\displaystyle c\_{2}={\underset {z\_{i}\in \Omega }{argmax}}\rho (z\_{i},c\_{1})}
* Разделяем множество

Ω

{\displaystyle \Omega}

 на две группы:
	+ Ω

	1

	=

	{

	z

	i

	:
	ρ
	(

	z

	i

	,

	c

	1

	)
	<
	ρ
	(

	z

	i

	,

	c

	2

	)

	}

	{\displaystyle \Omega \_{1}=\left\{z\_{i}:\rho (z\_{i},c\_{1})<\rho (z\_{i},c\_{2})\right\}}
	+ Ω

	2

	=

	{

	z

	i

	:
	ρ
	(

	z

	i

	,

	c

	2

	)
	≤
	ρ
	(

	z

	i

	,

	c

	1

	)

	}

	{\displaystyle \Omega \_{2}=\left\{z\_{i}:\rho (z\_{i},c\_{2})\leq \rho (z\_{i},c\_{1})\right\}}
* Так мы и получили два шара:

B
a
l
l
(

c

1

,

Ω

1

)
,
B
a
l
l
(

c

2

,

Ω

2

)

{\displaystyle Ball(c\_{1},\Omega \_{1}),Ball(c\_{2},\Omega \_{2})}

.

### Поиск соседей

Поиск соседей производится полностью аналогично случаю kd-деревьев. В виде предикатов выступает факт попадания в тот или иной шар рассматримваемого объекта

X

{\displaystyle X}

.

### Расстояние от точки до шара

Вспомним неравенство треугольника:

ρ
(
x
,
c
)
≤
ρ
(
x
,
z
)
ρ
(
z
,
c
)

∀
x
,
c
,
z
∈

R

D

{\displaystyle \rho (x,c)\leq \rho (x,z)+\rho (z,c)~~~\forall x,c,z\in \mathbb {R} ^{D}}

Из этого следует, что

ρ
(
x
,
z
)
≥
ρ
(
x
,
c
)
−
ρ
(
z
,
c
)
≥
ρ
(
x
,
c
)
−
R
,
∀
z
∈
Ω

{\displaystyle \rho (x,z)\geq \rho (x,c)-\rho (z,c)\geq \rho (x,c)-R,\forall z\in \Omega }

 (по определению радиуса шара). Таким образом, в качестве расстояния до шара мы берём

ρ
(
x
,
c
)
−
R

{\displaystyle \rho (x,c)-R}

.

    Добавить про кластеризацию и LSH (это есть в слайдах Китова про оптимизацию kNN). Что-то ещё было у Соколова, потом посмотрю.