Содержание курса 01 / 27

01 / 27 · Постановка задачи обучения

Что такое машинное обучение

Почему курс машинного обучения идёт после курса теории вероятностей: выучить правило по примерам — значит минимизировать среднюю потерю, и трудность не в том, чтобы подогнать модель под примеры, а в том, чтобы она хорошо работала на новых. Постановка задачи: признаки, целевая переменная, функция потерь, риск и эмпирический риск; наилучший возможный прогноз; типы задач; почему ошибка на обучении обманывает; план курса, вероятностные основания каждого метода и заметки курсов NLP и генеративных моделей, которые на них опираются.

На этой странице 12

Банк решает, кому выдать кредит, магазин — сколько товара заказать, поисковик — какие десять страниц показать первыми. Ни одно из этих решений не следует из формулы, выведенной из первых принципов, но у каждого есть история: кредиты, которые вернули или не вернули, прошлые продажи, прошлые клики. Машинное обучение (machine learning) превращает такую историю в правило, которое предсказывает исход для нового случая. За пределами текстов и изображений бо́льшая часть этой работы ведётся на таблицах (цены, кредиты, отток, спрос, поисковое ранжирование), и основные рабочие инструменты — линейные модели, решающие деревья и градиентный бустинг; нейронные сети собраны из тех же частей: линейных отображений, функций потерь, градиентного спуска и регуляризации. На табличных данных среднего размера ансамбли деревьев по-прежнему обыгрывают глубокие сети (Grinsztajn, Oyallon and Varoquaux, 2022). Подогнать правило под историю — лёгкая часть. Трудная часть — обобщение (generalization): правило, безупречное на примерах, может оказаться бесполезным на следующем случае, а небрежная проверка может выдать бесполезное правило за безупречное. Эта заметка ставит задачу на языке курса теории вероятностей, показывает, почему ошибка на обучающих примерах оптимистична, и описывает план курса.

Обозначения. Объект (клиент, квартира, пара «запрос–документ») описывается вектором признаков x∈Xx \in \mathcal X, обычно из Rd\mathbb R^d; его целевая переменная (target) — y∈Yy \in \mathcal Y. Пары порождаются неизвестным распределением PP на X×Y\mathcal X \times \mathcal Y, и обучающая выборка S={(x1,y1),…,(xn,yn)}S = \{(x_1, y_1), \dots, (x_n, y_n)\} содержит nn независимых наблюдений из него. Модель — функция ff из X\mathcal X в множество прогнозов, выбранная из семейства F\mathcal F; обученная модель — f^\hat f. Функция потерь L(y,y^)≥0L(y, \hat y) \ge 0 — цена прогноза y^\hat y, когда верный ответ равен yy.

От примеров к правилу#

Обучающая выборка — это таблица: одна строка на объект, один столбец на признак плюс столбец целевой переменной. Чтобы предсказывать цену квартиры, признаками могут быть площадь, район, этаж и год постройки, а целевой переменной — цена. Метод обучения с учителем (supervised learning) берёт таблицу и возвращает функцию f^\hat f, которая по признакам квартиры, не входившей в таблицу, выдаёт цену.

«Хорошо» нужно выразить числом. Функция потерь говорит, насколько плох один прогноз, например квадратичная ошибка L(y,y^)=(y−y^)2L(y, \hat y) = (y - \hat y)^2, а эмпирический риск (empirical risk) модели — её средняя потеря на обучающей выборке:

R^n(f)=1n∑i=1nL(yi,f(xi)).\hat R_n(f) = \frac1n \sum_{i=1}^n L\big(y_i, f(x_i)\big) .

Большинство процедур обучения, от метода наименьших квадратов до градиентного бустинга, минимизируют его по семейству моделей: f^=arg⁡min⁡f∈FR^n(f)\hat f = \arg\min_{f \in \mathcal F} \hat R_n(f) — это минимизация эмпирического риска (empirical risk minimization). Но важна нам потеря на следующем объекте — риск (risk)

