Как работает кроссвалидация - cross_val_score?
Есть датасет, он разделен на признаки - X и на объеты - y. Есть модель - Ridge с настроенными гипер-параметрами. Я могу проверить точность предсказания этой модели с помощью функции cross_val_score?
X = dataset[['IW','IF','VW','FP']].values
y = dataset[['Depth','Width']].values
model_ridge = Ridge(alpha=[0.001])
results = cross_val_score(model_ridge, X, y, cv=4, scoring='r2')
results
# Выход: array([ 0.44374476, 0.39469688, 0.26293681, -0.05665834])
results.mean()
#Выход: 0.261180024048342
Получается качество этой модели 26 % ? И правильно ли я понимаю как работает cross_val_score, а именно, что в она разбивает X и y на 4 части, обучает модель на 3/4 части и проверяет ее на 1/4 части?
Ответы (1 шт):
правильно ли я понимаю как работает cross_val_score, а именно, что в она разбивает X и y на 4 части, обучает модель на 3/4 части и проверяет ее на 1/4 части?
Да, вы все правильно понимаете. Для cv=4 все именно так и работает.
Судя по результатам Cross-Validation, R^2 score очень сильно различается для разных частей датасета. И в вашем случае постоянно ухудшается. Вы можете попробовать перетасовать датасет перед тем как делать Cross-Validation.
Пример:
>>> from sklearn.model_selection import ShuffleSplit
>>> n_samples = X.shape[0]
>>> cv = ShuffleSplit(n_splits=5, test_size=0.3, random_state=0)
>>> cross_val_score(clf, X, y, cv=cv)