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

В чем разница между обучением с учителем и обучением без учителя?

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

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

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

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

Разница между 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. Классификация — предсказать категорию

    # Предсказать спам (1) или не спам (0)
    # Предсказать класс цветка (setosa, versicolor, virginica)
    # Предсказать болезнь (здоров, диабет, гипертония)
    
  2. Регрессия — предсказать число

    # Предсказать цену дома
    # Предсказать температуру завтра
    # Предсказать количество продаж
    

Unsupervised Learning:

  1. Кластеризация — сгруппировать похожие объекты

    # Найти группы клиентов с похожим поведением
    # Сегментировать пациентов на подгруппы
    # Найти сообщества в социальной сети
    
  2. Понижение размерности — сжать данные, сохраняя информацию

    # PCA: сжать 1000 признаков в 10
    # Автокодировщик: найти скрытые представления
    # Embedding: представить слова в 300D пространстве
    
  3. Поиск аномалий — найти необычные объекты

    # Найти мошенничество в транзакциях
    # Выявить отказывающие серверы
    # Обнаружить дефекты в продукции
    

Примеры с кодом

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 = состоятельные, и т.п.

Сравнение характеристик

ПараметрSupervisedUnsupervised
Данные(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/год")

Таблица сравнения методов

МетодТипSupervisedUnsupervised
K-MeansКластеризация
Decision TreeКлассификация
PCAСнижение размерности
Linear RegressionРегрессия
DBSCANКластеризация
Random ForestКлассификация/Регрессия
AutoencodersСнижение размерности
Gradient BoostingКлассификация/Регрессия
Anomaly DetectionПоиск аномалий
SVMКлассификация

Итого: Supervised обучение (80% реальных задач) решает проблемы предсказания с размеченными данными. Unsupervised (20%) находит структуру в неразмеченных данных, используется для探索ации, сегментации и понижения размерности.

В чем разница между обучением с учителем и обучением без учителя? | PrepBro