Метод ближайших соседей (kNN)

**Метод ближайших соседей (kNN - k Nearest Neighbours)** - метод решения задач классификации и задач регрессии, основанный на поиске ближайших объектов с известными значения целевой переменной.

## Идея

Метод основан на предположении о том, что близким объектам в признаковом пространстве соответствуют похожие метки.

Для нового объекта

x

{\displaystyle x}

 метод предполагает найти ближайшие к нему объекты

x
1

,

x
2

,
.
.
.

x
K

{\displaystyle x\_1, x\_2, ... x\_K }

 и построить прогноз по их меткам.

## Формальное описание

### Классификация

y
^

=

a
r
g

max
y

∑

# k
1

K

I

(

y
k

==
y
)

{\displaystyle \hat{y} = \mathrm{arg}\max\_y \sum\_{k = 1}^{K} {\Iota (y\_k == y)}}

.

#### Классификация в пограничном случае

Когда несколько классов имеют одинаковый ранг, можно сопоставить класс:

* случайным образом
* имеющий большую априорную вероятность
* чей ближайший представитель ближе к

x

{\displaystyle x}
* для которого среднее значение представителей этого класса среди ближайших соседей ближе
* чей самый дальний представитель среди ближайших соседей ближе (т.е. класс представлен более компактно)

### Регрессия

y
^

=

∑

# k
1

K

y
k

K

{\displaystyle \hat{y} = \frac{\sum\_{k = 1}^{K} {y\_k}}{K}}

.

## Параметры

* K

{\displaystyle K}

 - подбирается по кросс-валидации
* метрика - выбирается исходя из выбранного признакового пространства

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

## Сложность

*Сложность обучения* -

O
(
1
)

{\displaystyle O(1)}

. Технически правильным ответом также является

O
(
n
)

{\displaystyle O(n)}

, так как требуется запоминать обучающую выборку.

*Сложность прогнозирования* -

O
(
n
)

{\displaystyle O(n)}

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

k

{\displaystyle k}

 объектов, сложность

O
(
k
n
)

{\displaystyle O(kn)}

.

## Особенности

* + простой, лёгкий и интерпретируемый
* + не требуется предобучения
* + онлайновый
* - высокая сложность одного прогноза
* - проклятие размерности

## Взвешенный учёт объектов

Пусть тренировочная выборка задается объектами

x
1

,

x
2

,
…

x
n

{\displaystyle x\_1, x\_2, \ldots x\_n}

Упорядочим их относительно рассматриваемого объекта х

ρ
(
x
,

x

i
1

)
<=
ρ
(
x
,

x

i
2

)
<=
…
<=
ρ
(
x
,

x

i
n

)

{\displaystyle \rho(x, x\_{i\_1}) <= \rho(x, x\_{i\_2}) <= \ldots <= \rho(x, x\_{i\_n}) }

.

Обозначим

z
1

=

x

i
1

,

z
2

=

x

i
2

,
…

z
K

=

x

i
K

{\displaystyle z\_1 = x\_{i\_1}, z\_2 = x\_{i\_2}, \ldots z\_K = x\_{i\_K} }

.

Обычный алгоритм

K
n
n

{\displaystyle Knn }

 можно записать с помощью C-дискриминантных функций:

g
c

(
x

# k
1

K

I
⁡
[

z
k

∈

w
c

]
,
# c
1
,
2
,
…
C

{\displaystyle g\_c(x) = \sum\_{k=1}^{K}\operatorname{I}[z\_k \in w\_c], c = 1, 2, \ldots C}

,

где

w
c

=
{

x
i

:

y
i

=
c
}

{\displaystyle w\_c = \{x\_i: y\_i = c\} }

.

Тогда алгоритм для классификации записывается как

y
^

=

a
r
g

max

# c
1
,
2
,
…
C

g
c

(
x
)

{\displaystyle \hat{y} = \mathrm{arg}\max\_{c = 1, 2, \ldots C} g\_c(x) }

Тогда мы можем записать

K
n
n

{\displaystyle Knn }

 со взвешенным учетом объектов через С-дискриминантную функцию. Для случая с весами она принимает вид:

g
c

(
x

# k
1

K

I
⁡
[

z
k

∈

w
c

]
w
(
k
,
ρ
(
x
,

z
k

)
)

{\displaystyle g\_c(x) = \sum\_{k=1}^{K}\operatorname{I}[z\_k \in w\_c]w(k, \rho(x, z\_k)) }

.

Для классификации вид алгоритма не изменится. Для регрессии же вид будет следующим:

y
^

=

∑

# k
1

K

y
i

⋅
w
(
k
,
ρ
(
x
,

z
k

)

∑

# k
1

K

w
(
k
,
ρ
(
x
,

z
k

)

{\displaystyle \hat{y} = \frac{\sum\_{k = 1}^{K} {y\_i\cdot w(k, \rho(x, z\_k)}}{\sum\_{k = 1}^{K}w(k, \rho(x, z\_k)}}

.

Где

w
(
k
,
ρ
)

{\displaystyle w(k, \rho) }

 - вес(степень важности)

k

{\displaystyle k}

-го соседа относительно

x

{\displaystyle x}

, не возрастает по

k

{\displaystyle k}

, положителен.

### **Примеры весов**

Веса, зависящие от индекса:

w
k

=

α
k

,
α
∈
(
0
,
1
)

{\displaystyle w\_k = \alpha^k, \alpha \in (0,1)}

,

w
k

=

K
1
−
k

K

{\displaystyle w\_k = \frac{K + 1 - k}{K}}

.

Веса, зависящие от расстояния:

w
k

=

{

ρ
(

z
K

,
x
)
−
ρ
(

z
k

,
x
)

ρ
(

z
K

,
x
)
−
ρ
(

z
1

,
x
)

,

ρ
(

z
K

,
x
)
≠
ρ
(

z
1

,
x
)

1
,

ρ
(

z
K

,
x
# )
ρ
(

z
1

,
x
)

{\displaystyle w\_k = \begin{cases}
\frac{\rho(z\_K, x) - \rho(z\_k, x)}{\rho(z\_K,x) - \rho(z\_1, x)}, & \rho(z\_K, x) \neq \rho(z\_1, x) \\
1, & \rho(z\_K, x) = \rho(z\_1, x)
\end{cases}
}

,

w
k

=

1

ρ
(
x
,

z
k

)

{\displaystyle w\_k =\frac{1}{\rho(x, z\_k)}
}

.

## Оптимизации

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

Методы фильтрации обучающей выборки

## Ссылки

Китов, слайды

И еще слайды Китова

Немного Соколова