← Назад к вопросам

В чём разница между контролируемым и неконтролируемым машинным обучением?

1.0 Junior🔥 262 комментариев
#Машинное обучение

Комментарии (2)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

В чём разница между контролируемым и неконтролируемым машинным обучением?

Это две фундаментальные парадигмы машинного обучения, которые отличаются наличием или отсутствием помеченных целевых переменных в обучающих данных.

Контролируемое обучение (Supervised Learning)

Определение: модель обучается на размеченном датасете, где каждый пример имеет входные признаки (X) и соответствующую целевую переменную (y).

Примеры задач:

  • Классификация (Classification)
  • Регрессия (Regression)
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestClassifier

# Контролируемое обучение: регрессия
# X — входные признаки, y — целевая переменная (есть ответы!)
X = np.array([[2104, 5], [1600, 3], [2400, 5], [1416, 2]])  # площадь, комнаты
y = np.array([399, 321, 424, 250])  # цена дома

# Обучение
model = LinearRegression()
model.fit(X, y)

# Предсказание на новых данных
prediction = model.predict([[2000, 4]])
print(f"Предсказанная цена: {prediction[0]}")  # [380.5]

# Классификация
from sklearn.datasets import load_iris

iris = load_iris()
X_iris = iris.data
y_iris = iris.target  # 0, 1, 2 (три класса цветков)

X_train, X_test, y_train, y_test = train_test_split(X_iris, y_iris)
clf = RandomForestClassifier()
clf.fit(X_train, y_train)
accuracy = clf.score(X_test, y_test)
print(f"Точность: {accuracy:.2%}")

Преимущества:

  • Модель обучается быстро и эффективно
  • Можно оценить качество на тестовом наборе
  • Хорошо проверен и понят

Недостатки:

  • Требует дорогостоящую разметку данных
  • Может быть предвзятым, если разметка некачественна
  • Не может открыть неожиданные закономерности

Неконтролируемое обучение (Unsupervised Learning)

Определение: модель обучается на немеченом датасете, где цель — обнаружить скрытые закономерности, структуру или группировку в данных.

Примеры задач:

  • Кластеризация (Clustering)
  • Снижение размерности (Dimensionality Reduction)
  • Выявление выбросов (Anomaly Detection)
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

# Неконтролируемое обучение: кластеризация
# X — только признаки, y НЕТ!
X_no_label = np.array([
    [2, 3],
    [2.5, 2.8],
    [8, 8],
    [8.5, 8],
    [7.9, 8.2]
])

# K-Means кластеризация
kmeans = KMeans(n_clusters=2, random_state=42)
clusters = kmeans.fit_predict(X_no_label)
print(f"Назначенные кластеры: {clusters}")  # [0, 0, 1, 1, 1]

# Центры кластеров (найдены автоматически!)
print(f"Центры кластеров:\n{kmeans.cluster_centers_}")

# Снижение размерности: PCA
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X_no_label)

pca = PCA(n_components=1)
X_reduced = pca.fit_transform(X_scaled)
print(f"Данные после PCA:\n{X_reduced}")

# DBSCAN для кластеризации переменного размера
from sklearn.cluster import DBSCAN

dbscan = DBSCAN(eps=1.5, min_samples=2)
clusters_db = dbscan.fit_predict(X_no_label)
print(f"DBSCAN кластеры: {clusters_db}")

Преимущества:

  • Не требует разметки — экономит деньги и время
  • Может обнаружить скрытые закономерности
  • Хороша для exploratory data analysis

Недостатки:

  • Сложнее оценить качество результатов
  • Требует больше вычислительных ресурсов
  • Интерпретация результатов часто субъективна

Сравнительная таблица

ХарактеристикаКонтролируемоеНеконтролируемое
ДанныеРазмеченные (X, y)Немеченые (только X)
ЦельПредсказание y по XНайти скрытые паттерны
ПримерыРегрессия, классификацияКластеризация, PCA
РазметкаТребуется дорогая разметкаНе требуется
ОценкаЛегко: accuracy, precisionСложно: силуэты, коленный метод
Скорость обученияБыстроМедленнее
ПрименениеПредсказание кредитов, диагностикаСегментация клиентов

Примеры из практики

Контролируемое обучение:

# Предсказание оттока клиентов
# X: возраст, доход, месяцы подписки
# y: 0 (не ушел) или 1 (ушел)
X_churn = [[25, 30000, 6], [45, 50000, 36], [35, 40000, 12]]
y_churn = [1, 0, 0]

clf = RandomForestClassifier()
clf.fit(X_churn, y_churn)
prob_churn = clf.predict_proba([[30, 35000, 9]])
print(f"Вероятность оттока: {prob_churn[0][1]:.2%}")

Неконтролируемое обучение:

# Сегментация клиентов по поведению покупок
# X: сумма покупок, частота, среднее значение заказа
X_customers = [
    [5000, 20, 250],   # VIP
    [15000, 50, 300],  # VIP
    [500, 5, 100],     # Casual
    [600, 4, 150],     # Casual
]

kmeans = KMeans(n_clusters=2)
segments = kmeans.fit_predict(X_customers)
print(f"Сегменты клиентов: {segments}")
# Автоматически разделены на VIP и Casual без предварительной разметки!

# Обнаружение выбросов (аномалий)
from sklearn.ensemble import IsolationForest

X_transactions = [[100], [150], [120], [5000]]  # последняя — аномалия
iso_forest = IsolationForest(contamination=0.25)
anomalies = iso_forest.fit_predict(X_transactions)
print(f"Выбросы: {anomalies}")  # [-1, 1, 1, -1]

Полу-контролируемое обучение (Semi-Supervised)

Гибридный подход, когда есть малое количество размеченных данных и большое количество немеченых:

from sklearn.semi_supervised import LabelSpreading

# Большинство данных без меток (-1)
X_semi = np.array([[2, 3], [8, 8], [2.5, 2.8], [8.5, 8]])
y_semi = np.array([0, 1, -1, -1])  # только первые два размечены

label_spread = LabelSpreading()
y_predicted = label_spread.fit_predict(X_semi, y_semi)
print(f"Предсказанные метки: {y_predicted}")

Ключевые выводы

  1. Контролируемое — для задач предсказания (когда знаем, что предсказывать)
  2. Неконтролируемое — для исследования и открытия новых закономерностей
  3. На практике часто комбинируют — сначала кластеризация, потом классификация
  4. Качество разметки — критично для контролируемого обучения
  5. Интерпретация — проще для контролируемого, сложнее для неконтролируемого

Выбор парадигмы зависит от вашей задачи, доступных данных и целей анализа.

В чём разница между контролируемым и неконтролируемым машинным обучением? | PrepBro