2014 dxdy logo

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

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




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


02/05/18
45
Xmas в сообщении #1414095 писал(а):
Первое - NaN - это следствие ошибок, например при попытках использовать вероятности, большие единицы.

В пакетах numpy и pandas отсутствующие данные записываются как nan. Не знал о такой разнице с R, я проверю на всякий случай, но по-моему не ошибаюсь.

-- 08.09.2019, 12:24 --

Вот выдержка из учебника Маккини, http://prntscr.com/p3awie
Действительно может возникнуть непонимание, между теми, кто использует разные среды :D
Спасибо, что обратили внимание!

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


18/12/17
126
Alex7,

Небольшое дополнение "с моей колокольни" :-) Поведение R.

Изображение

Это просто иллюстрация, что R различает NA и NaN. Ещё isna() и isnan() есть в octave/matlab. Они тоже различают.
А вот различает ли конкретный алгоритм - тут, видимо, только пробовать. :-)

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


17/10/08

1313
Не знаю как сейчас, но раньше случайный лес не принимал ни NaN, ни NA,- ветвления по условиям "isnan" и "isna" отсутствовали в реализации алгоритма. Реализация этого ветвления каких-то проблем не составляет, но этого не было сделано. Объяснение с точки зрения банальной эрудиции - ухудшение качества работы алгоритма, и поэтому требуется заполнить/аппроксимировать значениями, или бороться другими способами, как предлагалось выше.

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


18/12/17
126
Нет ли возможности изменить отношение к структуре данных?

Я не буду повторяться, что я не имею достаточных знаний. Это видно и без слов :-)

Но всё-таки. Исходная модель выглядит так, словно есть некий исходный "пациент", все 10 тыс. экземпляров которого одинаковые, как из инкубатора, и к разным экземплярам применялись, либо нет, какие-то побочные методы (одному - лечение от простуды, другому, скажем, липосакция). Но на деле ведь экземпляры не одинаковые. Худого не лечили от простуды не из прихоти, а потому, что у него её не было. А у кого-то другого в тех же условиях она возникла.

Что, если различия вынести в исходные данные, а в обработку пустить только общие для всех признаки? Исходный набор, конечно, сильно расщепится - получатся "пациент без простуды без липосакции", "пациент без простуды, но с липосакцией", "пациент с простудой, но без липосакции" и "пациент и с тем, и с другим".

Дальше посмотреть по дендрограмме, на каком уровне происходит различение. Если классификация различает, скажем, простуду и липосакцию на уровне "едва-едва заметно", а без того и другого - почти на вершине, то "простуду и липосакцию" можно будет объединить в один класс.

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

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


07/10/15

2400
Alex7 в сообщении #1414094 писал(а):
Около 30% от всех данных. Но опять же скажу, что это пропуски вызванные естественными причинами

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

Предложу один из вариантов, на мой взгляд весьма перспективный.
Выборка 10000х150, 30% пропусков (предположительно разбросаны случайным образом).
На первом этапе требуется найти такие сочетания признаков, в которых количество самих признаков будет максимальным, а количество пропусков минимальным. Конкретизирую: для 1 признака количество пропусков 30%, для 2-х оно может быть от 30% в лучшем случае, до 60% в худшем, для 3-х 30% в лучшем и 90% в худшем, и т.д. На сколько увеличится общее количество пропусков при добавлении каждого нового признака зависит как от его выбора, так и от природы данных. Но в среднем, оно так или иначе будет увеличиваться.
На втором этапе, на каждой найденной системе признаков требуется построить самостоятельный классификатор. При этом, все наблюдения с пропусками следует удалить. Чем больше признаков будет в выбранном сочетании, тем больше наблюдений придётся удалить, и тем менее достоверными будут результаты. С другой стороны, чем больше признаков будет в выбранном сочетании, тем более высокого качества классификации удастся достичь на обучающей выборке.
Более строго, для выбора оптимального сочетания признаков, нужен критерий, характеризующий качество классификации на неизвестных данных. Можно, например, использовать кроссвалидацию.
В результате, получится множество классификаторов, для разных сочетаний признаков, известными значениями точности и достоверности классификации. Кроме этого, нужно будет оценить статистическую взаимосвязь, между результатами классификации разных классификаторов (можно использовать анализ соответствий).
При классификации неизвестного наблюдения, из имеющегося множества классификаторов, выбираются классификаторы построенные на сочетаниях признаков, присутствующих в классифицируемом наблюдении. Выполняется классификация с помощью каждого из них и полученные результаты объединяются с учётом их статистической взаимосвязи.

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

