2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4  След.
 
 Re: Какие алгоритмы наиболее толерантны к пропускам в данных?
Сообщение07.09.2019, 09:01 


10/03/16
4444
Aeroport
Andrey_Kireew в сообщении #1413983 писал(а):
можно построить прогноз пропущенного значения по оставшимся признакам, причём на основании всей выборки


Если на основании ВСЕЙ, то может что нибудь и получится. Но это двойная работа -- вначале заполнять пропуски, а потом классифицировать объекты. Кроме того, есть куча околопредельных случаев, когда пропуски будут заполняться не тем, чем нужно. И вообще -- если есть возможность не играть в русскую рулетку, лучше не играть. Я никак не пойму -- а чем вам не нравится комитет решающих правил на рандомных наборах признаков?

 Профиль  
                  
 
 Re: Какие алгоритмы наиболее толерантны к пропускам в данных?
Сообщение07.09.2019, 11:34 


17/10/08

1313
В общем, ТС получил разные варианты борьбы с пропусками. Под любой алгоритм, при желании, можно подобрать такие данные, что он будет наилучший в сравнении с другим. В реальной жизни это также может произойти, вопрос лишь в вероятностях... В данном случае я бы начал со случайных деревьев...

Прямое применение какой-либо библиотеки может запнуться об невозможность ее работы с NA. Поэтому, хочешь - не хочешь, а заполнить пропуски придется.

На практике есть всякие нюансы... жизнь не обязательно вращается вокруг задач классификации и т.п. Нужно втиснуться в существующий технологический стек, архитектуру уже существующего решения, не превысить экономически оправданный бюджет, по возможности не перенапрягать инфраструктуру, и т.д. По этим причинам выбор может пасть не на самый точный и толерантный алгоритм.

 Профиль  
                  
 
 Re: Какие алгоритмы наиболее толерантны к пропускам в данных?
Сообщение07.09.2019, 11:55 


02/05/18
45
Andrey_Kireew в сообщении #1413949 писал(а):
На этапе работы алгоритма после обучения предполагается использовать полный набор признаков? или в неизвестных наблюдениях так же возможны произвольные пропуски?


В неизвестных (новых) наблюдениях, так же могут быть произвольные пропуски.

Mihaylo в сообщении #1413992 писал(а):
Мы просто не знаем, чем вызваны пропуски. "Гадать по фото" можно бесконечно.


Пропуски вызваны естественными причинами, у каких-то объектов они не регистрируются, у каких-то наоборот. Т.е. разная совокупность признаков приводит объект к одному и тому же классу. Чтобы не гадать на кофейной гуще, скажу что речь идёт о показателях пациентов в интра и пост-операционный период. Задача: определить тех у кого возможны осложнения. Соответственно исходные данные делятся на тех, у кого были осложнения, а у кого нет.
Пропуск это отсутствие, например, антитромбоцитарной терапии или если она была указывается препарат и дозировка. Или например признак "Снижение функции ЛЖ", может быть = 40%, а может не делали УЗИ-сердца, тогда получаем снова пропуск.

mserg в сообщении #1413965 писал(а):
Если переменная числовая, то можно завести дополнительную пседвобулеву переменную - она принимает значение 1 если значение исходной переменной пропущено; и 0, если значение исходной переменной заполнено.


Спасибо, попробую.

ozheredov в сообщении #1413927 писал(а):
Смотрите random forest


А в каком пакете? Насколько я помню random forest на sklearn ругается при попытке скормить Nan.


Большое спасибо всем за активную помощь, если у кого-то ещё возникнут идеи, буду рад!

 Профиль  
                  
 
 Re: Какие алгоритмы наиболее толерантны к пропускам в данных?
Сообщение07.09.2019, 12:23 


12/07/15
01/12/24
3317
г. Чехов
5.4. Imputation of missing values
https://scikit-learn.org/stable/modules/impute.html

Цитата:
There are many well-established imputation packages in the R data science ecosystem: Amelia, mi, mice, missForest, etc.

 Профиль  
                  
 
 Re: Какие алгоритмы наиболее толерантны к пропускам в данных?
Сообщение07.09.2019, 14:59 


07/10/15

2400
ozheredov в сообщении #1413995 писал(а):
Но это двойная работа -- вначале заполнять пропуски, а потом классифицировать объекты

