Чем можно воспользоваться чтобы устранить переобучение модели python

Как предотвратить переобучение в моделях машинного обучения

Очень глубокие нейронные сети с огромным количеством параметров — очень надежные системы машинного обучения. Но в этом типе массивных сетей переоснащение — обычная серьезная проблема. Чтобы овладеть машинным обучением, необходимо научиться справляться с переобучением. Фундаментальная проблема в машинном обучении — это противоречие между оптимизацией и обобщением. Оптимизация относится к процессу настройки модели для получения максимальной производительности на обучающих данных (обучение в машинном обучении), тогда как обобщение относится к тому, насколько хорошо обученная модель выполняет с данными, которые никогда раньше не видел (набор тестов). Цель игры — получить хорошее обобщение. Но вы не контролируете обобщение; вы можете настроить модель только на основе ее обучающих данных.

Как узнать, не переоснащается ли модель?

Явным признаком переобучения является высокая точность модели в обучающем наборе, но точность значительно снижается с новыми данными или в тестовом наборе. Это означает, что модель очень хорошо знает обучающие данные, но не может делать обобщения. Этот случай делает вашу модель бесполезной в производстве или тестировании AB в большинстве областей.

Как предотвратить переобучение?

Хорошо, теперь предположим, что вы обнаружили, что ваша модель подходит больше. Но что теперь делать, чтобы ваша модель не переоснащалась?
К счастью, есть много способов предотвратить переобучение модели. Ниже я описал несколько наиболее широко используемых решений для переобучения.

1. Уменьшите размер сети.

Самый простой способ предотвратить переоснащение — уменьшить размер модели: количество обучаемых параметров в модели (которое определяется количеством слоев и количеством единиц на уровне).

Читайте также:  Php open jpg image

2. Перекрестная проверка

При перекрестной проверке исходные данные обучения используются как небольшие разбиения на поезд-тест. Затем эти расщепления используются для настройки модели. Самая популярная форма перекрестной проверки — это перекрестная проверка в K-кратном порядке. K представляет собой количество складок. Вот короткое видео от Udacity, которое очень хорошо объясняет перекрестную проверку K-кратности.

3. Добавьте регуляризацию веса

Учитывая два объяснения чего-либо, наиболее вероятным будет самое простое объяснение — такое, которое делает меньше предположений. Эта идея также применима к моделям, изученным нейронными сетями: учитывая некоторые обучающие данные и сетевую архитектуру, несколько наборов значений веса могут объяснить данные. Более простые модели имеют меньше шансов переобучиться, чем сложные. Простая модель в этом контексте — это модель, в которой распределение значений параметров имеет меньшую энтропию (или модель с меньшим количеством параметров). Таким образом, распространенный способ смягчить переоснащение — это наложить ограничения на сложность сети, заставив ее веса принимать только небольшие значения, что делает распределение значений весов более регулярным. Это называется регуляризацией веса, и это достигается путем добавления к функции потерь сети затрат, связанных с наличием больших весов.
Эта стоимость бывает двух видов:
Регуляризация L1
— добавленная стоимость пропорциональна абсолютному значению весовых коэффициентов.
Регуляризация L2 — добавленная стоимость пропорциональна квадрату значения весовых коэффициентов . Регуляризация L2 также называется уменьшением веса в контексте нейронных сетей. [1]

4. Удаление нерелевантных функций.

Улучшите данные, удалив нерелевантные функции. Набор данных может содержать много функций, которые не сильно влияют на прогноз. Удаление этих менее важных функций может повысить точность и уменьшить переоснащение. Вы можете использовать модуль выбор функций scikit-learn для этой цели.

5. Добавление отсева

Выпадение, примененное к слою, состоит из случайного отбрасывания (установка на ноль) ряда выходных характеристик слоя во время обучения. Допустим,
данный слой обычно возвращает вектор [0,2, 0,5, 1,3, 0,8, 1,1] для заданной входной выборки во время обучения. После применения исключения этот вектор будет иметь несколько произвольно распределенных нулевых записей: например, [0, 0.5, 1.3, 0, 1.1].

6. Увеличение данных

Самый простой способ уменьшить переобучение — увеличить размер обучающих данных. Предположим, мы имеем дело с изображениями. В этом случае есть несколько способов увеличения размера обучающих данных — поворот изображения, переворачивание, масштабирование, сдвиг и т. Д. Этот метод известен как увеличение данных. Обычно это дает большой скачок в повышении точности модели.

Читайте также:  Css clip path полукруг

Электронная почта: [email protected]
Свяжитесь со мной: LinkedIn

Источник

Переоснащение против переоснащения

Этот пример демонстрирует проблемы недостаточного и переобучения, а также то, как мы можем использовать линейную регрессию с полиномиальными функциями для аппроксимации нелинейных функций. График показывает функцию, которую мы хотим аппроксимировать, которая является частью функции косинуса. Кроме того, отображаются образцы из реальной функции и приближения различных моделей. Модели обладают полиномиальными признаками разной степени. Мы видим, что линейной функции (полинома со степенью 1) недостаточно для соответствия обучающим выборкам. Это называется недостаточным оснащением . Полином степени 4 почти идеально приближает истинную функцию. Однако для более высоких степеней модель будет превосходить обучающие данные, то есть изучает шум обучающих данных. Мы оцениваем количественнопереобучения / underfitting с помощью перекрестной проверки. Мы вычисляем среднеквадратичную ошибку (MSE) на проверочном наборе, чем выше, тем меньше вероятность правильного обобщения модели на основе данных обучения.

print(__doc__) import numpy as np import matplotlib.pyplot as plt from sklearn.pipeline import Pipeline from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression from sklearn.model_selection import cross_val_score def true_fun(X): return np.cos(1.5 * np.pi * X) np.random.seed(0) n_samples = 30 degrees = [1, 4, 15] X = np.sort(np.random.rand(n_samples)) y = true_fun(X) + np.random.randn(n_samples) * 0.1 plt.figure(figsize=(14, 5)) for i in range(len(degrees)): ax = plt.subplot(1, len(degrees), i + 1) plt.setp(ax, xticks=(), yticks=()) polynomial_features = PolynomialFeatures(degree=degrees[i], include_bias=False) linear_regression = LinearRegression() pipeline = Pipeline([("polynomial_features", polynomial_features), ("linear_regression", linear_regression)]) pipeline.fit(X[:, np.newaxis], y) # Evaluate the models using crossvalidation scores = cross_val_score(pipeline, X[:, np.newaxis], y, scoring="neg_mean_squared_error", cv=10) X_test = np.linspace(0, 1, 100) plt.plot(X_test, pipeline.predict(X_test[:, np.newaxis]), label="Model") plt.plot(X_test, true_fun(X_test), label="True function") plt.scatter(X, y, edgecolor='b', s=20, label="Samples") plt.xlabel("x") plt.ylabel("y") plt.xlim((0, 1)) plt.ylim((-2, 2)) plt.legend(loc="best") plt.title("Degree <>\nMSE = (+/- )".format( degrees[i], -scores.mean(), scores.std())) plt.show()

Общее время работы скрипта: (0 минут 0,350 секунды)

Читайте также:  Clone in java arraylist

Источник

Оцените статью