Переобучення
Перенавчання
Розгляньте дві регресійні прямі нижче. Яка з них краща?
Згідно з метриками, друга модель краща. Тоді використаємо її для прогнозування нових значень! Нам потрібні прогнози для 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)
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
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)
Дякуємо за ваш відгук!