Ответ
Классификация и Регрессия — два основных типа задач обучения с учителем (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).