В чем разница между обучением с учителем и обучением без учителя?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Разница между supervised и unsupervised обучением
Это две фундаментально разные парадигмы машинного обучения, выбор между которыми зависит от наличия размеченных данных и цели задачи.
Основное отличие
Supervised Learning (Обучение с учителем):
- Имеем размеченные данные: (X, y) пары
- y — целевой результат (label)
- Модель учится предсказывать y по X
- Есть правильный ответ для проверки
Unsupervised Learning (Обучение без учителя):
- Имеем только данные X (без y)
- Нет целевого результата
- Модель ищет скрытые паттерны, структуру
- Нет правильного ответа — только интерпретация
Данные и обозначения
Supervised:
# (признак, целевая переменная)
# Пример: (возраст, зарплата), (дом, цена), (письмо, спам/не спам)
data = [
([25, male, engineer], 50000), # X=[возраст, пол, профессия], y=зарплата
([35, female, doctor], 80000),
([45, male, manager], 120000),
]
X = [[25, 1, 2], [35, 0, 3], [45, 1, 4]] # Признаки
y = [50000, 80000, 120000] # Целевые значения
Unsupervised:
# Только признаки, нет целевой переменной
data = [
[25, male, engineer], # Просто данные
[35, female, doctor], # Нет целевого значения
[45, male, manager],
]
X = [[25, 1, 2], [35, 0, 3], [45, 1, 4]] # Признаки
# y = ??? # Нечего предсказывать
Основные типы задач
Supervised Learning:
-
Классификация — предсказать категорию
# Предсказать спам (1) или не спам (0) # Предсказать класс цветка (setosa, versicolor, virginica) # Предсказать болезнь (здоров, диабет, гипертония) -
Регрессия — предсказать число
# Предсказать цену дома # Предсказать температуру завтра # Предсказать количество продаж
Unsupervised Learning:
-
Кластеризация — сгруппировать похожие объекты
# Найти группы клиентов с похожим поведением # Сегментировать пациентов на подгруппы # Найти сообщества в социальной сети -
Понижение размерности — сжать данные, сохраняя информацию
# PCA: сжать 1000 признаков в 10 # Автокодировщик: найти скрытые представления # Embedding: представить слова в 300D пространстве -
Поиск аномалий — найти необычные объекты
# Найти мошенничество в транзакциях # Выявить отказывающие серверы # Обнаружить дефекты в продукции
Примеры с кодом
Supervised: Классификация спама
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix
# Размеченные данные: письма и метки спам/не спам
X = [[word_count, has_links, sender_reputation], ...] # Признаки
y = [0, 1, 0, 1, ...] # 0=не спам, 1=спам
X_train, X_test, y_train, y_test = train_test_split(X, y)
# Обучение: модель учится предсказывать y
model = RandomForestClassifier()
model.fit(X_train, y_train) # Учим на размеченных данных
# Оценка: сравниваем предсказания с истинными метками
pred = model.predict(X_test)
accuracy = accuracy_score(y_test, pred) # Есть истинные y_test!
print(f"Accuracy: {accuracy:.4f}")
Unsupervised: Кластеризация клиентов
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
# БЕЗ целевой переменной: только признаки
X = [
[age, income, purchase_frequency],
[25, 40000, 5],
[45, 120000, 25],
[30, 50000, 8],
...
]
# y = ??? # Нет целевого значения
# Нормализуем
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# Кластеризация: ищем структуру в данных
kmeans = KMeans(n_clusters=3)
labels = kmeans.fit_predict(X_scaled) # Вернёт [0, 1, 0, 2, 1, ...]
# Кластеры 0, 1, 2 — это мы нашли, а не истинные метки!
print(f"Клиент 0 принадлежит кластеру {labels[0]}")
# Интерпретируем: кластер 0 = молодые, кластер 1 = состоятельные, и т.п.
Сравнение характеристик
| Параметр | Supervised | Unsupervised |
|---|---|---|
| Данные | (X, y) пары | Только X |
| Цель | Предсказать y | Найти паттерны в X |
| Оценка | Четкая метрика (accuracy, MSE) | Субъективная, сложно оценить |
| Примеры | Классификация, регрессия | Кластеризация, dim reduction |
| Данные | Требует разметки (дорого) | Не требует разметки |
| Результат | Модель для предсказания | Понимание структуры |
| Практика | 80% реальных ML задач | 20% реальных ML задач |
Оценка качества
Supervised (есть правильные ответы y_test):
from sklearn.metrics import accuracy_score, precision_recall_fscore_support, r2_score, mean_squared_error
# Классификация
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
precision, recall, f1, _ = precision_recall_fscore_support(y_test, y_pred)
print(f"Accuracy: {accuracy}, Precision: {precision}, F1: {f1}")
# Регрессия
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"MSE: {mse}, R²: {r2}")
Unsupervised (нет истинных ответов):
from sklearn.metrics import silhouette_score, davies_bouldin_score
# Оцениваем качество кластеризации
labels = kmeans.labels_
# Silhouette (чем выше, тем лучше: -1 до 1)
sil_score = silhouette_score(X, labels)
print(f"Silhouette Score: {sil_score:.4f}")
# Davies-Bouldin (чем ниже, тем лучше: >= 0)
db_score = davies_bouldin_score(X, labels)
print(f"Davies-Bouldin Score: {db_score:.4f}")
# Но это всё равно не идеально — нет истинных меток!
Полу-supervised обучение (гибрид)
Когда данных мало, но есть много неразмеченных:
# 100 размеченных примеров + 10000 неразмеченных
# Self-training: модель учится на размеченных,
# потом предсказывает метки для неразмеченных
from sklearn.semi_supervised import SelfTrainingClassifier
X_labeled = small_labeled_dataset # 100 примеров
y_labeled = labels_for_labeled
X_unlabeled = large_unlabeled_dataset # 10000 примеров
# Объединяем
X_all = np.vstack([X_labeled, X_unlabeled])
y_all = np.hstack([y_labeled, [-1]*len(X_unlabeled)]) # -1 = неразмеченный
# Self-training: модель предсказывает метки для неразмеченных
base_classifier = RandomForestClassifier()
self_train = SelfTrainingClassifier(base_classifier)
self_train.fit(X_all, y_all)
Практические примеры
Supervised (классификация): Диагностика болезней
# Размеченные данные: (симптомы) → диагноз
X = [[temperature, cough, fatigue, ...], ...] # 1000 пациентов
y = ['flu', 'covid', 'cold', 'healthy', ...] # Истинные диагнозы
# Обучение
model = LogisticRegression()
model.fit(X, y)
# Использование: врач видит точность 95% и доверяет модели
accuracy = cross_val_score(model, X, y, cv=5).mean()
print(f"Средняя точность: {accuracy:.4f}")
Supervised (регрессия): Предсказание цены дома
# Размеченные данные: (характеристики) → цена
X = [[square_feet, bedrooms, location, ...], ...] # 5000 домов
y = [200000, 350000, 450000, ...] # Истинные цены
model = XGBRegressor()
model.fit(X, y)
# Оценка
mae = mean_absolute_error(y_test, model.predict(X_test))
print(f"Средняя ошибка: {mae:.2f} долларов")
Unsupervised (кластеризация): Сегментация клиентов
# Нет целевого значения — только поведение
X = [[purchase_amount, frequency, time_as_customer, ...], ...] # 10000 клиентов
kmeans = KMeans(n_clusters=5)
labels = kmeans.fit_predict(X)
# Интерпретируем кластеры
for cluster in range(5):
members = X[labels == cluster]
print(f"Кластер {cluster}:")
print(f" Средняя покупка: ${members[:, 0].mean():.2f}")
print(f" Частота: {members[:, 1].mean():.1f}x/год")
Таблица сравнения методов
| Метод | Тип | Supervised | Unsupervised |
|---|---|---|---|
| K-Means | Кластеризация | ❌ | ✅ |
| Decision Tree | Классификация | ✅ | ❌ |
| PCA | Снижение размерности | ❌ | ✅ |
| Linear Regression | Регрессия | ✅ | ❌ |
| DBSCAN | Кластеризация | ❌ | ✅ |
| Random Forest | Классификация/Регрессия | ✅ | ❌ |
| Autoencoders | Снижение размерности | ❌ | ✅ |
| Gradient Boosting | Классификация/Регрессия | ✅ | ❌ |
| Anomaly Detection | Поиск аномалий | ❌ | ✅ |
| SVM | Классификация | ✅ | ❌ |
Итого: Supervised обучение (80% реальных задач) решает проблемы предсказания с размеченными данными. Unsupervised (20%) находит структуру в неразмеченных данных, используется для探索ации, сегментации и понижения размерности.