Чому великий вибір K знижує показник перехресної перевірки?


11

Граючи з набором даних Boston Housing Dataset та RandomForestRegressor(з параметрами за замовчуванням) у scikit-learn, я помітив щось дивне: середній бал перехресної перевірки зменшився, оскільки я збільшив кількість складок понад 10. Моя стратегія крос-валідації була така:

cv_met = ShuffleSplit(n_splits=k, test_size=1/k)
scores = cross_val_score(est, X, y, cv=cv_met)

... де num_cvsбуло різноманітно. Я встановив , test_sizeщоб 1/num_cvsвідобразити на поїзд / тест - поведінка розділити по розмірам до-кратне CV. В основному, я хотів щось подібне до кратного CV, але мені також потрібна була випадковість (отже, ShuffleSplit).

Це випробування повторювалося кілька разів, після чого були складені середні бали та стандартні відхилення.

Площа кола ~ K у K-кратній перехресній валідації

(Зверніть увагу, що розмір kпозначається площею кола; стандартне відхилення - по осі Y.)

Послідовно, збільшення k(з 2 до 44) призведе до короткого збільшення балів з подальшим постійним зниженням у міру kподальшого збільшення (понад ~ 10 разів)! Якщо що-небудь, я б очікував, що більше даних про тренінг призведе до незначного збільшення балів!

Оновлення

Зміна критеріїв оцінювання на абсолютну помилку призводить до поведінки, яку я очікував: підрахунок балів покращується зі збільшенням кількості складок у резюме K-кратного, а не наближається до 0 (як за замовчуванням, ' r2 '). Залишається питанням, чому показник оцінювання за замовчуванням призводить до низької продуктивності як середньої, так і показника STD для збільшення кількості складок.


Якісь дублікати записів у ваших складках? Це може бути пов’язано з надмірною обробкою .
Має QUIT - Anonymous-Mousse

1
@ Anonymous-Mousse Ні, оскільки набір даних Boston Housing не має дублікатів записів, а вибірка ShuffleSplit не викликає дублікатів записів.
Брайан Біен

4
Крім того, вдосконаліть свій графік. Використовуйте смужки помилок, щоб показати середнє значення, + - stddev і min / max. Поставте k на іншій осі.
Мав QUIT - Anonymous-Mousse

1
Я не думаю, що більше прикладів для тренінгу збільшує шанс переодягатися. Я побудував криву навчання з цим набором даних, знову використовуючи ShuffleSplit (n_splits = 300 з різними розмірами тесту) і побачив стабільно підвищену точність, оскільки було доступно більше прикладів навчання.
Брайан Біен

1
Вибачте, ви маєте рацію, більше - краще, а найкраще - 1. Але у вас цього питання не виникає, якщо ви використовуєте середню квадратику або абсолютну помилку. Тож треба щось робити із терміном помилки
rep_ho

Відповіді:


1

r ^ 2 бал не визначено, якщо він застосовується до одного зразка (наприклад, резюме, що залишається один).

r ^ 2 не підходить для оцінювання невеликих тестових наборів: коли він використовується для оцінки достатньо невеликого тестового набору, оцінка може бути далеко не негативною, незважаючи на хороші прогнози.

З огляду на один зразок, хороший прогноз для даного домену може здатися жахливим:

from sklearn.metrics import r2_score
true = [1]
predicted = [1.01] # prediction of a single value, off by 1%
print(r2_score(true, predicted))
# 0.0

Збільште розмір тестового набору (зберігаючи точність прогнозів однаковою), і раптом оцінка r ^ 2 виявиться майже досконалою:

true = [1, 2, 3]
predicted = [1.01, 2.02, 3.03]
print(r2_score(true, predicted))
# 0.9993

Якщо прийняти іншу крайність, якщо розмір тесту - 2 вибірки, і ми випадково оцінюємо 2 вибірки, які випадково близькі один до одного, це матиме істотний вплив на показник r ^ 2, навіть якщо прогнози є досить хорошими :

true = [20.2, 20.1] # actual target values from the Boston Housing dataset
predicted = [19, 21]
print(r2_score(true, predicted))
# -449.0
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.