Ответ
Классификация и Регрессия — два основных типа задач обучения с учителем (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 — будет старательно цифры подбирать. Ядрёна вошь, как удобно!
Так что запомни: если выбор из списка — классифицируешь. Если надо число назвать — регрессируешь. И не бзди, что всё сложно.