R(f)=E(X,Y)∼P L(Y,f(X)),R(f) = E_{(X, Y) \sim P}\, L\big(Y, f(X)\big) ,

математическое ожидание потери по распределению, которое порождает данные. Эмпирический риск — выборочное среднее потерь, и для модели, зафиксированной до того, как мы увидели данные, он является несмещённой оценкой риска. Если у потери конечное среднее по PP, оценка сходится к риску по закону больших чисел. Если у потери ещё и конечная дисперсия σL2\sigma_L^2, стандартная ошибка равна σL/n\sigma_L/\sqrt n, то есть имеет порядок 1/n1/\sqrt n, и центральная предельная теорема превращает её в погрешность; ограниченная потеря удовлетворяет обоим условиям, и тогда неравенство Хёфдинга даёт оценку при любом nn.

Обученная модель не зафиксирована до того, как мы увидели данные: её выбрали именно потому, что она под них подходит. Разобранный пример. Простейшая модель игнорирует признаки и предсказывает одно число cc. Четыре квартиры стоят 3, 5, 4 и 8 (миллионов). Квадратичную потерю минимизирует среднее, c=yˉ=5c = \bar y = 5, и его эмпирический риск равен 14(4+0+1+9)=3.5\frac14(4 + 0 + 1 + 9) = 3.5. Равен ли 3.5 риск прогноза 5? Пусть цены имеют среднее μ\mu и дисперсию σ2\sigma^2. На новой квартире риск константы yˉ\bar y равен E(Y−yˉ)2=σ2+(yˉ−μ)2E(Y - \bar y)^2 = \sigma^2 + (\bar y - \mu)^2, и его среднее по обучающим выборкам равно σ2+σ2/n\sigma^2 + \sigma^2/n. Эмпирический риск равен 1n∑i(yi−yˉ)2\frac1n \sum_i (y_i - \bar y)^2, его среднее — n−1nσ2\frac{n-1}{n}\sigma^2, смещённая оценка дисперсии из заметки об оценках. При n=4n = 4:

E R^n(yˉ)=0.75 σ2,E R(yˉ)=1.25 σ2.E\,\hat R_n(\bar y) = 0.75\,\sigma^2, \qquad E\,R(\bar y) = 1.25\,\sigma^2 .

Уже модель с одним параметром выглядит на своих обучающих данных лучше, чем она есть, потому что параметр выбран под эти данные: разрыв равен 2σ2/n2\sigma^2/n. У моделей с тысячами параметров разрыв может сравняться с самим риском.

Наилучший возможный прогноз#

Какую функцию мы выбрали бы, если бы знали PP? Для квадратичной потери ответ — условное среднее m(x)=E[Y∣X=x]m(x) = E[Y \mid X = x], наилучший прогноз: для любой ff выполнено R(f)=R(m)+E (m(X)−f(X))2R(f) = R(m) + E\,(m(X) - f(X))^2. Его собственный риск, R(m)=EVar⁡(Y∣X)R(m) = E\operatorname{Var}(Y \mid X), — это шум, который признаки не объясняют, неустранимая ошибка (irreducible error). Другие функции потерь выделяют другие характеристики условного распределения (другие потери — другие цели):

Функция потерьL(y,y^)L(y, \hat y)Наилучший прогноз в точке xxПрочтение через правдоподобие (необязательное)
Квадратичная(y−y^)2(y - \hat y)^2среднее Y∣X=xY \mid X = xгауссовская
Абсолютная∣y−y^∣\lvert y - \hat y \rvertмедиана Y∣X=xY \mid X = xЛапласа
0–1[y≠y^][y \ne \hat y]самый вероятный класс
Кросс-энтропия−log⁡q(y∣x)-\log q(y \mid x)q(⋅∣x)=P(Y=⋅∣X=x)q(\cdot \mid x) = P(Y = \cdot \mid X = x)категориальная

