Обзор алгоритмов классификации
Три рабочие лошадки классификации — интуиция по каждой без формул.
Алгоритмов классификации много, но новичку достаточно понимать три базовых. У каждого своя простая идея. Разберём интуицию, а в следующем уроке kNN потрогаем руками.
kNN — метод ближайших соседей
kNN (k Nearest Neighbors) — относит объект к тому классу, который преобладает среди его k ближайших соседей.
Идея до смешного простая: «скажи мне, кто твои соседи, и я скажу, кто ты». Чтобы классифицировать новую точку, модель находит k ближайших к ней объектов из обучающих данных и смотрит, какого класса среди них большинство.
- Плюсы: очень понятный, не требует «обучения» в привычном смысле.
- Минусы: медленный на больших данных (надо считать расстояния до всех точек), чувствителен к масштабу признаков.
Логистическая регрессия
Логистическая регрессия — несмотря на слово «регрессия», это классификатор: он оценивает вероятность класса и проводит прямую границу.
Она берёт взвешенную сумму признаков (как линейная регрессия) и пропускает её через специальную функцию, которая сжимает результат в диапазон от 0 до 1 — это и есть вероятность класса. Граница решения получается прямой.
- Плюсы: быстрая, выдаёт вероятности, легко интерпретировать вклад признаков.
- Минусы: только прямая граница — не справится со сложно переплетёнными классами.
Деревья решений
Дерево решений — серия вопросов «да/нет» по признакам, ведущая к ответу, как блок-схема.
Дерево задаёт вопросы по очереди: «Возраст больше 30? → Доход больше 50к? → ...» и в листе выдаёт класс. Это очень наглядно: путь решения можно прочитать словами. Деревья ловят нелинейные зависимости, но одно глубокое дерево легко переобучается, поэтому на практике часто объединяют много деревьев (случайный лес, бустинг).
# Крошечное "дерево решений" руками: одобрить кредит?
def decision_tree(age, income):
if income >= 50:
return "одобрить"
else:
if age >= 30:
return "одобрить"
else:
return "отказать"
cases = [(25, 40), (35, 40), (28, 60), (40, 70)]
for age, income in cases:
print(f"возраст={age}, доход={income} -> {decision_tree(age, income)}")
Вывод:
возраст=25, доход=40 -> отказать возраст=35, доход=40 -> одобрить возраст=28, доход=60 -> одобрить возраст=40, доход=70 -> одобрить
Какой выбрать
| Алгоритм | Идея | Когда хорош |
| kNN | Голосование соседей | Мало данных, понятная геометрия |
| Логистическая регрессия | Прямая граница + вероятности | Линейно разделимые классы, нужна интерпретация |
| Дерево решений | Вопросы «да/нет» | Нелинейные зависимости, нужна наглядность |
На практике редко знают заранее, какой метод лучше, — пробуют несколько и сравнивают по метрикам на тестовых данных. Благодаря единому интерфейсу scikit-learn это быстро.
Итог
- kNN классифицирует по большинству среди ближайших соседей.
- Логистическая регрессия — классификатор с прямой границей и вероятностями.
- Дерево решений — цепочка вопросов «да/нет», наглядная и нелинейная.
- Лучший метод обычно выбирают экспериментом, сравнивая на тестовых данных.