Это не просто двойная работа, это позволит избежать эффекта переобучения, так как результативную переменную (класс наблюдения) при заполнении пропусков можно вообще не использовать. Если же процедуру заполнения пропусков вовлечь в процесс обучения, то это приведёт к сильному переобучению. Классификатор будет хорошо работать только на обучающей выборке.

ozheredov в сообщении #1413995 писал(а):
Я никак не пойму -- а чем вам не нравится комитет решающих правил на рандомных наборах признаков?

я нигде не писал что это мне не нравится, просто интерполяция пропусков - более универсальная процедура, а здесь успех применения во многом зависит от особенностей данных

 Профиль  
                  
 
 Re: Какие алгоритмы наиболее толерантны к пропускам в данных?
Сообщение07.09.2019, 15:32 


10/03/16
4444
Aeroport
Andrey_Kireew в сообщении #1414020 писал(а):
это позволит избежать эффекта переобучения, так как результативную переменную (класс наблюдения) при заполнении пропусков можно вообще не использовать.


Мы вначале заполняем пропуски, внося тем самым ошибки в предикторную часть обучающей выборки. Затем обучаем классификатор, внося ошибку в решабщее правило ещё раз. Как это позволит избежать эффекта переобучения, я пока не понимаю.

Andrey_Kireew в сообщении #1414020 писал(а):
интерполяция пропусков - более универсальная процедура, а здесь успех применения во многом зависит от особенностей данных


Я сейчас приведу ни в коем случае не аргумент, но если посмотреть статистику на предмет: что используют победители соревнований kaggle, то random forest, использованный ровно в том контексте как я сказал, окажется сильно впереди чего бы то ни было с предварительной интерполяцией. Буду вам крайне признателен, если вы или mserg покажете рулёзность заполнения пропусков с формулами в руках.

Пока у нас альтернатива:

Комитет решающих правил (boosting) vs
Одно решающее правило с предварительной интерполяцией пропусков

Что сами выберем, что матери отдадим? Давайте попробуем формально поставить задачу и доказать, что одно лучше чем другое. ИМХО, задача обещает быть фундаментальной

-- 07.09.2019, 15:35 --

Mihaylo в сообщении #1414007 писал(а):
There are many well-established imputation packages in the R data science ecosystem


О, вы фанат R? Очень приятно )

 Профиль  
                  
 
 Re: Какие алгоритмы наиболее толерантны к пропускам в данных?
Сообщение07.09.2019, 15:54 


02/05/18
45
Mihaylo в сообщении #1414007 писал(а):
There are many well-established imputation packages in the R data science ecosystem: Amelia, mi, mice, missForest, etc.

Mice действительно крутой инструмент, даже есть аналог для тех кто не работает с R.
Код:
from fancyimpute import IterativeImputer

Но всё-таки подозреваю, что импутация пропусков в моей задаче приведёт к искажению результатов на новых данных.

Подскажите как random forest может принимать Nan? Или имеется ввиду Nan заменять выбросом, типа -9999999?

 Профиль  
                  
 
 Re: Какие алгоритмы наиболее толерантны к пропускам в данных?
Сообщение07.09.2019, 16:50 


07/10/15

2400
Alex7 в сообщении #1414023 писал(а):
random forest, использованный ровно в том контексте как я сказал, окажется сильно впереди чего бы то ни было с предварительной интерполяцией

Немного не так, скорее random forest - это наиболее популярные на сегодня инструмент, только и всего. Некорректно говорить, что он намного превосходит методы, с которыми он даже не сравнивался. У деревьев, а тем более random forest есть свои недостатки. В целом, результаты с ними получаются многообещающими, но малонадёжными. Статистически, обосновать их обычно невозможно, да никто особо и не пытается этого сделать.

На соревнованиях это нормально, выиграл - хорошо, проиграл - не беда, повезёт в другой раз. В медицинской статистике такой фокус просто так не пройдёт, необоснованные результаты никто всерьёз не воспримет.

Вы лучше почитайте статью, которую любезно предоставил Mihaylo, там всё то, о чём писал я, только на английском. Кстати, для реализации интерполяции пропусков, оказывается есть доступные инструменты, что значительно облегчает задачу.

 Профиль  
                  
 
 Re: Какие алгоритмы наиболее толерантны к пропускам в данных?