Третий столбец не требует никаких предположений о шуме. Условное среднее минимизирует ожидаемую квадратичную потерю для любого распределения с E Y2<∞E\,Y^2 < \infty, гауссовского или нет, а условная медиана минимизирует ожидаемую абсолютную потерю, если E∣Y∣<∞E\lvert Y \rvert < \infty. Функция потерь решает, какую характеристику Y∣X=xY \mid X = x мы оцениваем. Последний столбец — необязательное прочтение из заметки о методе максимального правдоподобия: с точностью до констант квадратичная, абсолютная потеря и кросс-энтропия — отрицательные логарифмы правдоподобия этих моделей шума, поэтому их минимизация — это метод максимального правдоподобия, если модель верна. Например, при экспоненциальном шуме метод наименьших квадратов по-прежнему оценивает условное среднее, но уже не совпадает с оценкой максимального правдоподобия. Не у каждой полезной функции потерь есть такое прочтение: у потери 0–1 его нет, а кусочно-линейная потеря (hinge loss) метода опорных векторов не является нормированным условным правдоподобием. Для классификации с потерей 0–1 наилучшее правило предсказывает самый вероятный класс; это байесовский классификатор (Bayes classifier), а его риск R∗=E[1−max⁡kP(Y=k∣X)]R^* = E\big[1 - \max_k P(Y = k \mid X)\big] — байесовская ошибка (Bayes error).

Обученная модель уступает наилучшей по двум причинам. Обозначив в общем случае через R∗R^* наименьший возможный риск при выбранной функции потерь (R(m)R(m) для квадратичной потери, байесовская ошибка для потери 0–1), а через fF∗f^*_{\mathcal F} — лучшего представителя семейства, получаем

R(f^)−R∗=R(f^)−R(fF∗)⏟ошибка оценивания+R(fF∗)−R∗⏟ошибка аппроксимации.R(\hat f) - R^* = \underbrace{R(\hat f) - R(f^*_{\mathcal F})}_{\text{ошибка оценивания}} + \underbrace{R(f^*_{\mathcal F}) - R^*}_{\text{ошибка аппроксимации}} .

Слишком простое семейство не может приблизить mm; слишком богатое для nn примеров семейство нельзя хорошо оценить по ним. Каждый метод этого курса выбирает точку на этом компромиссе, а заметка о смещении и разбросе делает его точным для квадратичной потери.

Типы задач#

ЗадачаЦелевая переменнаяПримерыТипичная функция потерь или метрика
Регрессиячислоцена, спрос, время доставкиквадратичная или абсолютная ошибка
Бинарная классификацияодин из двух классовдефолт, отток, мошенничествокросс-энтропия; точность (precision), полнота (recall), ROC-AUC
Многоклассовая, многометочнаяодин из KK классов или набор метоктема статьи, тегиsoftmax-кросс-энтропия
Ранжированиепорядок объектов для запросапоисковая выдача, рекомендациипопарные и списочные функции потерь, NDCG
Кластеризациянетсегменты клиентоврасстояние внутри кластера

Первые четыре задачи — задачи обучения с учителем: обучающая выборка содержит значения целевой переменной. Ранжирование отличается тем, что потеря зависит сразу от нескольких объектов: список хорош, если релевантные документы идут первыми, каковы бы ни были оценки. В задачах обучения без учителя (unsupervised learning) целевой переменной нет вовсе; кроме кластеризации, к ним относятся оценка плотности, поиск аномалий и понижение размерности — темы раздела об обучении без учителя.

Подогнать легко, обобщить трудно#

Самое гибкое семейство содержит все функции, и в нём идеальная подгонка под обучающую выборку существует всегда: запоминающая модель (memorizer) возвращает yiy_i на вопрос об xix_i и некоторое значение по умолчанию на всё остальное. Её эмпирический риск равен нулю. При непрерывных признаках новый объект почти никогда не совпадает с обучающим, поэтому запоминающая модель отвечает на любой новый вопрос значением по умолчанию: она ничему не научилась. Богатое семейство переобучается (overfits) менее крайним образом, и рисунок показывает как. Многочлены растущей степени подгоняются методом наименьших квадратов к 12 точкам синусоиды с шумом дисперсии 0.090.09 (та же постановка, что в примере со смещением и разбросом); обе кривые — точные математические ожидания по шуму:

Рисунок

Ошибка на обучении падает, ошибка на новых данных — нет

Ошибка на обучении и на новых данных в зависимости от степениСиняя кривая ошибки на обучении монотонно падает до нуля; красная кривая ошибки на новых данных падает до степени 3 и затем растёт, уходя за верх графика при степени 11.00.20.40.601234567891011степень многочленашум 0.093.16на новых данныхна обученииминимум: степень 3, 0.1210 при степени 11Ошибка на обучении и на новых данных в зависимости от степениСиняя кривая ошибки на обучении монотонно падает до нуля; красная кривая ошибки на новых данных падает до степени 3 и затем растёт, уходя за верх графика при степени 11.00.20.40.6036911степень многочленашум 0.093.16на новых данныхна обученииминимум 0.1210 при степени 11
Многочлены степени 0–11, подогнанные методом наименьших квадратов к 12 равноотстоящим точкам y = sin 2πx + шум (σ = 0.3). Обе кривые — точные математические ожидания по шуму. Ошибка на обучении падает с каждым коэффициентом и при степени 11 равна 0: многочлен проходит через все точки. Ошибка на новой точке X ~ U(0, 1) минимальна при степени 3 (0.121), равна 0.208 при степени 9, 0.421 при степени 10 и 3.16 при степени 11. Пунктир — шум 0.09, ниже которого не может опуститься ошибка никакой модели на новых данных.

Ошибка на обучении падает с каждым добавленным коэффициентом: 0.541 для константы, 0.067 при степени 3, 0.015 при степени 9 и ровно 0 при степени 11, когда многочлен проходит через все 12 точек. Ошибка на новых данных падает, лишь пока модель слишком проста для синусоиды: она минимальна при степени 3 (0.121), а затем растёт до 0.208 при степени 9, 0.421 при степени 10 и 3.16 при степени 11. Начиная со степени 5 многочлен может почти точно повторить синусоиду, и ожидаемая ошибка на обучении равна σ2(n−p)/n\sigma^2 (n - p)/n для p=степень+1p = \text{степень} + 1 коэффициентов: каждый коэффициент поглощает одно направление шума, 0.09/12=0.00750.09/12 = 0.0075 ошибки на обучении на коэффициент. Этот поглощённый шум и есть то, в чём модель ошибается на новых данных.

Теория вероятностей говорит, сколько данных нужно для проверки. Для одной модели, зафиксированной заранее, неравенство Хёфдинга ограничивает отклонение её потери на валидации от риска; для лучшей из KK кандидатов, выбранной на той же валидационной выборке, оценка платит ln⁡K\ln K за выбор (первая оценка обобщающей способности). Заметка о валидации превращает это в практику: обучающая, валидационная и тестовая выборки, кросс-валидация и погрешность результата.

Курс как мост#

Дополнительный материал: на какие разделы теории вероятностей опирается каждый метод и где его используют курсы NLP и генеративных моделей. Остальная часть заметки на него не опирается.

Этот курс стоит между курсом теории вероятностей и двумя курсами, которые на нём строятся, — NLP и генеративными моделями. Каждый метод вводится вместе с теорией вероятностей, на которой он стоит, и в каждой заметке сказано, где его используют следующие курсы. Основные линии:

