vault backup: 2026-05-07 15:57:15

This commit is contained in:
Dmitry
2026-05-07 15:57:15 +03:00
parent 8ab1121ffc
commit fed94882bb
4 changed files with 29 additions and 21 deletions
@@ -1906,7 +1906,7 @@ $$\{(x_i, y_i)\}_{i=1}^n = \{(x_1, y_1), (x_2, y_2), ..., (x_n, y_n)\}$$
* $n$ - размер выборки * $n$ - размер выборки
* $k$ - количество классов * $k$ - количество классов
Необходимо построить модель, восстанавливающую зависить $y$ от $x$: $$y=f(x)$$ Необходимо построить модель, восстанавливающую зависимость $y$ от $x$: $$y=f(x)$$
Для упрощения задачи мы с вами сначала рассмотрим задачу бинарной классификации, а затем обобщим результат на мультиклассовую. Для упрощения задачи мы с вами сначала рассмотрим задачу бинарной классификации, а затем обобщим результат на мультиклассовую.
@@ -1987,7 +1987,7 @@ $$\beta = (\beta_0, \beta_1, \beta_2, ..., \beta_m)^T$$
Гипотетически, ничего не мешаем нам воспользоваться линейной регрессии для случая классификации. Гипотетически, ничего не мешаем нам воспользоваться линейной регрессии для случая классификации.
Если целевая переменная перекодирована в числа, например $Y = \{0, 1\}$, то ничто нам не мешает построить регрессию и восставить зависить между $x$ и $y$. Если целевая переменная перекодирована в числа, например $Y = \{0, 1\}$, то ничто нам не мешает построить регрессию и восстановить зависимость между $x$ и $y$.
Мы будем оптимизировать все тот же метод наименьших квадратов, оптимизируя квадратичную функцию потерь: Мы будем оптимизировать все тот же метод наименьших квадратов, оптимизируя квадратичную функцию потерь:
@@ -2290,7 +2290,7 @@ $$L(\beta) = - \frac{1}{n} \sum_{i=1}^n log(1 + e^{-y_i \cdot x_i \cdot \beta})$
**Пример** **Пример**
Рассмотрим пример рассчета функции log loss. Рассмотрим пример расчёта функции log loss.
Пусть у нас есть выборка из четырёх объектов (опухолей) с двумя признаками: $x_{1}$ и $x_{2}$. Пусть у нас есть выборка из четырёх объектов (опухолей) с двумя признаками: $x_{1}$ и $x_{2}$.
@@ -1,16 +1,20 @@
--- ---
status: seed status: processing
type: concept type: concept
tags: tags:
- ml - machine-learning
- metric-methods
- knn
- classification
- regression
created: 2026-02-26 created: 2026-02-26
updated: 2026-04-21 updated: 2026-05-07
title: Метрические Алгоритмы title: Метрические алгоритмы
--- ---
# Метрические Алгоритмы # Метрические алгоритмы
## Краткая Справка О Библиотеке Scikit-learn ## Краткая справка о библиотеке Scikit-learn
> [**Scikit-learn**](https://scikit-learn.org/stable/index.html) - это библиотека машинного обучения с открытым исходным кодом для языка программирования Python. Она предоставляет простые и эффективные инструменты для предобработки данных, машинного обучения и анализа данных. > [**Scikit-learn**](https://scikit-learn.org/stable/index.html) - это библиотека машинного обучения с открытым исходным кодом для языка программирования Python. Она предоставляет простые и эффективные инструменты для предобработки данных, машинного обучения и анализа данных.
@@ -22,7 +26,7 @@ title: Метрические Алгоритмы
* В библиотеку также включены функции для предобработки данных, необходимой перед подачей данных в модель * В библиотеку также включены функции для предобработки данных, необходимой перед подачей данных в модель
* Scikit-learn в основном направлен на работу именно с классическим ML, хотя в ней поддерживается и создание простейших нейронных сетей. Однако использование ее для задач глубокого обучения не рекомендуется, для этого есть специализированные инструменты (Tensorflow и PyTorch) * Scikit-learn в основном направлен на работу именно с классическим ML, хотя в ней поддерживается и создание простейших нейронных сетей. Однако использование ее для задач глубокого обучения не рекомендуется, для этого есть специализированные инструменты (Tensorflow и PyTorch)
## Идея Метрических Алгоритмов ## Идея метрических алгоритмов
Идею метрических алгоритмов можно сравнить с простой философской идеей "мы - это наше окружение" или "скажи мне, кто твой друг, и я скажу, кто ты". Идею метрических алгоритмов можно сравнить с простой философской идеей "мы - это наше окружение" или "скажи мне, кто твой друг, и я скажу, кто ты".
@@ -40,7 +44,7 @@ title: Метрические Алгоритмы
Особенность метрических алгоритмов заключается в том, что они не строят явную модель на основе данных, а основываются на хранении и использовании обучающих примеров для принятия решений. Как такого обучения в алгоритмах не предполагается. Такой подход еще часто называется **"ленивым обучением" (lazy learning)**. Особенность метрических алгоритмов заключается в том, что они не строят явную модель на основе данных, а основываются на хранении и использовании обучающих примеров для принятия решений. Как такого обучения в алгоритмах не предполагается. Такой подход еще часто называется **"ленивым обучением" (lazy learning)**.
## Расстояние Между Объектами ## Расстояние между объектами
Ключевая идея методов - использование близости между объектами для принятия решения. Как выразить близость в численном эквиваленте? Ключевая идея методов - использование близости между объектами для принятия решения. Как выразить близость в численном эквиваленте?
@@ -99,7 +103,7 @@ pairwise_distances(x, y, metric='cosine')
Качество модели сильно зависит от выбора метрики. Поэтому способ измерения расстояния может использоваться в качестве внешнего параметра алгоритма (гиперпараметра), управляя которым, исследователь может модифицировать работу алгоритма и улучшать качество получаемого решения. Качество модели сильно зависит от выбора метрики. Поэтому способ измерения расстояния может использоваться в качестве внешнего параметра алгоритма (гиперпараметра), управляя которым, исследователь может модифицировать работу алгоритма и улучшать качество получаемого решения.
## Алгоритм kNN Для Классификации ## Алгоритм kNN для классификации
В данном уроке мы будем рассматривать самого популярного представителя метрических алгоритмов - метод k-ближайших соседей (k-nearest neighbors, kNN). В данном уроке мы будем рассматривать самого популярного представителя метрических алгоритмов - метод k-ближайших соседей (k-nearest neighbors, kNN).
@@ -464,7 +468,7 @@ print('Accuracy: {:.2f}'.format(accuracy_score(y, y_pred)))
Метрические алгоритмы являются **чувствительным к масштабу признаков**. Метрические алгоритмы являются **чувствительным к масштабу признаков**.
Это означает, что если один признак имеет значительно больший масштаб, чем другой, то он будет доминировать в вычислении расстояния между объектами, и алгоритм будет искать соседей только на основе доминирующего признака, не общая внимания на вклад других, что приведет к некорректной классификации. Это означает, что если один признак имеет значительно больший масштаб, чем другой, то он будет доминировать в вычислении расстояния между объектами, и алгоритм будет искать соседей только на основе доминирующего признака, не обращая внимания на вклад других, что приведет к некорректной классификации.
Рассмотрим простой пример. Пусть есть датасет из 5-ти наблюдений: Рассмотрим простой пример. Пусть есть датасет из 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$, как и должно быть. Теперь картина получается максимально противоположная: объект $x_4$ оказывается самым удаленным объектом от $x_1$, а ближайшими к $x_1$ оказываются объекты $x_3$ и $x_5$, как и должно быть.
**Важный вывод:** для корректного рассчета расстояния между объекта и, как следствие, корректной работы kNN все признаки в датасете должны быть приведены к единому масштабу. **Важный вывод:** для корректного расчёта расстояния между объектами и, как следствие, корректной работы kNN все признаки в датасете должны быть приведены к единому масштабу.
В scikit-learn методы масштабирования реализованы в модуле `preprocessing` виде следующих классов: В 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 from sklearn.preprocessing import MinMaxScaler, StandardScaler, RobustScaler
``` ```
* С помощью метода `fit()` происходит рассчет параметров масштабирования. * С помощью метода `fit()` происходит расчёт параметров масштабирования.
* С помощью метода `transform()` выполняется трансформация (масштабирование) данных. * С помощью метода `transform()` выполняется трансформация (масштабирование) данных.
@@ -1508,7 +1512,7 @@ $$\omega_i = \frac{1}{\rho}$$
Указать способ инициализации весов можно с помощью параметра `weights`. Указать способ инициализации весов можно с помощью параметра `weights`.
* По умолчанию значение параметра выставлено как 'uniform', что сооветствует равномерному распределению весов соседей, то есть все соседи имеют одинаковый и прогноз алгоритма выполняется путем мажоритарного голосования (в случае классификации) или усреднения таргета (для регрессии) * По умолчанию значение параметра выставлено как `'uniform'`, что соответствует равномерному распределению весов соседей: все соседи имеют одинаковый вес, и прогноз алгоритма выполняется путём мажоритарного голосования (в случае классификации) или усреднения таргета (для регрессии).
* Если выставить значение данного параметра как 'distance', то веса распределяются обратно пропорционально расстоянию (по формуле $\omega_i = \frac{1}{\rho}$) * Если выставить значение данного параметра как '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]$$ $$\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$ существенно влияет на качество модели и может быть использована в качестве гиперпараметра алгоритма и ее можно подбирать, также как и количество соседей. Ширина окна же $h$ существенно влияет на качество модели и может быть использована в качестве гиперпараметра алгоритма и ее можно подбирать, также как и количество соседей.
При слишком маленькой ширине модель сильно подстраивается под обучающую выборку,теряет свою обобщающую способность и рисует переобучиться. При слишком большой ширине, наблюдается обратная ситуация - модель рискует недообучиться. Универсальной ширины окна не существует, поэтому для каждой задачи её приходится подбирать отдельно. При слишком маленькой ширине модель сильно подстраивается под обучающую выборку, теряет свою обобщающую способность и рискует переобучиться. При слишком большой ширине наблюдается обратная ситуация - модель рискует недообучиться. Универсальной ширины окна не существует, поэтому для каждой задачи её приходится подбирать отдельно.
На рисунке ниже приведены [примеры](https://education.yandex.ru/handbook/ml/article/metricheskiye-metody) того как ядерная функция и ширина окна влияют на результаты регрессии: На рисунке ниже приведены [примеры](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 ```python
import numpy as np import numpy as np
@@ -1644,7 +1648,7 @@ knn_reg = KNeighborsRegressor(n_neighbors=5, weights=gaussian_kernel)
Вторая модификация классического алгоритма kNN связана с необходимостью оптимизации поиска соседей. Вторая модификация классического алгоритма kNN связана с необходимостью оптимизации поиска соседей.
В классическом алгоритме предлагается предполагается, что для того, чтобы найти ближайших соседей для объекта $x_t$ нам нужно вычислить расстояние между этим объектом и всеми объектами из обучающей выборки $(x_i)_{i=1}^n$. В классическом алгоритме предполагается, что для того, чтобы найти ближайших соседей для объекта $x_t$, нужно вычислить расстояние между этим объектом и всеми объектами из обучающей выборки $(x_i)_{i=1}^n$.
То есть нам нужно перебрать $n$ объектов. Такой "топорный" перебор называется методом грубой силы (brute force). То есть нам нужно перебрать $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/) * [Статья с примерами применения K-d- и Ball- деревьев](https://www.geeksforgeeks.org/ball-tree-and-kd-tree-algorithms/)
## Связанные заметки ## Связанные заметки
- [[Линейные модели]] — контраст с параметрическими моделями: kNN хранит обучающие примеры и не строит явную линейную функцию
- [[Нейронные сети]] — другой класс моделей ML; в отличие от kNN, нейросети обучают веса и строят параметрическое отображение $Y=F(X)$
- [[Расстояние между объектами]] — формулы метрик (Евклид, Манхэттен, Минковский, Махаланобис) идентичны тем, что реализованы в sklearn; Math-нота даёт строгие определения - [[Расстояние между объектами]] — формулы метрик (Евклид, Манхэттен, Минковский, Махаланобис) идентичны тем, что реализованы в sklearn; Math-нота даёт строгие определения
- [[Итерационная классификация. Метод K-средних (K-means)]] — K-means тоже классифицирует по минимальному расстоянию $\min \rho_{il}$; unsupervised-аналог kNN - [[Итерационная классификация. Метод K-средних (K-means)]] — K-means тоже классифицирует по минимальному расстоянию $\min \rho_{il}$; unsupervised-аналог kNN
- [[Наивный Байесовский алгоритм]] — альтернативный метод классификации с учителем из той же обучающей выборки - [[Наивный Байесовский алгоритм]] — альтернативный метод классификации с учителем из той же обучающей выборки
@@ -243,5 +243,6 @@ $$
## Связанные заметки ## Связанные заметки
- [[Обратное распространение ошибки]] - [[Обратное распространение ошибки]]
- [[Обратное распространение ошибки для произвольного числа слоев НС]]
- [[Нейронные сети]] - [[Нейронные сети]]
- [[Линейные модели]] - [[Линейные модели]]
@@ -143,5 +143,6 @@ Backpropagation - это не отдельный способ оптимизац
## Связанные заметки ## Связанные заметки
- [[Обратное распространение ошибки - вывод]] - [[Обратное распространение ошибки - вывод]]
- [[Обратное распространение ошибки для произвольного числа слоев НС]]
- [[Нейронные сети]] - [[Нейронные сети]]
- [[Линейные модели]] - [[Линейные модели]]