ai_learning/modules/06_classical_ml/notes/02_models.md

11 KiB
Raw Blame History

Линейные модели, kNN, Naive Bayes и SVM

Эта глава связывает четыре семейства моделей с их целями, предположениями, геометрией и наблюдаемым поведением.

Общая постановка

Пусть \mathbf X\in\mathbb R^{n\times d}, строка \mathbf x^{(i)} — объект. Модель выбирают не по названию, а по индуктивному предположению: линейная зависимость, локальная гладкость, условная независимость или разделение классов с большим зазором. Масштабирование обязательно для регуляризованных линейных моделей, kNN и SVM: иначе единицы измерения определяют геометрию.

Линейная регрессия

Модель \hat y=\mathbf w^\top\mathbf x+b минимизирует MSE:


L(\mathbf w,b)=\frac1{2n}\|\mathbf X\mathbf w+b\mathbf1-\mathbf y\|_2^2.

После добавления столбца единиц обозначим расширенную матрицу \tilde{\mathbf X} и параметры \boldsymbol\beta. Тогда


\nabla L=\frac1n\tilde{\mathbf X}^{\top}
(\tilde{\mathbf X}\boldsymbol\beta-\mathbf y).

Условие стационарности даёт нормальные уравнения (\tilde{\mathbf X}^{\top}\tilde{\mathbf X}\boldsymbol\beta =\tilde{\mathbf X}^{\top}\mathbf y). При полном столбцовом ранге (\hat{\boldsymbol\beta}=(\tilde{\mathbf X}^{\top}\tilde{\mathbf X})^{-1} \tilde{\mathbf X}^{\top}\mathbf y), но в коде устойчивее QR/SVD, а не явная обратная матрица.

Ridge добавляет \lambda\|\mathbf w\|_2^2/2, уменьшая дисперсию и проблему коллинеарности. Lasso добавляет \lambda\|\mathbf w\|_1, создавая нулевые коэффициенты, но нестабильно выбирает один из коррелирующих признаков. Линейность относится к параметрам: полиномиальные признаки всё ещё допускают линейную регрессию.

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

Логистическая регрессия

Для Y\in\{0,1\} логит линейный:


p_\theta(Y=1\mid\mathbf x)=\sigma(z),\quad
z=\mathbf w^\top\mathbf x+b,\quad \sigma(z)=\frac1{1+e^{-z}}.

Отношение шансов удовлетворяет \log[p/(1-p)]=z: увеличение x_j на единицу умножает шансы на (e^{w_j}) при фиксированных остальных признаках. Максимизация правдоподобия Бернулли эквивалентна минимизации log loss:


L=-\frac1n\sum_i[y^{(i)}\log p_i+(1-y^{(i)})\log(1-p_i)].

Поскольку d\ell/dz=p-y, \nabla_{\mathbf w}L=\mathbf X^\top(\mathbf p-\mathbf y)/n. Уверенная ошибка получает большой градиент. Граница при пороге 0.5 есть \mathbf w^\top\mathbf x+b=0, но рабочий порог выбирают отдельно. Мультикласс обобщается softmax-регрессией.

k ближайших соседей

kNN не подгоняет явную функцию: для запроса ищет множество N_k(\mathbf x). Регрессия усредняет ответы, классификация голосует:


\hat p(Y=c\mid\mathbf x)=\frac1k\sum_{i\in N_k(\mathbf x)}
\mathbb1\{y^{(i)}=c\}.

Малое k даёт низкое смещение и высокую дисперсию; большое — наоборот. Взвешивание 1/(r_i+\varepsilon) усиливает близких соседей. Основное предположение — локальная близость признаков означает близость ответа. В высокой размерности расстояния становятся похожими, объём локальной окрестности растёт экспоненциально: это проклятие размерности. Обучение почти бесплатно, предсказание и память дороги.

Наивный Байес

По формуле Байеса