Хотелось бы подчеркнуть, random forest который Вам настоятельно рекомендуют, не понимая всех нюансов, сам по себе, не решает проблему пропусков. Основная цель, преследуемая в этом алгоритме - повышение обобщающей способности. Это нужно, и это важно, но это не тот вопрос который Вы задали, и его следует рассматривать отдельно. Перед использованием random forest, как Вы уже наверное убедились, пропуски так или иначе необходимо чем то заполнить (либо алгоритм сделает это сам, так как ему вздумается).
Собственно, все содержательные ответы на Ваш вопрос, поступившие до этого момента, касались исключительно способа такого заполнения. Кто то предлагал использовать произвольные константы, кто то средние значения, особо одарённые - "напихать" случайных чисел в random forest (надо отдать должное - креативно). Но лучший результат, как я уже отмечал, может быть достигнут при использовании заполнения прогнозами (imputation), но как Вы справедливо отметили, с практическим использованием такого классификатора могут возникнуть сложности, так как непонятно, что подавать на входы при классификации неизвестных наблюдений. В комитете алгоритмов, построенных на разных сочетаниях признаков такой проблемы нет.

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


02/05/18
45
Xmas в сообщении #1414122 писал(а):
Что, если различия вынести в исходные данные, а в обработку пустить только общие для всех признаки? Исходный набор, конечно, сильно расщепится - получатся "пациент без простуды без липосакции", "пациент без простуды, но с липосакцией", "пациент с простудой, но без липосакции" и "пациент и с тем, и с другим".


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

Andrey_Kireew в сообщении #1414148 писал(а):
На первом этапе требуется найти такие сочетания признаков, в которых количество самих признаков будет максимальным, а количество пропусков минимальным. Конкретизирую: для 1 признака количество пропусков 30%, для 2-х оно может быть от 30% в лучшем случае, до 60% в худшем, для 3-х 30% в лучшем и 90% в худшем, и т.д. На сколько увеличится общее количество пропусков при добавлении каждого нового признака зависит как от его выбора, так и от природы данных. Но в среднем, оно так или иначе будет увеличиваться.


Кажется перспективная идея, попробую, спасибо.

Andrey_Kireew в сообщении #1414148 писал(а):
Хотелось бы подчеркнуть, random forest который Вам настоятельно рекомендуют, не понимая всех нюансов, сам по себе, не решает проблему пропусков.


Согласен, я планирую начать с GB над решающими деревьями.

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


10/03/16
3855
Aeroport
Andrey_Kireew в сообщении #1414148 писал(а):
Предложу один из вариантов, на мой взгляд весьма перспективный.
Выборка 10000х150, 30% пропусков (предположительно разбросаны случайным образом).
На первом этапе требуется найти такие сочетания признаков, в которых количество самих признаков будет максимальным, а количество пропусков минимальным. Конкретизирую: для 1 признака количество пропусков 30%, для 2-х оно может быть от 30% в лучшем случае, до 60% в худшем, для 3-х 30% в лучшем и 90% в худшем, и т.д. На сколько увеличится общее количество пропусков при добавлении каждого нового признака зависит как от его выбора, так и от природы данных. Но в среднем, оно так или иначе будет увеличиваться.
На втором этапе, на каждой найденной системе признаков требуется построить самостоятельный классификатор.


Что то вы быстро переобулись -- насколько я помню, до недавнего времени вы были сторонником заполнения пропусков.

Andrey_Kireew в сообщении #1414148 писал(а):
Хотелось бы подчеркнуть, random forest который Вам настоятельно рекомендуют, не понимая всех нюансов, сам по себе, не решает проблему пропусков.


Сообразить, что концепция бустинга жизнеспособнее интерполяции, быстро выдать ее за свою (см. цитату выше), попутно обосрав первого кто предложил идею -- это красиво и блаародно.

Alex7 в сообщении #1414163 писал(а):
я планирую начать с GB над решающими деревьями.


Вы можете сколь угодно долго топтаться возле решающего леса, применяя костыли типа градиентного бустинга над деревьями. Вам это надо?

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


17/10/08

1313
Насколько я понял, речь идет о пакете XGBoost.
Присоединяюсь к коллегам - его стоит попробовать. Он побеждал на Kaggle, и сам я его разок пробовал для реальной задачи (правда в PROD не пошло). Он также позволяет показать наиболее значимые переменные.

Он значения nan/na не принимает (по крайней мере, когда я им пользовался). Но, как пишут, можно сделать финт ушами. Использовать не полную матрицу, а разряженную, где выброшены незаполненные ячейки. Исходя такого понимания разряженной матрицы, нули, если они есть в исходных данных, в разряженную матрицу нужно включить.

Но, как я уже говорил ранее, всегда можно найти данные, на которых "любая метода" окажется лучше/хуже другой.
Ну, вот, например, XGBoost is not black magic. And not imputing missing values isn’t always the right choice.
:-)

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


10/03/16
3855
Aeroport
mserg в сообщении #1414222 писал(а):
XGBoost is not black magic.


It's white magic ) А можете дать ссылку насчет решающего леса, помните где вы говорили про 300 страниц формул?

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


07/10/15

2400
ozheredov в сообщении #1414214 писал(а):
насколько я помню, до недавнего времени вы были сторонником заполнения пропусков