Сообщение07.09.2019, 19:38 
Аватара пользователя


31/10/08
1244
Andrey_Kireew в сообщении #1414029 писал(а):
В целом, результаты с ними получаются многообещающими, но малонадёжными. Статистически, обосновать их обычно невозможно, да никто особо и не пытается этого сделать.

Вы в очередной раз демонстрируете незнание мат.части. Иди учите. Нормально их обосновывают, даже теорема есть о их сходимости:
http://www.machinelearning.ru/wiki/imag ... itions.pdf

Andrey_Kireew в сообщении #1414029 писал(а):
На соревнованиях это нормально, выиграл - хорошо, проиграл - не беда, повезёт в другой раз. В медицинской статистике такой фокус просто так не пройдёт, необоснованные результаты никто всерьёз не воспримет.

:lol: Вы видимо совсем не в курсе как они работают. И медицина тут не причём.
Второе название вероятностных деревьев решений это алгоритм AdaBoost.

Alex7
Alex7 в сообщении #1414023 писал(а):
Подскажите как random forest может принимать Nan? Или имеется ввиду Nan

Недостоверные данные следует выкидывать из датасета.

Но если очень надо, то перед подачей на классификатор вы размножаете снимки серий данных с NaN, заменив в них NaN случайными числами. Лучше конечно в равномерной степени заполнить все NaN на значениями позитивного подкрепления, негативного подкрепления.

 Профиль  
                  
 
 Re: Какие алгоритмы наиболее толерантны к пропускам в данных?
Сообщение07.09.2019, 20:55 


07/10/15

2400
Alex7 в сообщении #1414023 писал(а):
Подскажите как random forest может принимать Nan? Или имеется ввиду Nan заменять выбросом, типа -9999999?

Используя стандартные алгоритмы, Вам всё равно придётся заполнять пропуски. Использовать для заполнения неправдоподобные значения, типа -9999999, значит намеренно внести в данные максимально возможную ошибку и превратить наблюдения в выбросы. Традиционно, выбросы принято удалять, так как они сильно искажают результаты. Возможно это сделает за Вас сам алгоритм.
Если стоит задача сохранить как можно больше наблюдений, то наоборот, пропуски следует заполнять наиболее правдоподобными значениями. Вам уже предложили разные варианты.
Mihaylo в сообщении #1414007 писал(а):
5.4. Imputation of missing values
наверное один из лучших, но и самый сложный. Намного проще заменять просто средними значениями по выборке, или лучше медианными значениями, которые никак не зависят от пропусков.

-- 07.09.2019, 22:02 --

Alex7 уточните какое у Вас отношение числа наблюдений к количеству признаков. От этого очень многое зависит.

 Профиль  
                  
 
 Re: Какие алгоритмы наиболее толерантны к пропускам в данных?
Сообщение07.09.2019, 22:26 


02/05/18
45
Andrey_Kireew в сообщении #1414069 писал(а):
Alex7 уточните какое у Вас отношение числа наблюдений к количеству признаков. От этого очень многое зависит.

Примерно 10 тыс. наблюдений и около 150 признаков (различных). Практически все наблюдения содержат пропуски. Можно попробовать уменьшить матрицу признаков и сохранить только релевантные наблюдения. Но это сделает невозможным реальное использование.

Andrey_Kireew в сообщении #1414069 писал(а):
5.4. Imputation of missing values

Подумаю над этим, спасибо.

Буду рад, если у кого-то появятся ещё идеи.

 Профиль  
                  
 
 Re: Какие алгоритмы наиболее толерантны к пропускам в данных?
Сообщение07.09.2019, 22:32 


07/10/15

2400
Alex7 в сообщении #1414076 писал(а):
Примерно 10 тыс. наблюдений и около 150 признаков (различных)

это хорошая выборка, большая

а какова примерно частота пропусков в признаках?

 Профиль  
                  
 
 Re: Какие алгоритмы наиболее толерантны к пропускам в данных?
Сообщение07.09.2019, 22:39 


17/10/08

1313
Alex7 в сообщении #1414023 писал(а):
Подскажите как random forest может принимать Nan? Или имеется ввиду Nan заменять выбросом, типа -9999999?

Если пакет ругается на NaN, значит он его не принимает :D
Конкретно для случайного леса указанная вами замена вполне рациональна - выбросов вроде быть не должно.

(Оффтоп)

