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

Какие знаешь классические задачи машинного обучения?

2.0 Middle🔥 201 комментариев
#Машинное обучение

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

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

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

Классические задачи машинного обучения

Машинное обучение включает множество категорий задач, каждая с собственными методами, метриками и вызовами. Data Scientist должен хорошо понимать эти классические проблемы, так как большинство реальных проектов — это либо одна из них, либо их комбинация. Рассмотрим основные типы с примерами и решениями.

1. Классификация (Classification)

Предсказание дискретной категории на основе признаков.

Бинарная классификация

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

# Загружаем данные (есть ли рак)
X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Логистическая регрессия
model = LogisticRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

# Метрики
print(f"Accuracy: {accuracy_score(y_test, y_pred):.3f}")
print(f"Precision: {precision_score(y_test, y_pred):.3f}")
print(f"Recall: {recall_score(y_test, y_pred):.3f}")
print(f"F1: {f1_score(y_test, y_pred):.3f}")

Многоклассовая классификация

from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import confusion_matrix, classification_report

# Ирисы (3 класса)
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

model = RandomForestClassifier(n_estimators=100)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))

Применение: Диагностика болезней, классификация email (спам/не спам), распознавание цифр

2. Регрессия (Regression)

Предсказание непрерывного значения.

Линейная регрессия

from sklearn.datasets import load_diabetes
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error

X, y = load_diabetes(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

model = LinearRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

print(f"R²: {r2_score(y_test, y_pred):.3f}")
print(f"RMSE: {np.sqrt(mean_squared_error(y_test, y_pred)):.3f}")
print(f"MAE: {mean_absolute_error(y_test, y_pred):.3f}")

Нелинейная регрессия

from sklearn.ensemble import GradientBoostingRegressor

model = GradientBoostingRegressor(
    n_estimators=100,
    learning_rate=0.1,
    max_depth=3
)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

Применение: Прогноз цен на жилье, предсказание спроса, прогноз акций

3. Кластеризация (Clustering)

Группировка схожих объектов без предварительно известных меток.

from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans, DBSCAN
from sklearn.metrics import silhouette_score

# Генерируем данные
X, y_true = make_blobs(n_samples=300, n_features=2, centers=3, random_state=42)

# K-Means
kmeans = KMeans(n_clusters=3, random_state=42)
labels = kmeans.fit_predict(X)

print(f"Silhouette Score: {silhouette_score(X, labels):.3f}")

# DBSCAN (находит кластеры произвольной формы)
dbscan = DBSCAN(eps=0.5, min_samples=5)
labels = dbscan.fit_predict(X)

Применение: Сегментация клиентов, анализ социальных сетей, обнаружение аномалий

4. Снижение размерности (Dimensionality Reduction)

Сжатие данных с сохранением информации.

from sklearn.decomposition import PCA, TSNE
from sklearn.datasets import load_digits

X = load_digits().data  # 1797 samples, 64 features

# PCA (линейное)
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
print(f"Объяснённая дисперсия: {pca.explained_variance_ratio_.sum():.3f}")

# t-SNE (нелинейное, для визуализации)
tsne = TSNE(n_components=2, perplexity=30)
X_tsne = tsne.fit_transform(X)

# Визуализируем
import matplotlib.pyplot as plt
plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=load_digits().target, cmap='viridis')
plt.show()

Применение: Визуализация данных, шумоподавление, сжатие

5. Обнаружение аномалий (Anomaly Detection)

Поиск выбросов и необычных паттернов.

from sklearn.ensemble import IsolationForest
from sklearn.preprocessing import StandardScaler

X = np.random.randn(1000, 2)
X = np.vstack([X, [[5, 5], [5, 5.5]]])  # Добавляем выбросы

X_scaled = StandardScaler().fit_transform(X)

# Isolation Forest
model = IsolationForest(contamination=0.01)  # 1% выбросов
anomalies = model.fit_predict(X_scaled)

print(f"Найдено аномалий: {(anomalies == -1).sum()}")

Применение: Обнаружение мошенничества, детектирование сбоев, киберзащита

6. Рекомендательные системы (Recommendation Systems)

Предсказание предпочтений пользователей.

from sklearn.metrics.pairwise import cosine_similarity

# Матрица user-item
ratings = np.array([
    [5, 0, 3, 0],  # User 1
    [4, 0, 0, 2],  # User 2
    [0, 3, 4, 0],  # User 3
    [1, 5, 0, 0]   # User 4
])

# Similarity между пользователями
similarity = cosine_similarity(ratings)

