Условие
Объясните, чем линейная логистическая регрессия отличается от линейного SVM. Когда какую модель выбрать? Какие гиперпараметры важны? Что общего и в чём разница в loss-функциях?
Решение
Общее
Оба ищут разделяющую гиперплоскость w·x + b = 0. Отличаются loss-функцией:
| Loss | Что минимизируют | |
|---|---|---|
| Логрег | −y log p − (1−y) log(1−p) (cross-entropy) |
максимизируют правдоподобие Бернулли |
| Линейный SVM | max(0, 1 − y · (w·x + b)) (hinge loss) |
maximum-margin, штраф только за ошибки и точки внутри margin |
Оба добавляют L2-регуляризацию: + λ ||w||².
Геометрия
- Логрег: гладкая sigmoid
p = σ(w·x + b). Каждая точка влияет на решение, дальние влияют слабо (sigmoid плоский). - SVM: hinge — кусочно-линейный, не дифференцируем в точке. Только точки внутри margin (support vectors) определяют гиперплоскость.
Loss-функции — сравнение
hinge: max(0, 1 - y·f(x))
log-loss: log(1 + exp(-y·f(x))) // где y ∈ {-1, +1}
0-1 loss: I[y · f(x) < 0] (не используется — недифференцируема)
- hinge = 0 для правильно классифицированных вне margin (margin = 1).
- log-loss всегда > 0, штраф даже за уверенно правильные (но маленький).
Когда какую выбрать
Логрег лучше, когда:
- Нужны вероятности (
p(y=1|x)), а не только класс. - Калибровка важна (скоринг).
- Малая выборка / много фич (L1 даёт интерпретируемость).
- Нужна Bayesian интерпретация.
SVM лучше, когда:
- Только классификация (вероятности не нужны).
- Нелинейные границы через kernel trick (RBF, polynomial).
- Малая обучающая выборка (margin-based интуиция).
- Сильный outlier-resistant behavior за счёт hinge.
Гиперпараметры
Логрег (sklearn):
C— обратная регуляризация (C = 1/λ).penalty:l1,l2,elasticnet,none.solver:liblinearдля L1 на маленьких;sagaдля больших.class_weight:'balanced'или dict.
SVM (LinearSVC / SVC):
C— то же.loss:hinge(классический) илиsquared_hinge.kernel(для SVC):linear,rbf,poly.gamma(для RBF): ширина RBF.
Производительность
- LinearSVC в sklearn использует
liblinear— почти как логрег по скорости, на больших данных оба ~ за секунды. - SVC с RBF — O(n² - n³) по обучению, не масштабируется > 50K строк.
- На > 1M строк — обычно логрег + хорошая feature engineering, либо градиентный бустинг.
Калибровка вероятностей SVM
SVM не выдаёт вероятностей нативно. SVC(probability=True) использует Platt scaling — отдельный fit логрега на decision function. Долго и не всегда хорошо. Лучше CalibratedClassifierCV.
Multi-class
- Логрег: нативно (softmax) через
multi_class='multinomial'. - SVM: one-vs-one (sklearn default) или one-vs-rest.
Пример
from sklearn.linear_model import LogisticRegression
from sklearn.svm import LinearSVC, SVC
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
logreg = Pipeline([
('sc', StandardScaler()),
('lr', LogisticRegression(C=1.0, penalty='l2', max_iter=2000))
])
svm = Pipeline([
('sc', StandardScaler()),
('svc', LinearSVC(C=1.0, loss='hinge', max_iter=5000))
])
# RBF SVM (только для малых N)
rbf = Pipeline([
('sc', StandardScaler()),
('svc', SVC(kernel='rbf', C=1.0, gamma='scale'))
])Чем в практике почти всегда выигрывает логрег
- Даёт вероятности → удобно для threshold tuning.
- Масштабируется до миллионов строк.
- L1-регуляризация делает sparse → интерпретация.
- Калибрована из коробки.
SVM редко используется в индустрии для табличных задач — её ниши заняты бустингами (для нелинейных) и логрег (для линейных).
Подводные камни
- SVM без StandardScaler — почти всегда катастрофа: фичи разных масштабов ломают margin.
SVC(probability=True)медленный и часто плохо откалиброван.Cинтерпретация перевёрнута относительно λ: большой C → слабая регуляризация.- Hinge loss на дисбалансе: точки большинства внутри margin вытесняют минор.
class_weight='balanced'обязателен. LinearSVCvsSVC(kernel='linear')— разные solver'ы, разная производительность; первый на больших данных.- Логрег с extreme imbalance:
class_weight='balanced'иначе модель «всё в большинство». - Multi-class one-vs-one в SVM на 100 классах = 4950 моделей — невозможно.
Эталонный ответ
| Логрег | Линейный SVM | |
|---|---|---|
| Loss | log-loss | hinge |
| Вероятности | да, калиброванные | нет (только через Platt) |
| Multi-class | softmax нативно | OvO/OvR |
| Outliers | чувствительна | устойчивее (hinge = 0 для верных) |
| Kernel | нет | да (RBF, poly в SVC) |
| Масштаб | миллионы | до 50К (RBF) |
В практике: логрег — почти всегда лучший выбор для табличных линейных задач (вероятности + масштабируемость). SVM остаётся для малых выборок с нелинейными границами через RBF. Для серьёзных нелинейных задач — бустинг.