Я прочитал несколько сообщений о различных подходах CV. Но я не понимаю, почему перетасовка данных в функции приводит к значительному увеличению точности и когда это правильно делать.
В моем наборе данных временного ряда размером 921 *10080
, где каждая строка представляет собой временной ряд температуры воды определенного местоположения в области, а 2 последних столбца являются метками с 2 группами, ie. с высоким риском (высокий уровень содержания бактерий в воде) и низким уровнем риска (низкий уровень содержания бактерий в воде), точность меняется очень по-разному в зависимости от того, установлен ли я "shuffle=True"(achieved accuracy of around 75%)
, против accuracy of 50%
при установке "shuffle=False"
в StratifiedKFold
, как показано ниже:
n_folds = 5
skf = StratifiedKFold(n_splits=n_folds, shuffle=True)
Документация sklearn гласит следующее:
Замечание по шуфингу
Если порядок данных не произвольный (например, образцы с одинаковой меткой класса являются смежными), но это может быть важно для получения значимого результата перекрестной проверки. Однако обратное может быть верным, если выборки не распределены независимо и одинаково. Например, если образцы соответствуют новостным статьям и упорядочены по времени их публикации, то при шунтировании данных, скорее всего, получится модель, которая является более точной, и завышенная оценка: она будет проверена на образцах, которые искусственно похожи (близко вовремя) к обучающим выборкам.
Некоторые итераторы перекрестной проверки, такие как KFold, имеют встроенную опцию, чтобы перемешивать индексы данных перед их разбиением. Обратите внимание, что:
• Это потребляет меньше памяти, чем непосредственно при перетасовке данных.
• По умолчанию не происходит перестановка, в том числе для (стратифицированной) перекрестной проверки K-кратности, выполняемой путем указания cv = some_integer к cross_val_score, поиск по сетке и т. д. c. Имейте в виду, что train_test_split по-прежнему возвращает случайное разбиение.
• Параметр random_state по умолчанию равен None, что означает, что shufing будет отличаться при каждой итерации KFold (..., shuffle = True). Однако GridSearchCV будет использовать один и тот же шуфинг для каждого набора параметров, проверяемого одним вызовом его метода соответствия.
• Чтобы получить идентичные результаты для каждого разделения, установите random_state в целое число.
Я не уверен, правильно ли я интерпретирую документацию - объяснение очень ценится. Кроме того, у меня есть несколько вопросов:
1) Почему после перетасовки происходит такое огромное улучшение точности? Я переоснащаюсь? Когда я должен перемешать?
2) Учитывая, что все образцы взяты из одной и той же области, они, вероятно, не являются независимыми. Как это влияет на тасование? Это все еще допустимо, чтобы перемешать?
3) Отделяет ли тасование метки от соответствующих X
данных? (Обновление ответа: Нет. Перемешивание не отделяет метки от соответствующих X
данных)
Thx