Крос-Валідація
У попередньому розділі ми розглянули підхід розділення на навчальну та тестову вибірки для оцінки моделі. Цей підхід має свої недоліки:
- Використовується лише частина датасету для навчання: очевидно, що чим більше даних ми надаємо моделі, тим більше вона може навчитися, і тим кращою буде її продуктивність;
- Результат може сильно залежати від розділення: як ви бачили у попередньому розділі, оскільки датасет розділяється випадковим чином, запуск коду кілька разів може дати суттєво різні результати.
Тому існує інший підхід до оцінки моделі, відомий як крос-валідація.
Спочатку ми розділяємо весь датасет на 5 рівних частин, які називаються фолдами.
Далі ми беремо один фолд як тестову вибірку, а інші фолди використовуємо як навчальну вибірку.
Як завжди, для навчання моделі використовується навчальна вибірка, а для оцінки моделі — тестова вибірка.
Тепер повторіть процес, використовуючи кожну складку як тестову вибірку по черзі.
У результаті отримуємо п’ять значень точності, по одному для кожного розбиття. Далі можна обчислити середнє цих значень для оцінки середньої продуктивності моделі.
Для обчислення оцінки крос-валідації у Python можна скористатися функцією cross_val_score()
з модуля sklearn.model_selection
.
1234567891011import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import cross_val_score df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_pipelined.csv') # Assign X, y variables (X is already preprocessed and y is already encoded) X, y = df.drop('species', axis=1), df['species'] # Print the cross-val scores and the mean for KNeighborsClassifier with 5 neighbors scores = cross_val_score(KNeighborsClassifier(), X, y) print(scores) print(scores.mean())
Вона забезпечує стабільніші та надійніші результати порівняно з методом поділу на тренувальну та тестову вибірки; однак, вона значно повільніша, оскільки вимагає навчання та оцінки моделі п'ять разів (або n разів, якщо ви встановите n кількість фолдів), на відміну від одного разу при поділі на тренувальну та тестову вибірки.
Крос-валідація зазвичай використовується для налаштування гіперпараметрів, коли весь процес крос-валідації виконується для кожного можливого значення гіперпараметра.
Наприклад, при визначенні оптимальної кількості сусідів у алгоритмі k-ближчих сусідів, ви виконуєте повний цикл крос-валідації для кожного кандидатного значення. Цей метод забезпечує ретельну оцінку кожного налаштування гіперпараметра на всьому наборі даних, дозволяючи обрати значення, яке послідовно забезпечує найкращу продуктивність.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 3.13
Крос-Валідація
Свайпніть щоб показати меню
У попередньому розділі ми розглянули підхід розділення на навчальну та тестову вибірки для оцінки моделі. Цей підхід має свої недоліки:
- Використовується лише частина датасету для навчання: очевидно, що чим більше даних ми надаємо моделі, тим більше вона може навчитися, і тим кращою буде її продуктивність;
- Результат може сильно залежати від розділення: як ви бачили у попередньому розділі, оскільки датасет розділяється випадковим чином, запуск коду кілька разів може дати суттєво різні результати.
Тому існує інший підхід до оцінки моделі, відомий як крос-валідація.
Спочатку ми розділяємо весь датасет на 5 рівних частин, які називаються фолдами.
Далі ми беремо один фолд як тестову вибірку, а інші фолди використовуємо як навчальну вибірку.
Як завжди, для навчання моделі використовується навчальна вибірка, а для оцінки моделі — тестова вибірка.
Тепер повторіть процес, використовуючи кожну складку як тестову вибірку по черзі.
У результаті отримуємо п’ять значень точності, по одному для кожного розбиття. Далі можна обчислити середнє цих значень для оцінки середньої продуктивності моделі.
Для обчислення оцінки крос-валідації у Python можна скористатися функцією cross_val_score()
з модуля sklearn.model_selection
.
1234567891011import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import cross_val_score df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_pipelined.csv') # Assign X, y variables (X is already preprocessed and y is already encoded) X, y = df.drop('species', axis=1), df['species'] # Print the cross-val scores and the mean for KNeighborsClassifier with 5 neighbors scores = cross_val_score(KNeighborsClassifier(), X, y) print(scores) print(scores.mean())
Вона забезпечує стабільніші та надійніші результати порівняно з методом поділу на тренувальну та тестову вибірки; однак, вона значно повільніша, оскільки вимагає навчання та оцінки моделі п'ять разів (або n разів, якщо ви встановите n кількість фолдів), на відміну від одного разу при поділі на тренувальну та тестову вибірки.
Крос-валідація зазвичай використовується для налаштування гіперпараметрів, коли весь процес крос-валідації виконується для кожного можливого значення гіперпараметра.
Наприклад, при визначенні оптимальної кількості сусідів у алгоритмі k-ближчих сусідів, ви виконуєте повний цикл крос-валідації для кожного кандидатного значення. Цей метод забезпечує ретельну оцінку кожного налаштування гіперпараметра на всьому наборі даних, дозволяючи обрати значення, яке послідовно забезпечує найкращу продуктивність.
Дякуємо за ваш відгук!