Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Задача классификации в машинном обучении
Классификация — это задача supervised learning, где требуется предсказать дискретный класс (категорию) для объекта на основе его признаков (features). Модель обучается на размеченных примерах и затем делает предсказания для новых данных.
Основные типы
Бинарная классификация (Binary Classification) Делим объекты на два класса:
- Спам/не спам -病болен/не болен (medical diagnosis)
- Мошенничество/легитимная транзакция
Многоклассовая классификация (Multiclass) Один объект принадлежит одному из N классов (N > 2):
- Распознавание цифр (0-9): 10 классов
- Классификация тональности текста: positive, neutral, negative
- Предсказание вида животного на фото
Многолейбловая классификация (Multilabel) Один объект может принадлежать нескольким классам одновременно:
- Тег статьи может быть: ["ML", "Python", "Tutorial"]
- Фильм: ["Action", "Thriller", "Drama"]
Основные этапы решения
1. Подготовка данных
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# Разделение на train/test
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
# Нормализация признаков
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
2. Выбор и обучение модели
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
# Логистическая регрессия для быстрого baseline
model_lr = LogisticRegression()
model_lr.fit(X_train_scaled, y_train)
# Random Forest для более сложных зависимостей
model_rf = RandomForestClassifier(n_estimators=100, random_state=42)
model_rf.fit(X_train, y_train)
3. Оценка производительности
from sklearn.metrics import (
accuracy_score, precision_score, recall_score, f1_score,
confusion_matrix, roc_auc_score, roc_curve
)
y_pred = model.predict(X_test)
y_pred_proba = model.predict_proba(X_test)[:, 1]
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}")
print(f"ROC-AUC: {roc_auc_score(y_test, y_pred_proba):.3f}")
Популярные алгоритмы
| Алгоритм | Плюсы | Минусы |
|---|---|---|
| Logistic Regression | Быстро, интерпретируемо | Линейные зависимости |
| Decision Tree | Легко понять, handles non-linear | Переобучение |
| Random Forest | Высокая точность, feature importance | Черный ящик |
| SVM | Хорошо на высоких размерностях | Медленно на больших данных |
| Gradient Boosting (XGBoost) | SOTA на структурированных данных | Требует tuning |
| Neural Networks | Очень мощные | Требуют много данных |
Метрики оценки
Для сбалансированных классов: Accuracy Для несбалансированных: F1, Precision-Recall, ROC-AUC Для бизнеса: Recall (если важнее не пропустить позитивный класс) или Precision (если важнее не ошибиться)
Типичные ошибки
- Data leakage — информация из test набора попала в train
- Неправильное разделение — stratified split для несбалансированных данных
- Переобучение — валидировать на отдельном hold-out наборе
- Игнорирование дисбаланса — использовать class_weight или переsampling