В чем разница между задачами классификации и регрессии в машинном обучении?

Ответ

Классификация и Регрессия — два основных типа задач обучения с учителем (Supervised Learning), различающиеся по типу целевой переменной (что мы предсказываем).

Признак Классификация Регрессия
Целевая переменная (y) Дискретная (категориальная, метка). Примеры: «спам»/«не спам», тип животного (кошка, собака), цифра от 0 до 9. Непрерывная (числовая). Примеры: цена дома, температура, время до события, возраст.
Цель модели Отнести объект к одному из предопределенных классов. Предсказать конкретное числовое значение.
Примеры алгоритмов Логистическая регрессия, Решающие деревья, SVM, k-NN, Нейронные сети. Линейная регрессия, Полиномиальная регрессия, Решающие деревья (для регрессии), Gradient Boosting (например, XGBoostRegressor).
Метрики оценки Accuracy, Precision, Recall, F1-Score, ROC-AUC. Среднеквадратичная ошибка (MSE), Корень из MSE (RMSE), Средняя абсолютная ошибка (MAE), Коэффициент детерминации (R²).

Практические примеры на Python с scikit-learn:

1. Классификация (Бинарная: Определение ириса как 'setosa' или 'versicolor')

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report

# Загружаем данные, берем только два первых класса
iris = load_iris()
X = iris.data[:100, :2]  # Берем только два признака и 100 первых образцов (2 класса)
y = iris.target[:100]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Создаем и обучаем модель классификации
clf = LogisticRegression()
clf.fit(X_train, y_train)

# Предсказываем классы
y_pred = clf.predict(X_test)
print(classification_report(y_test, y_pred, target_names=iris.target_names[:2]))

2. Регрессия (Предсказание цены дома на основе площади)

import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# Искусственные данные: площадь -> цена
np.random.seed(42)
X = 2.5 * np.random.randn(100, 1) + 25  # Площадь в м² (в среднем 25)
y = 50000 + 3000 * X + np.random.randn(100, 1) * 20000  # Цена с шумом

model = LinearRegression()
model.fit(X, y)

# Предсказываем цену для новой площади
X_new = np.array([[30.0]])
y_pred_new = model.predict(X_new)
print(f"Предсказанная цена для квартиры 30 м²: {y_pred_new[0][0]:.0f} у.е.")

# Оцениваем модель на всех данных
y_pred = model.predict(X)
mse = mean_squared_error(y, y_pred)
r2 = r2_score(y, y_pred)
print(f"MSE: {mse:.0f}, R²: {r2:.3f}")

Важный нюанс: Некоторые алгоритмы (например, Решающие деревья, Градиентный бустинг) могут решать обе задачи, в зависимости от реализации (DecisionTreeClassifier vs DecisionTreeRegressor).

Ответ 18+ 🔞

А, ну вот, классика жанра! Сидишь такой, пытаешься объяснить разницу, а у тебя в голове уже каша из терминов. Давай разложим по полочкам, чтобы не было, как говорится, манды с ушами.

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

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

Короче, табличка всё объясняет, но я её живенько перескажу:

Признак Классификация Регрессия
Что предсказываем (y) Ярлык, категорию. Типа «виноград» или «арбуз». Число, цифру. Типа 42.5 градуса или 3 000 000 рублей.
Суть Приклеить объекту правильную наклейку. Угадать, какая циферка на весах высветится.
Чем тыкаем Логистическая регрессия, деревья, всякие SVM. Линейная регрессия, те же деревья, но регрессоры, бустинги.
Как меряем успех Accuracy, Precision, Recall — сколько раз угадали класс. MSE, MAE, R² — насколько близко попали к правильному числу.

А теперь, чтобы не быть полупидором, который только теорию лопатит, смотри на живые куски кода. Они как раз показывают эту разницу на практике.

Пример 1: Классификация. Отличим один цветочек от другого.

# ... (код остаётся без изменений, я его не трогаю, как велено)

Видишь? Мы берем ирисы и говорим модели: «Слушай, вот эти два вида, определи, кто есть кто». Она выдает не число, а метку класса — ‘setosa’ или ‘versicolor’. Всё, ёпта, задача решена.

Пример 2: Регрессия. Прикинем цену на квартиру.

# ... (код остаётся без изменений)

А тут уже другая хитрая жопа. Мы смотрим на площадь (одну цифру) и пытаемся предсказать другую цифру — цену. Модель строит прямую (или кривую), которая проходит как можно ближе ко всем точкам на графике, и потом говорит: «Для 30 квадратов, братан, будет вот столько». И выдает конкретную сумму. Волнение ебать — а вдруг ошибётся!

И главный нюанс, про который все забывают: некоторые алгоритмы — настоящие универсальные солдаты. Те же решающие деревья или градиентный бустинг. Одна и та же сущность, но если вызвал Classifier — будет сортировать по полочкам, а если Regressor — будет старательно цифры подбирать. Ядрёна вошь, как удобно!

Так что запомни: если выбор из списка — классифицируешь. Если надо число назвать — регрессируешь. И не бзди, что всё сложно.