Вопрос или проблема
Я исследую несколько моделей машинного обучения для задачи прогнозирования на обучающем наборе. Мне интересно, есть ли простой способ определить/обнаружить хорошее/плохое обучение.
Классический подход, как он используется для глубокого обучения, заключается в том, что мы проверяем график кривой потерь на основе истории функции потерь обучающего и тестового наборов на протяжении эпох. Что насчет моделей, основанных на МЛ?
Лучшее, что может нам сказать, было ли обучение или обобщение:
- Хорошее обобщение и печать мне => хорошее соответствие
- Плохое обобщение и печать мне =>
- Плохое соответствие => переобучение
- Плохое соответствие => недообучение
На сколько я знаю, лучшая практика или современные методы:
- как и в моделях глубокого обучения, мы все же строим кривую обучения для моделей машинного обучения по количеству образцов в обучающих наборах или
- проверяем потенциальное переобучение/недообучение, используя график, основанный на
scoring="neg_mean_squared_error"
:
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import LearningCurveDisplay
# Оценка моделей с использованием кросс-валидации
scores = cross_val_score(pipeline, X, y, scoring="neg_mean_squared_error", cv=10)
- Я не уверен, но кажется, что этот подход не имеет ничего общего с диагностикой обучения, если что-то не так, и это лишь для оценки моделей для сравнения моделей, график истинных и оцененных коэффициентов.
Я был бы рад, если бы у кого-то были Python-решения, чтобы поделиться, например, новым пакетом, библиотеками или обертками, или недавними обходными путями, чтобы дать нам понимание о обучении моделей, основанных на МЛ.
Примечание: этот вопрос направлен на поиск лучших практик для только идентификации обучения не для диагностики (плохого) обобщения и его решений, таких как тонкая настройка гиперпараметров и решения GridSearch!
Ответ или решение
Для определения качества обучения моделей машинного обучения (ML) и выявления явлений переобучения и недообучения существуют несколько передовых практик. В этой статье подробно рассмотрим методы, которые помогут вам проанализировать результаты обучения, и предоставить инструменты для графической визуализации.
1. Изучение учебных кривых
Одним из самых эффективных инструментов для понимания обобщающей способности модели является учебная кривая (learning curve). Учебные кривые показывают, как качественные метрики (такие как ошибка RMSE) изменяются в зависимости от количества обучающих примеров. Это позволяет определить, страдает ли модель от переобучения (overfitting) или недообучения (underfitting).
from sklearn.model_selection import learning_curve
import matplotlib.pyplot as plt
import numpy as np
def plot_learning_curve(estimator, X, y):
train_sizes, train_scores, test_scores = learning_curve(
estimator, X, y, n_jobs=-1, train_sizes=np.linspace(0.1, 1.0, 10), cv=10)
train_scores_mean = np.mean(train_scores, axis=1)
test_scores_mean = np.mean(test_scores, axis=1)
plt.plot(train_sizes, train_scores_mean, label='Обучающая выборка')
plt.plot(train_sizes, test_scores_mean, label='Тестовая выборка')
plt.xlabel('Размер обучающей выборки')
plt.ylabel('Оценка')
plt.title('Кривые обучения')
plt.legend(loc='best')
plt.show()
2. Визуализация недостаточного и избыточного обучения
Еще одна полезная методика заключается в визуализации различий между ошибками на обучающей и тестовой выборках. Надлежащее использование кросс-валидации позволяет удобно сравнивать результаты:
from sklearn.model_selection import cross_val_score
scores = cross_val_score(pipeline, X, y, scoring="neg_mean_squared_error", cv=10)
mse = -scores
plt.boxplot(mse)
plt.title('Распространение MSE через кросс-валидацию')
plt.ylabel('Масштаб ошибки')
plt.show()
Если ошибка на обучающей выборке значительно ниже, чем на тестовой, это свидетельствует о переобучении. В случае, если обе ошибки высоки, это может быть признаком недообучения.
3. Анализ коэффициентов модели
Если ваша модель линейная (например, линейная регрессия), вы можете визуализировать истинные и предсказанные коэффициенты модели. Это полезно для понимания влияния отдельных признаков на предсказания.
from sklearn.linear_model import LinearRegression
import seaborn as sns
import pandas as pd
# Обучение модели
model = LinearRegression()
model.fit(X_train, y_train)
# Визуализация
coef_df = pd.DataFrame(model.coef_, index=X.columns, columns=['Коэффициенты'])
sns.barplot(data=coef_df, x=coef_df.index, y='Коэффициенты')
plt.xticks(rotation=90)
plt.show()
4. Использование дополнительной библиотеки для анализа
Рекомендуется использовать библиотеки, такие как Yellowbrick, которые специально разработаны для визуализации анализов машинного обучения. Они позволяют проводить визуализацию различных аспектов моделей и обеспечивают дополнительные инструменты для оценки качества обучения.
from yellowbrick.model_selection import LearningCurve
visualizer = LearningCurve(pipeline, cv=10, n_jobs=-1)
visualizer.fit(X, y)
visualizer.show()
Заключение
Важное значение при анализе обучения моделей машинного обучения имеет правильное использование учебных кривых, визуализация ошибок и коэффицентов моделей. Применяя представленные методы и реализовав общепринятые практики, вы сможете достичь более глубокого понимания способностей обученной модели к обобщению. Уделите внимание визуализации и анализу, и это позволит вам не только диагностировать проблемы, но и улучшить качество ваших предсказаний.
Эти подходы должны помочь вам определить, насколько хорошо модель обучилась, а также позволить вам осуществлять анализ общих характеристик и поведения вашей модели в процессе обучения.