vault backup: 2026-05-07 15:57:15
This commit is contained in:
@@ -1,16 +1,20 @@
|
||||
---
|
||||
status: seed
|
||||
status: processing
|
||||
type: concept
|
||||
tags:
|
||||
- ml
|
||||
- machine-learning
|
||||
- metric-methods
|
||||
- knn
|
||||
- classification
|
||||
- regression
|
||||
created: 2026-02-26
|
||||
updated: 2026-04-21
|
||||
title: Метрические Алгоритмы
|
||||
updated: 2026-05-07
|
||||
title: Метрические алгоритмы
|
||||
---
|
||||
|
||||
# Метрические Алгоритмы
|
||||
# Метрические алгоритмы
|
||||
|
||||
## Краткая Справка О Библиотеке Scikit-learn
|
||||
## Краткая справка о библиотеке Scikit-learn
|
||||
|
||||
> [**Scikit-learn**](https://scikit-learn.org/stable/index.html) - это библиотека машинного обучения с открытым исходным кодом для языка программирования Python. Она предоставляет простые и эффективные инструменты для предобработки данных, машинного обучения и анализа данных.
|
||||
|
||||
@@ -22,7 +26,7 @@ title: Метрические Алгоритмы
|
||||
* В библиотеку также включены функции для предобработки данных, необходимой перед подачей данных в модель
|
||||
* Scikit-learn в основном направлен на работу именно с классическим ML, хотя в ней поддерживается и создание простейших нейронных сетей. Однако использование ее для задач глубокого обучения не рекомендуется, для этого есть специализированные инструменты (Tensorflow и PyTorch)
|
||||
|
||||
## Идея Метрических Алгоритмов
|
||||
## Идея метрических алгоритмов
|
||||
|
||||
Идею метрических алгоритмов можно сравнить с простой философской идеей "мы - это наше окружение" или "скажи мне, кто твой друг, и я скажу, кто ты".
|
||||
|
||||
@@ -40,7 +44,7 @@ title: Метрические Алгоритмы
|
||||
|
||||
Особенность метрических алгоритмов заключается в том, что они не строят явную модель на основе данных, а основываются на хранении и использовании обучающих примеров для принятия решений. Как такого обучения в алгоритмах не предполагается. Такой подход еще часто называется **"ленивым обучением" (lazy learning)**.
|
||||
|
||||
## Расстояние Между Объектами
|
||||
## Расстояние между объектами
|
||||
|
||||
Ключевая идея методов - использование близости между объектами для принятия решения. Как выразить близость в численном эквиваленте?
|
||||
|
||||
@@ -99,7 +103,7 @@ pairwise_distances(x, y, metric='cosine')
|
||||
|
||||
Качество модели сильно зависит от выбора метрики. Поэтому способ измерения расстояния может использоваться в качестве внешнего параметра алгоритма (гиперпараметра), управляя которым, исследователь может модифицировать работу алгоритма и улучшать качество получаемого решения.
|
||||
|
||||
## Алгоритм kNN Для Классификации
|
||||
## Алгоритм kNN для классификации
|
||||
|
||||
В данном уроке мы будем рассматривать самого популярного представителя метрических алгоритмов - метод k-ближайших соседей (k-nearest neighbors, kNN).
|
||||
|
||||
@@ -464,7 +468,7 @@ print('Accuracy: {:.2f}'.format(accuracy_score(y, y_pred)))
|
||||
|
||||
Метрические алгоритмы являются **чувствительным к масштабу признаков**.
|
||||
|
||||
Это означает, что если один признак имеет значительно больший масштаб, чем другой, то он будет доминировать в вычислении расстояния между объектами, и алгоритм будет искать соседей только на основе доминирующего признака, не общая внимания на вклад других, что приведет к некорректной классификации.
|
||||
Это означает, что если один признак имеет значительно больший масштаб, чем другой, то он будет доминировать в вычислении расстояния между объектами, и алгоритм будет искать соседей только на основе доминирующего признака, не обращая внимания на вклад других, что приведет к некорректной классификации.
|
||||
|
||||
Рассмотрим простой пример. Пусть есть датасет из 5-ти наблюдений:
|
||||
|
||||
@@ -600,7 +604,7 @@ $$\rho(x_1, x_5) = \sqrt{(0 - 0.55)^2 + (0 - 0)^2} = \sqrt{0.3}$$
|
||||
|
||||
Теперь картина получается максимально противоположная: объект $x_4$ оказывается самым удаленным объектом от $x_1$, а ближайшими к $x_1$ оказываются объекты $x_3$ и $x_5$, как и должно быть.
|
||||
|
||||
**Важный вывод:** для корректного рассчета расстояния между объекта и, как следствие, корректной работы kNN все признаки в датасете должны быть приведены к единому масштабу.
|
||||
**Важный вывод:** для корректного расчёта расстояния между объектами и, как следствие, корректной работы kNN все признаки в датасете должны быть приведены к единому масштабу.
|
||||
|
||||
В scikit-learn методы масштабирования реализованы в модуле `preprocessing` виде следующих классов:
|
||||
|
||||
@@ -612,7 +616,7 @@ $$\rho(x_1, x_5) = \sqrt{(0 - 0.55)^2 + (0 - 0)^2} = \sqrt{0.3}$$
|
||||
from sklearn.preprocessing import MinMaxScaler, StandardScaler, RobustScaler
|
||||
```
|
||||
|
||||
* С помощью метода `fit()` происходит рассчет параметров масштабирования.
|
||||
* С помощью метода `fit()` происходит расчёт параметров масштабирования.
|
||||
|
||||
* С помощью метода `transform()` выполняется трансформация (масштабирование) данных.
|
||||
|
||||
@@ -1508,7 +1512,7 @@ $$\omega_i = \frac{1}{\rho}$$
|
||||
|
||||
Указать способ инициализации весов можно с помощью параметра `weights`.
|
||||
|
||||
* По умолчанию значение параметра выставлено как 'uniform', что сооветствует равномерному распределению весов соседей, то есть все соседи имеют одинаковый и прогноз алгоритма выполняется путем мажоритарного голосования (в случае классификации) или усреднения таргета (для регрессии)
|
||||
* По умолчанию значение параметра выставлено как `'uniform'`, что соответствует равномерному распределению весов соседей: все соседи имеют одинаковый вес, и прогноз алгоритма выполняется путём мажоритарного голосования (в случае классификации) или усреднения таргета (для регрессии).
|
||||
|
||||
* Если выставить значение данного параметра как 'distance', то веса распределяются обратно пропорционально расстоянию (по формуле $\omega_i = \frac{1}{\rho}$)
|
||||
|
||||
@@ -1578,7 +1582,7 @@ $$K(\rho) = \frac{1}{\sqrt{2\pi}}e^{-\frac{\rho^2}{2}}$$
|
||||
|
||||
|
||||
|
||||
Тогда с учетом ядерной функции, используемой для вычисления весов конечный вид формулы рассчета предсказания по найденным $k$ соседям будет иметь вид:
|
||||
Тогда с учётом ядерной функции, используемой для вычисления весов, конечный вид формулы расчёта предсказания по найденным $k$ соседям будет иметь вид:
|
||||
|
||||
* **Для классификации:**
|
||||
$$\hat{y}(x_t) = \arg \max_{y \in Y} \sum_{i=1}^{k} K(\frac{\rho_i}{h}) \mathbb{I}[y_i = y]$$
|
||||
@@ -1597,13 +1601,13 @@ $$\hat{y_t}(x_t) = \frac{1}{\sum_{i=1}^k K\frac{\rho_i}{h}} \sum_{i=1}^k K(\frac
|
||||
|
||||
От выбора ядра зависит гладкость аппроксимации, но на её качество этот выбор почти не влияет.
|
||||
|
||||
На практике чаще всего используют либо единообразное (uniform) для простоты, либо гауссовское (gaussian), в случае когда важна гладкость модели (а она важна в случаерегрессии).
|
||||
На практике чаще всего используют либо единообразное ядро (*uniform*) для простоты, либо гауссовское (*gaussian*), когда важна гладкость модели, например в случае регрессии.
|
||||
|
||||
|
||||
|
||||
Ширина окна же $h$ существенно влияет на качество модели и может быть использована в качестве гиперпараметра алгоритма и ее можно подбирать, также как и количество соседей.
|
||||
|
||||
При слишком маленькой ширине модель сильно подстраивается под обучающую выборку,теряет свою обобщающую способность и рисует переобучиться. При слишком большой ширине, наблюдается обратная ситуация - модель рискует недообучиться. Универсальной ширины окна не существует, поэтому для каждой задачи её приходится подбирать отдельно.
|
||||
При слишком маленькой ширине модель сильно подстраивается под обучающую выборку, теряет свою обобщающую способность и рискует переобучиться. При слишком большой ширине наблюдается обратная ситуация - модель рискует недообучиться. Универсальной ширины окна не существует, поэтому для каждой задачи её приходится подбирать отдельно.
|
||||
|
||||
|
||||
На рисунке ниже приведены [примеры](https://education.yandex.ru/handbook/ml/article/metricheskiye-metody) того как ядерная функция и ширина окна влияют на результаты регрессии:
|
||||
@@ -1622,7 +1626,7 @@ $$\hat{y_t}(x_t) = \frac{1}{\sum_{i=1}^k K\frac{\rho_i}{h}} \sum_{i=1}^k K(\frac
|
||||
|
||||
|
||||
|
||||
Например, гаусовское ядро с шириной окна $h$ можно задать следующий образом:
|
||||
Например, гауссовское ядро с шириной окна $h$ можно задать следующим образом:
|
||||
|
||||
```python
|
||||
import numpy as np
|
||||
@@ -1644,7 +1648,7 @@ knn_reg = KNeighborsRegressor(n_neighbors=5, weights=gaussian_kernel)
|
||||
|
||||
Вторая модификация классического алгоритма kNN связана с необходимостью оптимизации поиска соседей.
|
||||
|
||||
В классическом алгоритме предлагается предполагается, что для того, чтобы найти ближайших соседей для объекта $x_t$ нам нужно вычислить расстояние между этим объектом и всеми объектами из обучающей выборки $(x_i)_{i=1}^n$.
|
||||
В классическом алгоритме предполагается, что для того, чтобы найти ближайших соседей для объекта $x_t$, нужно вычислить расстояние между этим объектом и всеми объектами из обучающей выборки $(x_i)_{i=1}^n$.
|
||||
|
||||
То есть нам нужно перебрать $n$ объектов. Такой "топорный" перебор называется методом грубой силы (brute force).
|
||||
|
||||
@@ -1682,6 +1686,8 @@ knn_reg = KNeighborsRegressor(n_neighbors=5, weights=gaussian_kernel)
|
||||
* [Статья с примерами применения K-d- и Ball- деревьев](https://www.geeksforgeeks.org/ball-tree-and-kd-tree-algorithms/)
|
||||
|
||||
## Связанные заметки
|
||||
- [[Линейные модели]] — контраст с параметрическими моделями: kNN хранит обучающие примеры и не строит явную линейную функцию
|
||||
- [[Нейронные сети]] — другой класс моделей ML; в отличие от kNN, нейросети обучают веса и строят параметрическое отображение $Y=F(X)$
|
||||
- [[Расстояние между объектами]] — формулы метрик (Евклид, Манхэттен, Минковский, Махаланобис) идентичны тем, что реализованы в sklearn; Math-нота даёт строгие определения
|
||||
- [[Итерационная классификация. Метод K-средних (K-means)]] — K-means тоже классифицирует по минимальному расстоянию $\min \rho_{il}$; unsupervised-аналог kNN
|
||||
- [[Наивный Байесовский алгоритм]] — альтернативный метод классификации с учителем из той же обучающей выборки
|
||||
|
||||
Reference in New Issue
Block a user