Когда я должен перетасовать в StraifiedKFold - PullRequest
2 голосов
/ 07 января 2020

Я прочитал несколько сообщений о различных подходах 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

1 Ответ

0 голосов
/ 07 января 2020

Ваш вопрос довольно сложный и, вероятно, его лучше разместить здесь .

В моем наборе данных временного ряда размером 921 * 10080, где каждая строка представляет собой временной ряд температуры воды в определенном месте области, а последний столбец представляет собой метку с двумя группами

Разве вы не используете проблему классификации с фьючерсами временной серии? Вы используете зависимые переменные (временные ряды температуры воды), чтобы предсказать метку. Для меня это звучит рискованно, и я предположил бы, что нет хорошего шанса предсказать лейбл. Стоит подумать только об одном сценарии:

Location  Time1 Time2 Time3  Label
A         3       2    1      1
B         100     99   98     1
C         98      99   100    0

Так что в этом примере метка 1 - это временная серия, которая снижается, а метка 0 - это временная серия, которая возрастает, но я бы поспорила, что у каждого классификатора есть проблема, чтобы изучить его. без подключения трендового компонента ваших столбцов.

Чтобы вернуться к вашему вопросу, это может помочь вам понять перетасовку: разница между StraifiedKFold и StratifiedShuffleSplit в sklearn

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...