Перехресна перевірка leave-one-out у python (з прикладами)
Щоб оцінити продуктивність моделі на наборі даних, нам потрібно виміряти, наскільки прогнози, зроблені моделлю, відповідають даним спостереження.
Зазвичай використовуваний метод для цього відомий як Leave-One-Out Cross-Validation (LOOCV) , який використовує такий підхід:
1. Розділіть набір даних на навчальний набір і тестовий набір, використовуючи всі спостереження, крім одного, як частину навчального набору.
2. Створіть модель, використовуючи лише дані з навчальної множини.
3. Використовуйте модель для прогнозування значення відгуку спостереження, виключеного з моделі, і обчисліть середню квадратичну помилку (MSE).
4. Повторіть цей процес n разів. Обчисліть тестовий MSE як середнє значення всіх тестових MSE.
Цей підручник надає покроковий приклад того, як запустити LOOCV для даної моделі в Python.
Крок 1: Завантажте необхідні бібліотеки
Спочатку ми завантажимо функції та бібліотеки, необхідні для цього прикладу:
from sklearn. model_selection import train_test_split
from sklearn. model_selection import LeaveOneOut
from sklearn. model_selection import cross_val_score
from sklearn. linear_model import LinearRegression
from numpy import means
from numpy import absolute
from numpy import sqrt
import pandas as pd
Крок 2: Створіть дані
Далі ми створимо pandas DataFrame, який містить дві змінні предиктора, x1 і x2 , і одну змінну відповіді y.
df = pd.DataFrame({' y ': [6, 8, 12, 14, 14, 15, 17, 22, 24, 23],
' x1 ': [2, 5, 4, 3, 4, 6, 7, 5, 8, 9],
' x2 ': [14, 12, 12, 13, 7, 8, 7, 4, 6, 5]})
Крок 3: Виконайте перехресну перевірку Leave-One-Out
Далі ми підберемо модель множинної лінійної регресії до набору даних і виконаємо LOOCV, щоб оцінити продуктивність моделі.
#define predictor and response variables
X = df[[' x1 ', ' x2 ']]
y = df[' y ']
#define cross-validation method to use
cv = LeaveOneOut()
#build multiple linear regression model
model = LinearRegression()
#use LOOCV to evaluate model
scores = cross_val_score(model, X, y, scoring=' neg_mean_absolute_error ',
cv=cv, n_jobs=-1)
#view mean absolute error
mean(absolute(scores))
3.1461548083469726
З результату ми бачимо, що середня абсолютна похибка (MAE) становила 3,146 . Тобто середня абсолютна похибка між прогнозом моделі та фактично спостережуваними даними становить 3,146.
Загалом, чим нижче MAE, тим краще модель здатна передбачити фактичні спостереження.
Іншим часто використовуваним показником для оцінки продуктивності моделі є середньоквадратична помилка (RMSE). Наступний код показує, як обчислити цей показник за допомогою LOOCV:
#define predictor and response variables
X = df[[' x1 ', ' x2 ']]
y = df[' y ']
#define cross-validation method to use
cv = LeaveOneOut()
#build multiple linear regression model
model = LinearRegression()
#use LOOCV to evaluate model
scores = cross_val_score(model, X, y, scoring=' neg_mean_squared_error ',
cv=cv, n_jobs=-1)
#view RMSE
sqrt(mean(absolute(scores)))
3.619456476385567
З результату ми бачимо, що середня квадратична помилка (RMSE) становила 3,619 . Чим нижче RMSE, тим краще модель здатна передбачити фактичні спостереження.
На практиці ми зазвичай підбираємо кілька різних моделей і порівнюємо RMSE або MAE кожної моделі, щоб вирішити, яка модель дає найнижчий рівень помилок тестування і, отже, є найкращою для використання.
Додаткові ресурси
Короткий вступ до перехресної перевірки Leave-One-Out (LOOCV)
Повний посібник із лінійної регресії в Python