Инструмент теории вероятностейЧем он становится здесьГде его используют NLP и генеративные модели
Математическое ожиданиериск как ожидаемая потеря; градиент по мини-батчу как оценка ожидаемого градиента (градиентный спуск)любая целевая функция обучения — эмпирический риск
Концентрация, ЗБЧ, ЦПТ, бутстрэпобобщение, валидация и её погрешность, смещение отбора, метрикиоценка качества и утечки в NLP
Условное математическое ожиданиецель метода наименьших квадратов и ближайших соседей; разложение на смещение и разброс
Метод максимального правдоподобияквадратичная ошибка, прочитанная как гауссовское правдоподобие; кросс-энтропия в логистической регрессии и softmax; EM-алгоритмклассификаторы текстов, языковые модели, кросс-энтропия и KL
Байесовский выводгребневая регрессия и лассо как априорные распределения (регуляризация); сглаженное целевое кодированиезатухание весов при дообучении
Многомерное нормальное распределениеPCA, смеси гауссиан, геометрия ближайших соседей в большой размерностиавтоэнкодеры и VAE, семантический поиск

Две линии начинаются в самом этом курсе: обратное распространение ошибки, которым обучаются рекуррентные сети и трансформеры курса NLP и все сети курса генеративных моделей, и обучение ранжированию, которое оценивает фрагменты в семантическом поиске и генерации с извлечением.

Рисунок

Курс как мост: от вероятности к NLP и генеративным моделям

Три столбца: теория вероятностей, машинное обучение, NLP и генеративные моделиСлева шесть понятий теории вероятностей, в центре восемь тем машинного обучения, справа восемь применений в NLP и генеративных моделях; линии соединяют понятие с темой, которая на нём построена, и тему с её применением.Теория вероятностейМашинное обучениеNLP · генеративные моделиМатожиданиериск — ожидаемая потеряКонцентрация, ЗБЧ, ЦПТпочему среднее обобщаетсяУсловное матожиданиелучший возможный прогнозМаксимум правдоподобияпотери из правдоподобияБайесовский выводаприорное → штрафМногомерное нормальноемногомерная геометрияРиск и эмпирический рискэта заметкаВалидация и метрикипогрешность и отборГрадиентный спускbackprop, обучение шагамиНаименьшие квадратыи смещение–разбросЛогистическая регрессиявероятности и softmaxРегуляризацияridge, lasso, weight decayБлижайшие соседипрогноз по сходствуPCA, смеси и EMструктура без разметкиОценка качества и утечкиразбиения и ошибки в NLPОбучение нейросетейRNN, трансформерыКлассификаторы текстовлинейные модели на словахЯзыковые моделикросс-энтропия на токенахКросс-энтропия и KLлосс генеративных моделейДообучениештраф на веса большой сетиСемантический поисксоседи среди эмбеддинговАвтоэнкодеры и VAEглубокие PCA и EMТри столбца: теория вероятностей, машинное обучение, NLP и генеративные моделиСлева шесть понятий теории вероятностей, в центре восемь тем машинного обучения, справа восемь применений в NLP и генеративных моделях; линии соединяют понятие с темой, которая на нём построена, и тему с её применением.ТеорверMLNLP · ген.МатожиданиеЗБЧ, ЦПТ,концентрацияУсловноематожиданиеМаксимумправдоподобияБайесовскийвыводМногомерноенормальноеЭмпирич.рискВалидация,метрикиГрадиенты,backpropНаименьшиеквадратыЛогистич.,softmaxРегуляри-зацияБлижайшиесоседиPCA,смеси, EMОценка,утечкиОбучениенейросетейКлассификациятекстовЯзыковыемоделиКросс-энтропия, KLДообучениеСемантическийпоискАвтоэнкодеры,VAE
Шесть инструментов теории вероятностей (слева) питают восемь групп заметок этого курса (в центре), а те — восемь мест, где ими пользуются курсы NLP (зелёные) и генеративных моделей (красные). Каждая из 20 линий — одна зависимость; таблица выше называет заметки за каждой.

Карта курса#

Каждый шаг либо отвечает на ограничение предыдущего, либо, в последних строках, меняет задачу:

