Переобучення
Перенавчання
Розгляньте дві регресійні прямі нижче. Яка з них краща?
Згідно з метриками, друга лінія є кращою. Тоді використаємо її для прогнозування нових значень! Нам потрібні прогнози для X_new = [0.2,0.5,2.7]
. Але коли ми отримали фактичні цільові значення для X_new
, які щойно передбачили, виявилося, що перша модель дала значно кращий прогноз.
Це сталося тому, що друга модель перенавчилася на тренувальній вибірці. Перенавчання — це коли побудована модель є надто складною, тому ідеально підлаштовується під тренувальні дані, але погано прогнозує нові, невідомі випадки.
Недонавчання
Існує ще одне поняття — недонавчання. Це коли побудована модель занадто проста і навіть не підходить до навчальних даних. У таких випадках передбачення для невідомих прикладів також є неправильними.
Отже, ми можемо спробувати визначити, чи модель недонавчається або перенавчається, візуально.
Ми вже знаємо, що не можемо візуалізувати множинну лінійну регресію з багатьма ознаками. Чи існує інший спосіб визначити, чи модель перенавчається або недонавчається? Виявляється, такий спосіб є.
Розділення на тренувальну та тестову вибірки
Ми хочемо дізнатися, як модель працюватиме на невідомих прикладах. Для цього нам потрібні невідомі приклади з відомими справжніми значеннями цільової змінної. А справжні цільові значення ми маємо лише у тренувальній вибірці. Тому необхідно розділити тренувальну вибірку на дві частини: тренувальну та тестову вибірки.
Тепер ми можемо побудувати модель, використовуючи тренувальну вибірку, обчислити метрики на тренувальній вибірці (відомі приклади), а потім обчислити метрики на тестовій вибірці (невідомі приклади).
Важливо розділяти тренувальну вибірку випадковим чином. Зазвичай для тестової вибірки використовують близько 20-30% тренувальної вибірки, а решта 70-80% залишаються як тренувальна вибірка. Scikit-learn надає просту функцію для випадкового розділення вибірки:
Наприклад, щоб розділити навчальний набір на 70% для навчання та 30% для тестування, можна використати наступний код:
from sklearn.model_selection import train_test_split # import the function
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
What are some common signs of overfitting and underfitting in a model?
How does the train-test split help prevent overfitting?
Can you explain how to interpret the results after splitting the data into training and test sets?
Awesome!
Completion rate improved to 5.26
Переобучення
Свайпніть щоб показати меню
Перенавчання
Розгляньте дві регресійні прямі нижче. Яка з них краща?
Згідно з метриками, друга лінія є кращою. Тоді використаємо її для прогнозування нових значень! Нам потрібні прогнози для X_new = [0.2,0.5,2.7]
. Але коли ми отримали фактичні цільові значення для X_new
, які щойно передбачили, виявилося, що перша модель дала значно кращий прогноз.
Це сталося тому, що друга модель перенавчилася на тренувальній вибірці. Перенавчання — це коли побудована модель є надто складною, тому ідеально підлаштовується під тренувальні дані, але погано прогнозує нові, невідомі випадки.
Недонавчання
Існує ще одне поняття — недонавчання. Це коли побудована модель занадто проста і навіть не підходить до навчальних даних. У таких випадках передбачення для невідомих прикладів також є неправильними.
Отже, ми можемо спробувати визначити, чи модель недонавчається або перенавчається, візуально.
Ми вже знаємо, що не можемо візуалізувати множинну лінійну регресію з багатьма ознаками. Чи існує інший спосіб визначити, чи модель перенавчається або недонавчається? Виявляється, такий спосіб є.
Розділення на тренувальну та тестову вибірки
Ми хочемо дізнатися, як модель працюватиме на невідомих прикладах. Для цього нам потрібні невідомі приклади з відомими справжніми значеннями цільової змінної. А справжні цільові значення ми маємо лише у тренувальній вибірці. Тому необхідно розділити тренувальну вибірку на дві частини: тренувальну та тестову вибірки.
Тепер ми можемо побудувати модель, використовуючи тренувальну вибірку, обчислити метрики на тренувальній вибірці (відомі приклади), а потім обчислити метрики на тестовій вибірці (невідомі приклади).
Важливо розділяти тренувальну вибірку випадковим чином. Зазвичай для тестової вибірки використовують близько 20-30% тренувальної вибірки, а решта 70-80% залишаються як тренувальна вибірка. Scikit-learn надає просту функцію для випадкового розділення вибірки:
Наприклад, щоб розділити навчальний набір на 70% для навчання та 30% для тестування, можна використати наступний код:
from sklearn.model_selection import train_test_split # import the function
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
Дякуємо за ваш відгук!