Теорию по Random Forest, помнится я открывал - там формул страниц на 300. Довольно трудно предсказать, как он себя поведет в зависимости от того, как будет решаться проблема пропусков. Аргументы, которые разные участники приводят, вполне рациональны, но, на мой взгляд, не так однозначны, как участники об этом говорят.

Припоминаю на Kaggle какое-то соревнование, где один участник (иранец) долгое время был наголову лучше остальных. Его упрашивали рассказать, как он это сделал; один из участников написал, что он не может спать уже несколько дней. Иранец над нами сжалился рассказал - дело было задолго до окончания соревнования. Тонкость заключалась в том, что переменные, разность которых содержали значимую информацию, имели значения 1 плюс/минус значения порядка ~1E-7. А всего переменных было в количестве до "едрени фени" - и глазами этот нюанс не виден. Обучающие пакеты не видели эту малую разницу. Иранец (кажется в линейной регрессии) поставил какие-то параметры, в результате которых удалось обучиться достаточно хорошо. Если поставить не те параметры - не работает. Random Forest, конечно, тоже не работал. И бустинг не работал. И нейросети не работали.
Это я к чему. Теория - это хорошо, но на практике вечно что-нибудь идет не так. По "формулам" все должно работать, а оно или не находит, или не сходится, или точность теряет... Все данные вроде есть, а пока что-нибудь не вычислишь из данных и не сунешь Random Forest, он не работает.
И еще одно. Может кто-то еще помнит, флаг публичных соревнований поднял Netflix, и у них была задача предсказания рейтинга фильма для конкретного клиента. Результат, равный наилучшему, показала одна из научных лабораторий (канадская, кажется). Они методично перепробовали "все" методы, и потом ансамблем из разных методов показали лучший результат.


Разных нюансов то полно. Например, проблема дисбаланса, когда классы с малым количество в обучающей выборке просто раздавливаются массовыми классами. Или несоответствие статистики обучающего множества данным в будущем. Если у ТС есть предположения, какие могут быть данные в будущем, то можно починить критерий обучения для улучшения практической точности. Или есть весьма значимые переменные, но встречаются они редко - для них потребуется регуляризация в зависимости от частоты наличия в обучающей выборке. На случайный лес для таких переменных надеяться не стоит. И т.д.

P.S. если данные не закрытые, или их можно анономизировать (для числовых данных обычно нужно переименовать колонки в field1, field2, ...) - то данные можно выложить. Коллектив посмотрит - прогресс качества может превзойти ожидания.

 Профиль  
                  
 
 Re: Какие алгоритмы наиболее толерантны к пропускам в данных?
Сообщение08.09.2019, 10:33 


02/05/18
45
Andrey_Kireew в сообщении #1414078 писал(а):
а какова примерно частота пропусков в признаках?

Около 30% от всех данных. Но опять же скажу, что это пропуски вызванные естественными причинами.

mserg в сообщении #1414079 писал(а):
Если пакет ругается на NaN, значит он его не принимает


Логично :D

mserg в сообщении #1414079 писал(а):
P.S. если данные не закрытые, или их можно анономизировать (для числовых данных обычно нужно переименовать колонки в field1, field2, ...) - то данные можно выложить. Коллектив посмотрит - прогресс качества может превзойти ожидания.


Большое спасибо, я на неделе попробую построить модель, и если не удастся получить вменяемых результатов, обращусь за помощью к сообществу.

 Профиль  
                  
 
 Re: Какие алгоритмы наиболее толерантны к пропускам в данных?
Сообщение08.09.2019, 10:48 
Аватара пользователя


18/12/17
126
Извиняюсь за "реплику из зала" (для обстоятельного ответа я не обладаю достаточными знаниями),
но в том же R есть отдельно NaN, и функция is.nan(), а также NA и функция is.na(). Разные вещи.
Первое - NaN - это следствие ошибок, например при попытках использовать вероятности, большие единицы. Там дальше рассчитывать нечего.
Второе - NA - это просто "Not available" - используется как раз для обозначения отсутствующих данных. Алгоритмы R, с которыми приходилось работать мне, в большинстве нормально его поддерживают. Это штатная "величина" для входных данных.

На "NaN", по-моему, любой алгоритм будет возмущаться.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 57 ]  На страницу Пред.  1, 2, 3, 4  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group