Какие основные формулы линейных моделей в машинном обучении вы знаете?

Ответ

Линейные модели основаны на предположении о линейной зависимости между признаками и целевой переменной. Основные формулы:

  1. Линейная регрессия: y = β₀ + β₁x₁ + β₂x₂ + ... + βₙxₙ + ε

    • y — предсказываемое значение (целевая переменная).
    • β₀ — свободный член (intercept).
    • β₁...βₙ — коэффициенты (веса) признаков.
    • x₁...xₙ — независимые переменные (признаки).
    • ε — ошибка (шум), обычно предполагается нормально распределённой.
  2. Логистическая регрессия (для бинарной классификации): Использует логистическую (сигмоидную) функцию для преобразования линейной комбинации в вероятность. p(y=1 | x) = σ(z) = 1 / (1 + e^{-z}), где z = β₀ + β₁x₁ + ... + βₙxₙ

    • p(y=1 | x) — вероятность принадлежности к классу 1.
    • σ(z) — сигмоидная функция, отображающая z в интервал (0, 1).
  3. Функция потерь (MSE для регрессии): MSE = (1/n) * Σ(y_i - ŷ_i)² Минимизация MSE методом наименьших квадратов даёт аналитическое решение для β.

  4. Функция потерь (Log Loss для логистической регрессии): Log Loss = - (1/n) * Σ [y_i * log(p_i) + (1 - y_i) * log(1 - p_i)]

Практический пример с регуляризацией (scikit-learn):

from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler

# Масштабирование признаков для стабильности работы регуляризации
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)

# L1-регуляризация (Lasso) может обнулять коэффициенты, выполняя отбор признаков
model_l1 = LogisticRegression(penalty='l1', solver='liblinear', C=0.1)
model_l1.fit(X_train_scaled, y_train)
print("Коэффициенты (L1):", model_l1.coef_)

# L2-регуляризация (Ridge) уменьшает величину коэффициентов, но не обнуляет их
model_l2 = LogisticRegression(penalty='l2', C=1.0)
model_l2.fit(X_train_scaled, y_train)
print("Коэффициенты (L2):", model_l2.coef_)

Ключевой вывод: Несмотря на простоту, линейные модели с регуляризацией (L1/L2) часто являются сильным базовым решением, интерпретируемым и устойчивым к переобучению.

Ответ 18+ 🔞

А, линейные модели! Ну, классика жанра, ёпта. Типа, самый фундамент, на котором всё держится, как водка в пятницу. Представь, что твоя целевая переменная — это просто сумма всего, что на неё влияет, умноженная на какие-то веса. И всё, блядь. Никакой магии, чистая арифметика.

Вот смотри, как это выглядит, если на пальцах:

  1. Линейная регрессия (когда надо число предсказать): y = β₀ + β₁x₁ + β₂x₂ + ... + βₙxₙ + ε

    • y — это что мы хотим угадать. Цена квартиры, например.
    • β₀ — это типа базовый уровень. Стоимость голой земли, нахуй.
    • β₁...βₙ — вот это самое интересное. Насколько сильно каждый признак (метры, район, этаж) влияет на цену. Если коэффициент отрицательный — значит, признак цену хуярит, снижает.
    • x₁...xₙ — сами признаки. Площадь, удалённость от метро, год постройки.
    • ε — это наш родной русский шум, случайность, которую мы нихуя не можем объяснить. Типа, продавец просто в душе не ебёт и занизил цену.
  2. Логистическая регрессия (когда надо да/нет): Тут уже хитрая жопа. Мы не число предсказываем, а вероятность. Формула страшная, но суть простая: берём ту же самую линейную комбинацию (z), суём её в специальную S-образную функцию (сигмоиду), и она выдаёт число от 0 до 1. Это и есть шанс, что объект принадлежит к классу 1 (например, клиент купит). p(y=1 | x) = 1 / (1 + e^{-z}) Если p > 0.5 — говорим «да», если нет — «пошёл нахуй», то есть «нет». Всё гениальное — просто, как валенок.

  3. Как модель учится? А учится она на ошибках, как и все мы! Для регрессии есть функция MSE — средний квадрат ошибок. Она считает, насколько наши предсказания ŷ отъехали от реальных значений y. Задача модели — ёбнуть эти ошибки в ноль, то есть минимизировать MSE. Иногда для этого есть красивое аналитическое решение (как в школе решить уравнение), иногда — итеративные методы.

    Для логистической регрессии — Log Loss. Она сурово наказывает модель за уверенность в неверном ответе. Сказала, что с вероятностью 99% клиент купит, а он нихуя — получай по шапке от функции потерь.

А теперь самое вкусное — регуляризация. Это чтобы наша модель не начала выёбываться и подстраиваться под каждую соплю в обучающих данных (это называется переобучение, и оно — пиздец).

Смотри код, тут всё наглядно:

from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler

# Признаки сначала масштабируем, чтобы регуляризация их всех равноправно ебала, а не только тех, у кого значения больше.
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)

# L1-регуляризация (Lasso). Она как строгий отец: "Слабые признаки — нахуй с пляжа!" Может обнулить коэффициент, если признак бесполезен.
model_l1 = LogisticRegression(penalty='l1', solver='liblinear', C=0.1)
model_l1.fit(X_train_scaled, y_train)
print("Коэффициенты (L1):", model_l1.coef_) # Тут будут нули, это отбор признаков!

# L2-регуляризация (Ridge). Она как добрая мать: "Все вы важны, детки, но ведите себя потише". Коэффициенты не обнуляет, но делает их поменьше, сглаживает.
model_l2 = LogisticRegression(penalty='l2', C=1.0)
model_l2.fit(X_train_scaled, y_train)
print("Коэффициенты (L2):", model_l2.coef_) # Тут нулей не будет, но числа будут скромные.

Итог, чувак: Не гонись сразу за нейросетями в 500 слоёв. Часто эта манда с ушами — обычная логистическая регрессия с L1-регуляризацией — даст результат не хуже, а то и лучше, да ещё и объяснить можно будет, какого хуя она так решила. Простота — не всегда глупость, иногда это просто гениальная простота.