ПровалОтвет
Запоминание обучающей выборки не обобщаетсяриск и валидация: эта заметка, данные, признаки и утечки, валидация
Похожие входы должны получать похожие ответы, но сходство во многих измерениях почти бессмысленнометод ближайших соседей и проклятие размерности
У голосования соседей нет глобальной структурыметод наименьших квадратов
Замкнутая формула слишком дорога или не существуетградиентный спуск, стохастические и адаптивные оптимизаторы
При большом числе признаков подгонка гонится за шумомрегуляризация
Метод наименьших квадратов на метках классов позволяет лёгким точкам сдвигать границулинейные классификаторы и суррогатные функции потерь
Нужны вероятности, а не только сторона прямойлогистическая регрессия
Доля правильных ответов скрывает важные ошибкиметрики классификации
Лучшая разделяющая прямая не единственна, а прямые слишком простыметод опорных векторов, ядра
Больше двух классов или несколько меток сразумногоклассовая и многометочная классификация
Прямая не может выразить взаимодействия признаковрешающие деревья
Почему гибкие модели переобучаются?разложение на смещение и разброс
Одно дерево неустойчивобэггинг и случайный лес
Усреднение не исправляет смещениеградиентный бустинг
Признаки приходится конструировать вручнуюнейронные сети, обратное распространение ошибки, обучение глубоких сетей
Меток нет вовсекластеризация, смеси распределений и EM, понижение размерности, поиск аномалий
Ответ — порядок, а не меткаобучение ранжированию, рекомендательные системы

Заметки сгруппированы в семь разделов: постановка задачи обучения (эта заметка и три следующие), линейная регрессия, линейная классификация, деревья и ансамбли, нейронные сети, обучение без учителя и задачи за пределами классификации. После курса читатель должен уметь превратить бизнес-вопрос в задачу обучения с учителем с целевой переменной, признаками и метрикой; построить схему валидации, которая соответствует применению модели и ловит утечки; обучать и отлаживать линейные модели, деревья и бустинг и выводить их градиенты; выбирать между бустингом и нейронной сетью для конкретного набора данных; читать код обучения на scikit-learn или PyTorch, понимая, что делает каждая строка.

Что изменилось#

Программа, написанная вручнуюМодель, выученная по примерам
Правилопишет человек, понимающий процессвыбирается из семейства F\mathcal F минимизацией R^n\hat R_n
Что нужнознание механизмапримеры из распределения будущих случаев
Что значит «правильно»проходит заданные случаималый риск R(f)R(f) на новых случаях
Как проверяетсятесты по спецификациипотеря на отложенных данных с погрешностью
Типичный сбойошибка в кодепереобучение, утечка, изменение распределения

Ограничения#

  • Новые данные должны быть похожи на старые. Все гарантии касаются пар из того же распределения PP. Новый рынок, кризис или политика, которая реагирует на собственные прогнозы модели, меняют PP, и риск, измеренный на валидации, больше не действует.
  • Функция потерь — это выбор. Модель минимизирует ту функцию потерь, которую ей дали; в задаче с 1% мошенничества правило «никогда не предсказывать мошенничество» уже даёт долю правильных ответов (accuracy) 99%, так что по этой метрике бесполезная модель может оказаться выше полезной.
  • Прогноз — не причинность. Модель P(Y∣X)P(Y \mid X) говорит, каким обычно бывает YY, когда наблюдается XX, а не каким YY станет, если XX изменить: модель оттока ранжирует клиентов, которые, скорее всего, уйдут, но не говорит, какое предложение их удержит.
  • Метки стоят денег. Обучению с учителем нужна целевая переменная для каждого обучающего примера, и сбор её значений часто оказывается самой дорогой частью проекта.

