Какие знаешь классические задачи машинного обучения?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Классические задачи машинного обучения
Машинное обучение включает множество категорий задач, каждая с собственными методами, метриками и вызовами. 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, AUC | Email spam detection |
| Регрессия | Признаки | Непрерывное значение | MSE, R², MAE | House price prediction |
| Кластеризация | Признаки | Группы | Silhouette, Davies-Bouldin | Customer segmentation |
| Аномалии | Признаки | Нормальное/Аномальное | Precision, Recall | Fraud detection |
| Рекомендации | User-item матрица | Рекомендуемые items | RMSE, Recall@K | Netflix recommendations |
| Seq2Seq | Последовательность | Последовательность | BLEU, ROUGE | Machine 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.