Видимо, у Вас плохая память, почитайте моё первое сообщение, в нём предложено 3 очевидных варианта решения и интерполяция всего лишь 1 из них. Возможно, есть и другие пути, я этого не отрицаю. Какой метод будет лучше, наперёд сказать невозможно, нужно проверять на конкретных данных. Я не сторонник интерполяции или чего то ещё, я сторонник научного подхода, основанного на логике и эксперименте. А оценивать качество метода, основываясь на каких то личных предпочтениях, как то победа кого то где то на каких то соревнованиях, это уже не наука.
ozheredov в сообщении #1414214 писал(а):
Сообразить, что концепция бустинга жизнеспособнее интерполяции, быстро выдать ее за свою

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

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

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

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


02/05/18
45
ozheredov в сообщении #1414214 писал(а):
Вы можете сколь угодно долго топтаться возле решающего леса, применяя костыли типа градиентного бустинга над деревьями. Вам это надо?


Мне нужен результат, с бустинга начинаю, потому-что лучше всего его знаю, если не сработает буду идти по другому пути.

mserg в сообщении #1414222 писал(а):
Насколько я понял, речь идет о пакете XGBoost
.


Лично я прикипел к пакету CatBoost.

mserg в сообщении #1414222 писал(а):
XGBoost is not black magic. And not imputing missing values isn’t always the right choice.


:appl:

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


07/10/15

2400
Alex7 в сообщении #1414235 писал(а):
Мне нужен результат, с бустинга начинаю, потому-что лучше всего его знаю, если не сработает буду идти по другому пути

Всё правильно, если не начать, то уж никогда ничего не получится. А так, в процессе многое само собой может прояснится.

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


10/03/16
3855
Aeroport
Andrey_Kireew в сообщении #1414225 писал(а):
я сторонник научного подхода, основанного на логике и эксперименте


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

Andrey_Kireew в сообщении #1414225 писал(а):
А оценивать качество метода, основываясь на каких то личных предпочтениях, как то победа кого то где то на каких то соревнованиях, это уже не наука.


Спорное утверждение, но я не настаиваю. Был рукомахательный разговор ни о чём, я вклинился в соответствующем стиле.

Andrey_Kireew в сообщении #1414225 писал(а):
Если я не прав, то пожалуйста приведите пример использования бустинга (или беггинга) именно для этих целей (разумеется, при этом метод должен сохранять своё изначальное название), это расширит мой кругозор.


Что именно вы предлагаете мне сделать? Начать рыть интернет в поисках подходящей литературы? Выложить свой код? Засесть за решение простенькой учебной задачки, демонстрирующей преимущества бустинга над заполнением пропусков?

Andrey_Kireew в сообщении #1414225 писал(а):
Наивно было бы полагать, что кто то просто так выставит действительно оригинальную и стоящую идею на всеобщее обозрение.


Вот-вот. Еще раз - я обеими руками-ногами за развитие темы в сторону формул и результатов численного эксперимента

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


07/10/15

2400
ozheredov в сообщении #1414269 писал(а):
Что именно вы предлагаете мне сделать? Начать рыть интернет в поисках подходящей литературы?

Это как раз ни к чему. Но если Вы знаете конкретные примеры, то можно было бы их привести в подтверждение своих слов, чтобы снять вопрос.

ozheredov в сообщении #1414269 писал(а):
Засесть за решение простенькой учебной задачки, демонстрирующей преимущества бустинга над заполнением пропусков?

Вы встречали алгоритм бустинга, который может работать с пропущенными значениями без их предварительного заполнения? Если да, то сообщите пожалуйста об ТС, ведь у него проблема именно с этим. Может есть программный пакет, в котором он реализован? Но мне почему то кажется, что так же как и Random Forest, любой алгоритм бустинга всё же требует заполнения пропусков, или выполняет его самостоятельно. Какие у него могут быть преимущества или недостатки, если это совершенно другая процедура, преследующая совершенно другие цели? Какие преимущества у смартфона перед микроволновкой?

А то, что я описал - никакой не бустинг, у этих алгоритмов общего не больше чем у вороны и самолёта.

-- 09.09.2019, 21:31 --

Уважаемый ozheredov, мне вдруг стало интересно, а почему Вы считаете, что этот алгоритм больше похож на бустинг а не беггинг? Ведь там тоже используется комитет.

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


17/10/08

1313
ozheredov в сообщении #1414224 писал(а):
А можете дать ссылку насчет решающего леса, помните где вы говорили про 300 страниц формул?

Приврал несколько, 225 страниц... Это работа Gilles Louppe, называется "UNDERSTANDING RANDOM FORESTS"
См. ссылку за 2014 год. Я читал выборочно и "все" забыл :-)

Andrey_Kireew в сообщении #1414277 писал(а):
Вы встречали алгоритм бустинга, который может работать с пропущенными значениями без их предварительного заполнения?

Хотя вопрос не ко мне, отвечу: см. выше "финт ушами" про разряженную матрицу. Все же привыкли, что разряженная матрица подразумевает хранение только ненулевых значений. А эти подразумевают хранение в "разряженной" матрице значений, не являющихся пропусками - по крайней мере это так описывается в интернетах. Поэтому можно сказать, что XGBoost принимает пропуски, хотя NaN ему не скормить.

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

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

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



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

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


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

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