Что нужно запомнить#

  • Задача обучения с учителем — это таблица признаков xx и целевых значений yy, семейство моделей и функция потерь; обучение минимизирует эмпирический риск R^n(f)=1n∑iL(yi,f(xi))\hat R_n(f) = \frac1n\sum_i L(y_i, f(x_i)).
  • Важен риск R(f)=E L(Y,f(X))R(f) = E\,L(Y, f(X)) на новых данных; для модели, зафиксированной заранее, и потери с конечной дисперсией R^n\hat R_n оценивает его с ошибкой порядка 1/n1/\sqrt n.
  • Ошибка обученной модели на обучающей выборке оптимистична: уже для подогнанной константы ER^n=n−1nσ2E\hat R_n = \frac{n-1}{n}\sigma^2 против риска n+1nσ2\frac{n+1}{n}\sigma^2.
  • Наилучший возможный прогноз — E[Y∣X]E[Y \mid X] для квадратичной потери и самый вероятный класс для потери 0–1; их риск — неустранимая ошибка и байесовская ошибка.
  • Функция потерь определяет наилучший прогноз при любом шуме: среднее для квадратичной ошибки, медиану для абсолютной, самый вероятный класс для потери 0–1. Некоторые распространённые потери можно прочитать и как отрицательные логарифмы правдоподобия (квадратичная ошибка — гауссовский шум, кросс-энтропия — категориальная модель); не каждая полезная потеря такова.
  • Чем богаче семейство, тем ниже ошибка на обучении; ошибка на новых данных сначала падает, потом растёт. Измерить её можно только на отложенных данных.

Код#

Оптимизм подогнанной константы в симуляции и ошибки многочленов с рисунка — точно и в симуляции:

import numpy as np
from numpy.polynomial import legendre as L

rng = np.random.default_rng(0)

# a constant prediction fitted to n = 4 values: its training error against its risk on new data (sigma^2 = 1)
n, sims = 4, 200_000
y = rng.normal(size=(sims, n))
c = y.mean(axis=1)                                          # the fitted constant, y-bar
train = ((y - c[:, None]) ** 2).mean(axis=1)                # empirical risk of y-bar on its own sample
risk = 1 + c ** 2                                           # E(Y - c)^2 for a new Y ~ N(0, 1)
print(round(float(train.mean()), 3), round(float(risk.mean()), 3))   # 0.751 1.25: (n-1)/n and (n+1)/n
print(np.mean([3, 5, 4, 8]), np.mean((np.array([3, 5, 4, 8]) - 5) ** 2))  # 5.0 3.5: the toy example

# polynomials fitted to 12 equally spaced points of sin(2 pi x) + N(0, 0.3^2): exact expected errors
m, s2, n = (lambda x: np.sin(2 * np.pi * x)), 0.09, 12
x = np.linspace(0, 1, n)
gx, gw = L.leggauss(200); gx, gw = (gx + 1) / 2, gw / 2      # quadrature on [0, 1] for a new X ~ U(0, 1)
def expected_errors(deg):
    Phi = L.legvander(2 * x - 1, deg)
    A = np.linalg.pinv(Phi)                                 # y -> coefficients
    G = L.legvander(2 * gx - 1, deg) @ A                    # y -> predictions on the quadrature grid
    train = (((m(x) - Phi @ A @ m(x)) ** 2).sum() + s2 * (n - deg - 1)) / n
    test = s2 + gw @ (G @ m(x) - m(gx)) ** 2 + s2 * gw @ (G ** 2).sum(axis=1)
    return train, test
for deg in (0, 1, 3, 5, 9, 10, 11):
    print(deg, *np.round(expected_errors(deg), 3))
# 0 0.541 0.598 | 1 0.329 0.318 | 3 0.067 0.121 | 5 0.045 0.128 | 9 0.015 0.208 | 10 0.008 0.421 | 11 0.0 3.158

# the same numbers by simulation for degree 3: 20,000 training sets, each scored on 1,000 fresh points
P = L.legvander(2 * x - 1, 3)
Y = m(x) + 0.3 * rng.normal(size=(20_000, n))
coef = np.linalg.lstsq(P, Y.T, rcond=None)[0]
xt = rng.random(1000)
Yt = m(xt) + 0.3 * rng.normal(size=(20_000, 1000))
print(round(float(((Y - (P @ coef).T) ** 2).mean()), 3), round(float(((Yt - (L.legvander(2 * xt - 1, 3) @ coef).T) ** 2).mean()), 3))
# 0.067 0.122

Дальше#

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

Литература#