p(y=c\mid\mathbf x)\propto p(y=c)p(\mathbf x\mid y=c).

Naive Bayes предполагает условную независимость признаков:


p(\mathbf x\mid y=c)=\prod_{j=1}^d p(x_j\mid y=c).

Вычисляют логарифмы: \log p(c\mid\mathbf x)=\mathrm{const}+\log p(c)+\sum_j\log p(x_j\mid c). GaussianNB моделирует числовые признаки нормальными, MultinomialNB — счётчики, BernoulliNB — бинарные признаки. Сглаживание Лапласа \hat p=(N_{jc}+\alpha)/(N_c+\alpha V) не позволяет невиданному слову обнулить произведение. Независимость почти всегда ложна, но граница решения часто остаётся хорошей; вероятности при коррелирующих признаках могут быть чрезмерно уверенными.

SVM и большой зазор

Для y^{(i)}\in\{-1,+1\} функциональный отступ m_i=y^{(i)}(\mathbf w^\top\mathbf x^{(i)}+b). Soft-margin SVM решает


\min_{\mathbf w,b}\frac12\|\mathbf w\|_2^2+
C\sum_i\max(0,1-m_i).

Первое слагаемое максимизирует геометрический зазор 2/\|\mathbf w\|_2, hinge loss штрафует точки внутри полосы и ошибки. C — цена нарушения: большое C уменьшает train-ошибки, но ослабляет регуляризацию. Только точки с m_i\le1 — опорные — влияют на решение.

Kernel trick заменяет скалярное произведение на K(\mathbf x,\mathbf z)=\phi(\mathbf x)^\top\phi(\mathbf z). Для RBF K=\exp(-\gamma\|\mathbf x-\mathbf z\|^2): большая \gamma создаёт очень локальную гибкую границу. Ядро должно задавать положительно полуопределённую Gram-матрицу. Kernel SVM масштабируется плохо по n; линейный SVM эффективнее для больших разреженных данных. SVM score не является вероятностью; калибровка требует отдельных данных.

Разобранный пример

Для логистической модели z=-1+0.8x, при x=2: z=0.6, p=1/(1+e^{-0.6})\approx0.646. При (y=1) \ell=-\log0.646\approx0.437, производная по z равна p-y=-0.354: градиентный шаг увеличит z. Рост x на единицу умножает шансы на e^{0.8}\approx2.23, а не увеличивает вероятность на константу.

Самостоятельный пример sklearn

from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC

X, y = make_classification(
    n_samples=600, n_features=8, class_sep=1.2, random_state=7
)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, stratify=y, random_state=7
)
for model in [
    LogisticRegression(max_iter=2000),
    SVC(C=1.0, kernel="rbf", gamma="scale"),
]:
    pipe = make_pipeline(StandardScaler(), model)
    pipe.fit(X_train, y_train)
    print(type(model).__name__, pipe.score(X_test, y_test))

Замените последний estimator на KNeighborsClassifier или GaussianNB (масштабирование для GaussianNB не обязательно) и сравните на одном split.

Типичные ошибки и ограничения

  • Коэффициенты без масштаба и проверки коллинеарности нельзя сравнивать.
  • Логистическая регрессия задаёт линейный logit, а не линейную вероятность.
  • kNN с ID, шумовыми признаками или необработанными единицами измеряет не то.
  • Naive Bayes не подтверждает независимость; его вероятности проверяют отдельно.
  • SVC(probability=True) выполняет дополнительную калибровку и дороже обучается.
  • Выбор модели по train score смешивает способность запоминать и обобщать.

Краткое резюме

  • Линейные модели оптимизируют выпуклый риск и дают сильный baseline.
  • kNN переносит локальную структуру, но страдает в высокой размерности.
  • Naive Bayes силён при подходящей модели признаков, несмотря на грубое допущение.
  • SVM контролирует границу через зазор, C и ядро.

Связанные материалы