В чём разница между контролируемым и неконтролируемым машинным обучением?
Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
В чём разница между контролируемым и неконтролируемым машинным обучением?
Это две фундаментальные парадигмы машинного обучения, которые отличаются наличием или отсутствием помеченных целевых переменных в обучающих данных.
Контролируемое обучение (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}")
Ключевые выводы
- Контролируемое — для задач предсказания (когда знаем, что предсказывать)
- Неконтролируемое — для исследования и открытия новых закономерностей
- На практике часто комбинируют — сначала кластеризация, потом классификация
- Качество разметки — критично для контролируемого обучения
- Интерпретация — проще для контролируемого, сложнее для неконтролируемого
Выбор парадигмы зависит от вашей задачи, доступных данных и целей анализа.