# Рекомендуем item для User 1
user_idx = 0
similar_users = np.argsort(similarity[user_idx])[::-1][1:]

# Средняя оценка от похожих пользователей
recommendations = np.mean(
    ratings[similar_users],
    axis=0
)

Применение: Netflix, Amazon, YouTube recommendations

7. Обработка последовательностей (Sequence Modeling)

Времённые ряды и текстовые последовательности.

from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense

# Временной ряд (например, цена акции)
data = np.array([100, 102, 103, 105, 104, 106, 108, 110, 109, 112])

# Подготовка (создаём окна)
def create_sequences(data, window_size=3):
    X, y = [], []
    for i in range(len(data) - window_size):
        X.append(data[i:i+window_size])
        y.append(data[i+window_size])
    return np.array(X), np.array(y)

X, y = create_sequences(data, window_size=3)

# LSTM модель
model = Sequential([
    LSTM(50, input_shape=(3, 1)),
    Dense(1)
])
model.compile(optimizer='adam', loss='mse')
model.fit(X.reshape(-1, 3, 1), y, epochs=100, verbose=0)

# Предсказание
future = model.predict(np.array([[[108], [110], [109]]]))

Применение: Прогноз погоды, анализ акций, предсказание спроса

8. Обучение с подкреплением (Reinforcement Learning)

Обучение через взаимодействие с окружением.

import gymnasium as gym
from collections import defaultdict

env = gym.make('Taxi-v3')

# Q-Learning
Q = defaultdict(lambda: [0.0] * env.action_space.n)
learning_rate = 0.1
gamma = 0.9
epsilon = 0.1

for episode in range(1000):
    state, _ = env.reset()
    done = False
    
    while not done:
        # Epsilon-greedy
        if np.random.random() < epsilon:
            action = env.action_space.sample()
        else:
            action = np.argmax(Q[state])
        
        next_state, reward, done, _, _ = env.step(action)
        
        # Q-Learning update
        Q[state][action] += learning_rate * (
            reward + gamma * np.max(Q[next_state]) - Q[state][action]
        )
        
        state = next_state

Применение: Автономные машины, игровой AI, управление ресурсами

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

ЗадачаВходные данныеВыходные данныеМетрикиПримеры
КлассификацияПризнакиДискретный классAccuracy, F1, AUCEmail spam detection
РегрессияПризнакиНепрерывное значениеMSE, R², MAEHouse price prediction
КластеризацияПризнакиГруппыSilhouette, Davies-BouldinCustomer segmentation
АномалииПризнакиНормальное/АномальноеPrecision, RecallFraud detection
РекомендацииUser-item матрицаРекомендуемые itemsRMSE, Recall@KNetflix recommendations
Seq2SeqПоследовательностьПоследовательностьBLEU, ROUGEMachine translation

Выбор алгоритма (Decision Tree)

Есть ли метки?
├─ ДА: Supervised Learning
│  ├─ Дискретный выход?
│  │  ├─ ДА: КЛАССИФИКАЦИЯ → LogReg, SVM, RF, XGBoost
│  │  └─ НЕТ: РЕГРЕССИЯ → LinearReg, SVR, GradBoost
│
└─ НЕТ: Unsupervised Learning
   ├─ Найти группы?
   │  ├─ ДА: КЛАСТЕРИЗАЦИЯ → K-Means, DBSCAN, Hierarchical
   │  └─ НЕТ: СНИЖЕНИЕ РАЗМЕРНОСТИ → PCA, t-SNE, Autoencoder

Практический совет

Начинайте с простых базовых моделей перед усложнением:

# 1. Baseline (очень простой)
from sklearn.dummy import DummyClassifier
baseline = DummyClassifier(strategy='most_frequent')
baseline.fit(X_train, y_train)
print(f"Baseline accuracy: {baseline.score(X_test, y_test)}")

# 2. Простой (Logistic Regression / Linear Regression)
from sklearn.linear_model import LogisticRegression
simple = LogisticRegression()
simple.fit(X_train, y_train)
print(f"Simple model accuracy: {simple.score(X_test, y_test)}")

# 3. Сложный (XGBoost)
from xgboost import XGBClassifier
complex_model = XGBClassifier(n_estimators=100)
complex_model.fit(X_train, y_train)
print(f"Complex model accuracy: {complex_model.score(X_test, y_test)}")

Эти восемь классических задач охватывают 99% реальных проектов машинного обучения. Глубокое понимание каждой — это основа для эффективной работы Data Scientist.

Какие знаешь классические задачи машинного обучения? | PrepBro