From fed94882bbddd88fe51c6aaee10d4523200667a8 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Thu, 7 May 2026 15:57:15 +0300 Subject: [PATCH] vault backup: 2026-05-07 15:57:15 --- .../11 Machine Learning/Линейные модели.md | 6 +-- .../Метрические алгоритмы.md | 42 +++++++++++-------- ...Обратное распространение ошибки - вывод.md | 1 + .../Обратное распространение ошибки.md | 1 + 4 files changed, 29 insertions(+), 21 deletions(-) diff --git a/01 Library/11 Machine Learning/Линейные модели.md b/01 Library/11 Machine Learning/Линейные модели.md index 9984d24..a14a2f3 100644 --- a/01 Library/11 Machine Learning/Линейные модели.md +++ b/01 Library/11 Machine Learning/Линейные модели.md @@ -1906,7 +1906,7 @@ $$\{(x_i, y_i)\}_{i=1}^n = \{(x_1, y_1), (x_2, y_2), ..., (x_n, y_n)\}$$ * $n$ - размер выборки * $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}$. diff --git a/01 Library/11 Machine Learning/Метрические алгоритмы.md b/01 Library/11 Machine Learning/Метрические алгоритмы.md index acc2a4f..33c5c93 100644 --- a/01 Library/11 Machine Learning/Метрические алгоритмы.md +++ b/01 Library/11 Machine Learning/Метрические алгоритмы.md @@ -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 - [[Наивный Байесовский алгоритм]] — альтернативный метод классификации с учителем из той же обучающей выборки diff --git a/01 Library/11 Machine Learning/Обратное распространение ошибки - вывод.md b/01 Library/11 Machine Learning/Обратное распространение ошибки - вывод.md index ecfb51f..d54ea2b 100644 --- a/01 Library/11 Machine Learning/Обратное распространение ошибки - вывод.md +++ b/01 Library/11 Machine Learning/Обратное распространение ошибки - вывод.md @@ -243,5 +243,6 @@ $$ ## Связанные заметки - [[Обратное распространение ошибки]] +- [[Обратное распространение ошибки для произвольного числа слоев НС]] - [[Нейронные сети]] - [[Линейные модели]] diff --git a/01 Library/11 Machine Learning/Обратное распространение ошибки.md b/01 Library/11 Machine Learning/Обратное распространение ошибки.md index 5d90660..6ffe541 100644 --- a/01 Library/11 Machine Learning/Обратное распространение ошибки.md +++ b/01 Library/11 Machine Learning/Обратное распространение ошибки.md @@ -143,5 +143,6 @@ Backpropagation - это не отдельный способ оптимизац ## Связанные заметки - [[Обратное распространение ошибки - вывод]] +- [[Обратное распространение ошибки для произвольного числа слоев НС]] - [[Нейронные сети]] - [[Линейные модели]]