Минутка английского. Как читается слово indictment (обвинение)?
Anonymous Quiz
34%
Индайтмент
0%
Индэйтмент
42%
Индиктмент
24%
Индикмент
#featureselection #vorontsov
Понравилась эвристика маятника для жадного алгоритма Add-Del. Надо будет реализовать в Диогене.
Также очень интересен полный перебор DFS+отсечение методом ветвей и границ. Они тоже выигрывают от начального упорядочивания факторов по силе связи с таргетом.
Про BFS/МГУА крайне интересно. Вот кто из вас до этого видоса знал про философский принцип неокончательных решений Габора? Я помню, в 2000-х прям этот МГУА и Ивахненко были на слуху. Я тогда не очень понимал, что это вообще, но термин запомнился. Похоже, у Мастерса этот подход называется Forward Selection Preserving Subsets.
В разделе про генетик Константин Вячеславович вообще классно пошутил ) Что-то я вдруг подумал, генетические алгоритмы включают только "положительные" операции: скрещивание, мутация. Но ведь в живой природе популяция регулярно просеивается хищниками, конкурентами, природными катастрофами, в результате которых выживают особи пропорционально их приспособленности. Нет ли смысла в операторе "смерти", который случайным образом берёт микрогруппу особей и убивает 1-2 с наименьшей приспособленностью (ну типа, погнались за стаей зебр львы, 2 самых слабых поймали)?
Кто мне подскажет, математики кайфуют от вставки рукописных букв из неведомых алфавитов, да? ) Чем зло#бучее завитушки птичьего языка, тем страшнее выглядят формулы для непосвящённых, а работа в целом считается профессиональнее? )
https://www.youtube.com/watch?v=n4qKbFd25Sk
Понравилась эвристика маятника для жадного алгоритма Add-Del. Надо будет реализовать в Диогене.
Также очень интересен полный перебор DFS+отсечение методом ветвей и границ. Они тоже выигрывают от начального упорядочивания факторов по силе связи с таргетом.
Про BFS/МГУА крайне интересно. Вот кто из вас до этого видоса знал про философский принцип неокончательных решений Габора? Я помню, в 2000-х прям этот МГУА и Ивахненко были на слуху. Я тогда не очень понимал, что это вообще, но термин запомнился. Похоже, у Мастерса этот подход называется Forward Selection Preserving Subsets.
В разделе про генетик Константин Вячеславович вообще классно пошутил ) Что-то я вдруг подумал, генетические алгоритмы включают только "положительные" операции: скрещивание, мутация. Но ведь в живой природе популяция регулярно просеивается хищниками, конкурентами, природными катастрофами, в результате которых выживают особи пропорционально их приспособленности. Нет ли смысла в операторе "смерти", который случайным образом берёт микрогруппу особей и убивает 1-2 с наименьшей приспособленностью (ну типа, погнались за стаей зебр львы, 2 самых слабых поймали)?
Кто мне подскажет, математики кайфуют от вставки рукописных букв из неведомых алфавитов, да? ) Чем зло#бучее завитушки птичьего языка, тем страшнее выглядят формулы для непосвящённых, а работа в целом считается профессиональнее? )
https://www.youtube.com/watch?v=n4qKbFd25Sk
YouTube
017. Методы отбора признаков. Отбор признаков - К. В. Воронцов
Курс "Машинное обучение"
🤩1
#ui #gmail #google
В очередной раз заметил, как же по-конченому сделана работа с письмами в веб-интерфейсе gmail. По умолчанию у них включается conversation view, который не просто показывает всю цепочку переписки с адресатом (что было бы удобно), но и за каким-то лешим при ответе цитирует вообще всю историю переписки с данным адресатом. Причём удалить цитирование невозможно. И эти полотна текста реально туда-сюда отсылаются. Найти, где эта херня отключается - задача не из простых. Что это, тупость, безразличие, или саботаж разработчиков?
В очередной раз заметил, как же по-конченому сделана работа с письмами в веб-интерфейсе gmail. По умолчанию у них включается conversation view, который не просто показывает всю цепочку переписки с адресатом (что было бы удобно), но и за каким-то лешим при ответе цитирует вообще всю историю переписки с данным адресатом. Причём удалить цитирование невозможно. И эти полотна текста реально туда-сюда отсылаются. Найти, где эта херня отключается - задача не из простых. Что это, тупость, безразличие, или саботаж разработчиков?
#ai #handwriting #ocr
"Команде специалистов Университета искусственного интеллекта имени Мухаммеда бен Заида в ОАЭ, как сообщает Bloomberg, уже удалось создать профильную нейросеть и опробовать её в деле. Эту разработку авторам даже удалось запатентовать в юрисдикции США. Пока использование данной нейросети сторонними клиентами не подразумевается, и авторы разработки уже выражают опасения по поводу способности недобросовестных пользователей применять её во вред обществу.
Прежде чем этот инструмент начнёт распространяться, по мнению разработчиков, необходимо создать защитные механизмы, предотвращающие его некорректное с этической точки зрения применение. «Это всё равно что создать антивирус для вируса», — пояснили представители университета. Подобные соображения не мешают создателям нейросети планировать её коммерческое применение в течение ближайших месяцев, они уже ищут партнёров для реализации сопутствующего потенциала данной технологии. Помимо прочего, такая система могла бы распознавать рукописный текст — например, для обработки записей в историях болезни пациентов. На генерируемых нейросетью рукописях можно было бы обучать другие подобные системы. Пока нейросеть способна распознавать и генерировать рукописный текст на английском и французском языках, но в перспективе разработчики хотели бы добавить к ним и арабский."
https://3dnews.ru/1098802/iskusstvenniy-intellekt-skoro-smoget-pravdopodobno-imitirovat-pocherk-cheloveka
"Команде специалистов Университета искусственного интеллекта имени Мухаммеда бен Заида в ОАЭ, как сообщает Bloomberg, уже удалось создать профильную нейросеть и опробовать её в деле. Эту разработку авторам даже удалось запатентовать в юрисдикции США. Пока использование данной нейросети сторонними клиентами не подразумевается, и авторы разработки уже выражают опасения по поводу способности недобросовестных пользователей применять её во вред обществу.
Прежде чем этот инструмент начнёт распространяться, по мнению разработчиков, необходимо создать защитные механизмы, предотвращающие его некорректное с этической точки зрения применение. «Это всё равно что создать антивирус для вируса», — пояснили представители университета. Подобные соображения не мешают создателям нейросети планировать её коммерческое применение в течение ближайших месяцев, они уже ищут партнёров для реализации сопутствующего потенциала данной технологии. Помимо прочего, такая система могла бы распознавать рукописный текст — например, для обработки записей в историях болезни пациентов. На генерируемых нейросетью рукописях можно было бы обучать другие подобные системы. Пока нейросеть способна распознавать и генерировать рукописный текст на английском и французском языках, но в перспективе разработчики хотели бы добавить к ним и арабский."
https://3dnews.ru/1098802/iskusstvenniy-intellekt-skoro-smoget-pravdopodobno-imitirovat-pocherk-cheloveka
3DNews - Daily Digital Digest
Искусственный интеллект скоро сможет правдоподобно имитировать почерк человека
Уже сейчас нейросети способны правдоподобно воссоздавать голос человека и имитировать его мимику в соответствии с якобы произносимым текстом. Как считают учёные, вскоре искусственному интеллекту будут по плечу и задачи правдоподобного воспроизведения почерка…
✍3
#featureselection #hpo #hpt #global #optimization #mbho
Недавно я начал тестирование библиотек глобальной оптимизации для одномерной задачи отбора признаков.
Сформировал датасет, проверил самые известные в ds тусовке optuna, skopt, hyperopt (см. по тэгу #featureselection).
Ну и, наконец, представляю своей алгоритм. Назван он Model-based heuristic optimization (MBHO), и по сути похож на байесовскую оптимизацию гауссовым процессом.
Только гауссов процесс я заменил на более универсальный бустинг (опционально с квантилями), а поиск кандидатов ведётся вместо Expected Improvement, Probability of improvement, Upper Confidence Bound такими достаточно простыми эвристиками:
1) на каждом шаге с опр. вероятностью выбирается режим, exploration или exploitation
2) в exploration мы рекомендуем проверить самые неисследованные точки - лежащие дальше всего от уже проверенных, + имеющие самую высокую неопределённость в случае использования квантилей
3) в exploitation режиме мы строим для всей области поиска прогноз, и исследуем точку с самым высоким прогнозом. если такая уже проверена, дополнительно учитываем расстояния от уже проверенных точек и неопределённости.
4) есть ещё несколько мелких опций
Почему гауссов процесс меня не устроил? Да он тупо зачастую плохо приближает данные, и качество решения, как следствие, отвратительное (пример будет в комментах). + долго работает.
Какие есть ещё фишки:
1) закодил 4 метода определения "затравочных" кандидатов, Random, Equidistant, Fibonacci, ReversedFibonacci. В какой-то мере это аналоги soblo/lhe и прочего из skopt.
2) есть возможность строить визуализацию поиска. видно, какие точки уже проверены, как к ним фиттится модель и какие даёт прогнозы, как рассчиталась перспективность каждого кандидата в зависимости от настроек, и какой кандидат в итоге выбран.
К результатам. В бенче я в основном смотрел на процент случаев, когда оптимизатор нашёл истинный максимум.
Для 20 итераций лидером была - optuna/tpe с 69%, для 50 - hyperopt/atpe с 81%. skopt этих показателей не смог превысить.
Показатели моего MBHO: 20 итераций - 70%, 50 итераций - 100%. По времени медленнее оптуны, но быстрее hyperopt/skopt. То есть моё решение победило 3 известные либы оптимизации в одномерном случае.
Да, можно возразить, что я заточил алгоритм под свои конкретные задачи, или вообще старался выставить оппонентов в невыгодном свете, но
1) старался возможности конкурентов исследовать по-полной
2) у них же тоже было тестирование на профильных задачах, им никто не мешал тоже тестироваться на одномерном случае
3) у моего алгоритма достаточно много параметров, и он как раз-таки остаётся недоисследованным. все вычисления я провёл навскидку с просто "разумными" значениями, наверняка можно натюнить лучшее время работы и точность.
Ну и моя основная мотивация, зачем я всё это начинал: в предварительном тестировании встроенные важности признаков бустингов себя хорошо показали, FS по таким важностям разумно делать только с RFECV, но в sklearn RFECV делает полный перебор (да и не работает с категориями), а на практике у меня десятки тысяч признаков и большие датасеты.
Получается, благодаря новому MBHO оптимизатору я смогу просчитывать лишь небольшой % от признаков и при этом находить глобально оптимальные сочетания.
В комментах картинки. Лучшим методом инициализации оказался эквидистантный (что в принципе логично, позволяет получить максимум информации). И что особенно интересно, наличие оценки неопределённости с помощью квантильной регрессии не супер важно - да, улучшает результат, но эвристика с расстояниями работает и сама по себе хорошо.
Реализация MBHO заняла ~700 строк кода, поддерживается максимизация и минимизация (в отличие от hyperopt, где надо извращаться с негацией функции). Правда, нет асинхронности и многопоточности.
Недавно я начал тестирование библиотек глобальной оптимизации для одномерной задачи отбора признаков.
Сформировал датасет, проверил самые известные в ds тусовке optuna, skopt, hyperopt (см. по тэгу #featureselection).
Ну и, наконец, представляю своей алгоритм. Назван он Model-based heuristic optimization (MBHO), и по сути похож на байесовскую оптимизацию гауссовым процессом.
Только гауссов процесс я заменил на более универсальный бустинг (опционально с квантилями), а поиск кандидатов ведётся вместо Expected Improvement, Probability of improvement, Upper Confidence Bound такими достаточно простыми эвристиками:
1) на каждом шаге с опр. вероятностью выбирается режим, exploration или exploitation
2) в exploration мы рекомендуем проверить самые неисследованные точки - лежащие дальше всего от уже проверенных, + имеющие самую высокую неопределённость в случае использования квантилей
3) в exploitation режиме мы строим для всей области поиска прогноз, и исследуем точку с самым высоким прогнозом. если такая уже проверена, дополнительно учитываем расстояния от уже проверенных точек и неопределённости.
4) есть ещё несколько мелких опций
Почему гауссов процесс меня не устроил? Да он тупо зачастую плохо приближает данные, и качество решения, как следствие, отвратительное (пример будет в комментах). + долго работает.
Какие есть ещё фишки:
1) закодил 4 метода определения "затравочных" кандидатов, Random, Equidistant, Fibonacci, ReversedFibonacci. В какой-то мере это аналоги soblo/lhe и прочего из skopt.
2) есть возможность строить визуализацию поиска. видно, какие точки уже проверены, как к ним фиттится модель и какие даёт прогнозы, как рассчиталась перспективность каждого кандидата в зависимости от настроек, и какой кандидат в итоге выбран.
К результатам. В бенче я в основном смотрел на процент случаев, когда оптимизатор нашёл истинный максимум.
Для 20 итераций лидером была - optuna/tpe с 69%, для 50 - hyperopt/atpe с 81%. skopt этих показателей не смог превысить.
Показатели моего MBHO: 20 итераций - 70%, 50 итераций - 100%. По времени медленнее оптуны, но быстрее hyperopt/skopt. То есть моё решение победило 3 известные либы оптимизации в одномерном случае.
Да, можно возразить, что я заточил алгоритм под свои конкретные задачи, или вообще старался выставить оппонентов в невыгодном свете, но
1) старался возможности конкурентов исследовать по-полной
2) у них же тоже было тестирование на профильных задачах, им никто не мешал тоже тестироваться на одномерном случае
3) у моего алгоритма достаточно много параметров, и он как раз-таки остаётся недоисследованным. все вычисления я провёл навскидку с просто "разумными" значениями, наверняка можно натюнить лучшее время работы и точность.
Ну и моя основная мотивация, зачем я всё это начинал: в предварительном тестировании встроенные важности признаков бустингов себя хорошо показали, FS по таким важностям разумно делать только с RFECV, но в sklearn RFECV делает полный перебор (да и не работает с категориями), а на практике у меня десятки тысяч признаков и большие датасеты.
Получается, благодаря новому MBHO оптимизатору я смогу просчитывать лишь небольшой % от признаков и при этом находить глобально оптимальные сочетания.
В комментах картинки. Лучшим методом инициализации оказался эквидистантный (что в принципе логично, позволяет получить максимум информации). И что особенно интересно, наличие оценки неопределённости с помощью квантильной регрессии не супер важно - да, улучшает результат, но эвристика с расстояниями работает и сама по себе хорошо.
Реализация MBHO заняла ~700 строк кода, поддерживается максимизация и минимизация (в отличие от hyperopt, где надо извращаться с негацией функции). Правда, нет асинхронности и многопоточности.
🔥5
Forwarded from asisakov
Готовил для вас материал по PSI и VIF. И нашел интересную статью с валидацией ML моделей. Решил немного ее пересказать и добавить свое видение.
Для чего нужна валидация модели - максимально снизить модельный риск (вероятность полученияя недостоверных прогнозов, несоответствие заявленным метрикам, банальное устаревание моделей или неправильный вывод в прод).
А почему нам недостаточно простой оценки на отложенных выборках?
1. Распределение данных может кардинально измениться от того,что было на тренировке (например, статистически значимо изменилась доля целевых случаев)
2. Оценкой общих метрик работы модели невозможно оценить изменение отдельных входных признаков, их релевантность модели. Также сложно хочется видеть результаты на корнер-кейсах.
3. Есть вероятность попадания в финальный список фичей признака, не соответствующего логике бизнеса.
Что же нам важно оценивать на валидации?
1. В принципе скор модели и его стабильность. Он не должен быть ниже (выше) определенного порога, и при этом должен быть стабильным нна разных выборках (TRAIN, OUT-OF-SAMPLE, OUT-OF-TIME)
2. Стабильность признаков. Здесь как раз и применяется критерий PSI для поиска таких моментов, чтобы у нас вдруг фичи на трейне и OOT не отличались своим распределением. Иначе модель училась на одних входах, а предсказывает на других.
3. Калибровка вероятностей на выходе моделей. Буквально можно сформулировать как: mean(y') ~ mean(y). Нужно для понимания того, что модель в среднем формирует те же вероятности наступления целевых событий
4. В статье еще написано про Концентрацию. Это очень близко к пункту с калибровкой, поэтому я бы этот пункт переформулировал это как некоторый баланс по попаданию в бакеты по вероятностям.
Ещё можно добавить посегментный анализ предиктов модели, но это не обязательно для валидации, хотя очень важно для аналитики.
Там внутри есть классная табличка по тестам.
Это были количественные тесты. Существуют ещё качественные, которые связаны с разработкой именно модели. Тут условно валидатору надо попробовать опровергнуть дизайн модели и вообще ее обучение и выбор признаков, но при этом предложить лучший подход на тех же данных. Если это удаётся, то модель возвращают в разработку. Если нет, то считайте модель прошла валидацию (очевидно, что это не гарантирует наилучший результат). Помимо этого конечно же должна быть качественная документация и воспроизводимость обучения модели.
Интересно описан подход с Model Performance Predictor, однако я особо эти штуки не делал, хотя по логике это примерно как дополнительно обучить модель GARCH, чтобы оценить волатильность метрик в будущем.
В заключение есть хорошая табличка с типами тестов, применимых для валидации.
В целом, статья неплохая
#ml
Для чего нужна валидация модели - максимально снизить модельный риск (вероятность полученияя недостоверных прогнозов, несоответствие заявленным метрикам, банальное устаревание моделей или неправильный вывод в прод).
А почему нам недостаточно простой оценки на отложенных выборках?
1. Распределение данных может кардинально измениться от того,что было на тренировке (например, статистически значимо изменилась доля целевых случаев)
2. Оценкой общих метрик работы модели невозможно оценить изменение отдельных входных признаков, их релевантность модели. Также сложно хочется видеть результаты на корнер-кейсах.
3. Есть вероятность попадания в финальный список фичей признака, не соответствующего логике бизнеса.
Что же нам важно оценивать на валидации?
1. В принципе скор модели и его стабильность. Он не должен быть ниже (выше) определенного порога, и при этом должен быть стабильным нна разных выборках (TRAIN, OUT-OF-SAMPLE, OUT-OF-TIME)
2. Стабильность признаков. Здесь как раз и применяется критерий PSI для поиска таких моментов, чтобы у нас вдруг фичи на трейне и OOT не отличались своим распределением. Иначе модель училась на одних входах, а предсказывает на других.
3. Калибровка вероятностей на выходе моделей. Буквально можно сформулировать как: mean(y') ~ mean(y). Нужно для понимания того, что модель в среднем формирует те же вероятности наступления целевых событий
4. В статье еще написано про Концентрацию. Это очень близко к пункту с калибровкой, поэтому я бы этот пункт переформулировал это как некоторый баланс по попаданию в бакеты по вероятностям.
Ещё можно добавить посегментный анализ предиктов модели, но это не обязательно для валидации, хотя очень важно для аналитики.
Там внутри есть классная табличка по тестам.
Это были количественные тесты. Существуют ещё качественные, которые связаны с разработкой именно модели. Тут условно валидатору надо попробовать опровергнуть дизайн модели и вообще ее обучение и выбор признаков, но при этом предложить лучший подход на тех же данных. Если это удаётся, то модель возвращают в разработку. Если нет, то считайте модель прошла валидацию (очевидно, что это не гарантирует наилучший результат). Помимо этого конечно же должна быть качественная документация и воспроизводимость обучения модели.
Интересно описан подход с Model Performance Predictor, однако я особо эти штуки не делал, хотя по логике это примерно как дополнительно обучить модель GARCH, чтобы оценить волатильность метрик в будущем.
В заключение есть хорошая табличка с типами тестов, применимых для валидации.
В целом, статья неплохая
#ml
#ai #medicine #health #google
"Система под названием Articulate Medical Intelligence Explorer (AMIE) представляет собой большую языковую модель, предназначенную для сбора медицинских данных и ведения клинических бесед. AMIE разработана, чтобы анализировать предлагаемые пациентами симптомы, задавать дополнительные вопросы и прогнозировать диагнозы.
В ходе тестирования были выбраны 20 добровольцев, играющих роль пациентов и якобы страдающих некими заболеваниями, а также 20 профессиональных врачей — специалистов по первичной медицинской помощи, отвечающих за фактор человеческого контакта. Пациенты не знали, с кем переписывались: с ИИ или настоящими врачами. И их попросили оценить качество взаимодействия вслепую.
В рамках эксперимента были разыграны 149 сценариев, и выяснилось, что пациенты предпочитали общаться с AMIE, а не настоящими врачами. Участники заявили, что чат-бот лучше понял их проблемы и дал более чуткие, ясные и профессиональные ответы. AMIE также более точно диагностировал медицинские проблемы. Но это не значит, что чат-бот оказывает медицинскую помощь эффективнее настоящего врача, пояснили в Google."
https://3dnews.ru/1098896/meditsinskiy-ii-google-okazalsya-chelovechnee-givih-vrachey-no-ne-vsyo-tak-prosto
"Система под названием Articulate Medical Intelligence Explorer (AMIE) представляет собой большую языковую модель, предназначенную для сбора медицинских данных и ведения клинических бесед. AMIE разработана, чтобы анализировать предлагаемые пациентами симптомы, задавать дополнительные вопросы и прогнозировать диагнозы.
В ходе тестирования были выбраны 20 добровольцев, играющих роль пациентов и якобы страдающих некими заболеваниями, а также 20 профессиональных врачей — специалистов по первичной медицинской помощи, отвечающих за фактор человеческого контакта. Пациенты не знали, с кем переписывались: с ИИ или настоящими врачами. И их попросили оценить качество взаимодействия вслепую.
В рамках эксперимента были разыграны 149 сценариев, и выяснилось, что пациенты предпочитали общаться с AMIE, а не настоящими врачами. Участники заявили, что чат-бот лучше понял их проблемы и дал более чуткие, ясные и профессиональные ответы. AMIE также более точно диагностировал медицинские проблемы. Но это не значит, что чат-бот оказывает медицинскую помощь эффективнее настоящего врача, пояснили в Google."
https://3dnews.ru/1098896/meditsinskiy-ii-google-okazalsya-chelovechnee-givih-vrachey-no-ne-vsyo-tak-prosto
3DNews - Daily Digital Digest
Медицинский ИИ Google оказался человечнее живых врачей, но не всё так просто
Google поделилась результатами исследования, в рамках которого установила, что основанный на искусственном интеллекте чат-бот в переписке более эффективно диагностирует медицинские заболевания и более гуманно сообщает о них пациентам, чем настоящие врачи.
#featureselection #selectfrommodel #rfe #rfecv #diogenes
Ч. 1
Как работают embedded, filters и wrappers подходы к отбору признаков, что лучше использовать в бою, и почему sklearn-овская реализация RFECV недостаточно хороша?
embedded (встроенные) делают отбор признаков частью процесса обучения модели (к примеру, используя специализированные функции потерь). К примеру, L-1 регуляризация в Lasso и ElasticNet регресиях способна занулять коэффициент при факторах и тем самым полностью исключать их из работы.
плюсы: удобство, не надо создавать отдельный FS компонент, органичная интеграция в основной алгоритм. минусы: мало моделей с поддержкой embedded.
wrappers (обёртки) для оценки подмножеств факторов применяет отдельную предсказательную модель и внешний критерий. Критерием могут быть как непосредственно ML метрики(обычно на отложенной выборке), так и относительные важности признаков.
плюсы: позволяет оценивать большие подмножества/группы факторов; универсальность, работает со всеми базовыми моделями. минусы: большое время работы, пропорциональное количеству факторов.
filters (фильтры) вместо дорогой в обучении предсказательной модели используют более простую вычислительно оценку наличия связи между фактором (или небольшой группой факторов) и таргетом. Это может быть коэффициент линейной корреляция или взаимной информации. Фильтры могут быть простейшие, независимые по 1 переменной, или более сложные, по нескольким и даже с учётом внутренней избыточности (см #MRMR). Иногда рассматривается просто информационное содержание (энтропия) фактора, без связи с таргетом.
плюсы: быстрый; универсальный. минусы: проблемы с одновременным учётом больше 2-3 факторов.
Для полноты картины, есть ещё полный перебор подмножеств признаков, но в современных реалиях это скорее академическое упражнение, разве что у Вас в какой-то специфической задаче датасет и правда содержит не больше 5-6 факторов.
На текущий момент, по моему скромному опыту, для задач с большим (сотни,тысячи, ++) кол-вом признаков предпочтительным решением кажутся обёрточные (wrappers) методы с привлечением информации о важности признаков. Последняя зачастую довольно точна и полезна, может учитывать нелинейности и внутренние связи (особенно в современных бустингах), и позволяет заменить крайне дорогостоящий полный перебор/дообучение простым ранжированием важностей.
Давайте рассмотрим (в порядке роста изощрённости) обёрточные алгоритмы FS, использующий важности признаков.
SelectFromModel(estimator,n_features_to_select) обучает модель лишь 1 раз, и за один шаг сразу отбрасывает все низкорейтинговые признаки, чтобы оставить только нужное пользователю число фичей.
RFE(estimator,n_features_to_select) (Recursive Feature Elimination) можно рассматривать как улучшение SelectFromModel: RFE сделает то же самое, но не за 1 ход, а постепенно, итеративно отбрасывая по N самых слабых признаков и переобучая модель, чтобы использовать дальше уже новые важности признаков. Идея в том, что удаление признаков может вести к тому, что относительные важности оставшихся достаточно сильно изменятся, и RFE как раз сможет эти перетасовки учесть.
У обоих алгоритмов есть недостаток: пользователю нужно знать заранее, какое число признаков оставить, а ему это знать обычно неоткуда.
RFECV (RFE with Cross-Validation) решает эту проблему: вместо строгого n_features_to_select, у него есть параметр min_features_to_select. Входные данные RFECV разбивает на несколько train/test фолдов, и для каждого train фолда в отдельности просто запускает старого добого RFE(n_features_to_select=min_features_to_select). RFE всё так же проходится по числу оставленных признаков сверху вниз, но теперь дополнительно каждый набор признаков скорится на тестовом фолде.
По итогу, best_n_features с лучшим средним скором по всем тестовым фолдам и возвращается как ответ, а конкретные признаки выбираются финальным запуском RFE(n_features_to_select=best_n_features) уже на полном входном датасете.
Ч. 1
Как работают embedded, filters и wrappers подходы к отбору признаков, что лучше использовать в бою, и почему sklearn-овская реализация RFECV недостаточно хороша?
embedded (встроенные) делают отбор признаков частью процесса обучения модели (к примеру, используя специализированные функции потерь). К примеру, L-1 регуляризация в Lasso и ElasticNet регресиях способна занулять коэффициент при факторах и тем самым полностью исключать их из работы.
плюсы: удобство, не надо создавать отдельный FS компонент, органичная интеграция в основной алгоритм. минусы: мало моделей с поддержкой embedded.
wrappers (обёртки) для оценки подмножеств факторов применяет отдельную предсказательную модель и внешний критерий. Критерием могут быть как непосредственно ML метрики(обычно на отложенной выборке), так и относительные важности признаков.
плюсы: позволяет оценивать большие подмножества/группы факторов; универсальность, работает со всеми базовыми моделями. минусы: большое время работы, пропорциональное количеству факторов.
filters (фильтры) вместо дорогой в обучении предсказательной модели используют более простую вычислительно оценку наличия связи между фактором (или небольшой группой факторов) и таргетом. Это может быть коэффициент линейной корреляция или взаимной информации. Фильтры могут быть простейшие, независимые по 1 переменной, или более сложные, по нескольким и даже с учётом внутренней избыточности (см #MRMR). Иногда рассматривается просто информационное содержание (энтропия) фактора, без связи с таргетом.
плюсы: быстрый; универсальный. минусы: проблемы с одновременным учётом больше 2-3 факторов.
Для полноты картины, есть ещё полный перебор подмножеств признаков, но в современных реалиях это скорее академическое упражнение, разве что у Вас в какой-то специфической задаче датасет и правда содержит не больше 5-6 факторов.
На текущий момент, по моему скромному опыту, для задач с большим (сотни,тысячи, ++) кол-вом признаков предпочтительным решением кажутся обёрточные (wrappers) методы с привлечением информации о важности признаков. Последняя зачастую довольно точна и полезна, может учитывать нелинейности и внутренние связи (особенно в современных бустингах), и позволяет заменить крайне дорогостоящий полный перебор/дообучение простым ранжированием важностей.
Давайте рассмотрим (в порядке роста изощрённости) обёрточные алгоритмы FS, использующий важности признаков.
SelectFromModel(estimator,n_features_to_select) обучает модель лишь 1 раз, и за один шаг сразу отбрасывает все низкорейтинговые признаки, чтобы оставить только нужное пользователю число фичей.
RFE(estimator,n_features_to_select) (Recursive Feature Elimination) можно рассматривать как улучшение SelectFromModel: RFE сделает то же самое, но не за 1 ход, а постепенно, итеративно отбрасывая по N самых слабых признаков и переобучая модель, чтобы использовать дальше уже новые важности признаков. Идея в том, что удаление признаков может вести к тому, что относительные важности оставшихся достаточно сильно изменятся, и RFE как раз сможет эти перетасовки учесть.
У обоих алгоритмов есть недостаток: пользователю нужно знать заранее, какое число признаков оставить, а ему это знать обычно неоткуда.
RFECV (RFE with Cross-Validation) решает эту проблему: вместо строгого n_features_to_select, у него есть параметр min_features_to_select. Входные данные RFECV разбивает на несколько train/test фолдов, и для каждого train фолда в отдельности просто запускает старого добого RFE(n_features_to_select=min_features_to_select). RFE всё так же проходится по числу оставленных признаков сверху вниз, но теперь дополнительно каждый набор признаков скорится на тестовом фолде.
По итогу, best_n_features с лучшим средним скором по всем тестовым фолдам и возвращается как ответ, а конкретные признаки выбираются финальным запуском RFE(n_features_to_select=best_n_features) уже на полном входном датасете.
#featureselection #selectfrommodel #rfe #rfecv #diogenes
Ч. 2
RFECV кажется самым продвинутым и эффективным алгоритмом отбора признаков в sklearn, что же мне в нём могло не понравиться?
1) итоговые best_n_features выбираются по всем данным и по итогам только 1 обучения модели (а именно, предыдущего с best_n_features+1 фичами).
а если я обучу модель ещё раз, точно будут отобраны те же фичи, или нет? подозреваю, что этот способ неустойчив.
2) информация о важности признаков от обученных моделек с уровней от best_n_features+1 может использоваться только косвенно, а с уровней ниже best_n_features-1 вообще никак.
А что, если бы мы могли все эти важности как-то комбинировать, ну хотя бы голосованием? (привет #votenrank)
3) все обучения моделей внутри RFE/RFECV не поддерживают раннюю остановку. все решения вы будете принимать по оверфитнутым моделям.
4) для задачи с 10_000 фичами всё ещё надо обучить 10_000 моделек. Допустим, у нас терабайтный датасет, и даже на мощном сервере обучение идёт несколько часов. Да, можно задать шаг в 200, и обучить 50 моделек за пару суток, но и придётся пожертвовать точностью в +- 200 полезных признаков. Как там говорит Хеттингер, THERE MUST BE A BETTER WAY! А нельзя ли, попробовав несколько вариантов n_features и глядя на получающийся график скоров, определять следующих кандидатов для проверки более интеллектуально? Это же задача одномерной глобальной оптимизации! см #MBHO
5) даже в случае допустимости по ресурсам шага=1 и полного перебора, признаки имеют свою стоимость: приобретения, создания, хранения в featurestore. + из-за случайностей в разбиении конкретных данных Вы на протяжении десятков и сотен избыточных (и даже совершенно нерелевантных) признаков будете видеть на графике неубывающую полезность, из которой RFECV возьмёт абсолютный максимум, тем самым завысив реально полезное число признаков. Хотелось бы ввести понятие средней стоимости 1 признака, и от непосредственного ML функционала отнимать (шкалированную) стоимость получившегося набора данных. Это создаст адекватный и чёткий глобальный экстремум полезности.
6) некоторые признаки реально могут быть крайне дорогими сами по себе, если их приходится приобретать. в этом случае нужно пытаться их заменить на более дешёвые, и сравнивать каждый раз выгоду от увеличения точности модели с затратами на приобретение признаков.
7) по ходу отбора признаков обучается много моделей, по идее, это даёт вал ценной информации, значительная часть которой (по старой традиции кудесников дата сайенс из sklearn) потом просто выбрасывается, несмотря на потраченные часы вычислений. Давайте не забывать, после FS мы наверняка захотим ещё затюнить гиперпараметры нашей основной модельки, и будем перебирать/переобучать ещё сотни комбинаций (причём на тех же данных, что были использованы для FS), что будет стоить нам дополнительных часов. Так а кто нам мешает задавать моделькам с шага FS разные значения гиперпараметров и тем самым выучить оптимальные ещё до этапа HPO/HPT?!
8) глупое техническое ограничение. sklearn вам не позволит использовать датасет с категориальными признаками (даже если модель их поддерживает).
Решение этих проблем и является моей мотивацией при создании модуля wrappers библиотеки отбора признаков Diogenes.
Есть у меня подозрение, что самым эффективным в итоге окажется гибрид MRMR и RFECV (+возможно, Branch & Bound), но это уже тема другого разговора.
Ч. 2
RFECV кажется самым продвинутым и эффективным алгоритмом отбора признаков в sklearn, что же мне в нём могло не понравиться?
1) итоговые best_n_features выбираются по всем данным и по итогам только 1 обучения модели (а именно, предыдущего с best_n_features+1 фичами).
а если я обучу модель ещё раз, точно будут отобраны те же фичи, или нет? подозреваю, что этот способ неустойчив.
2) информация о важности признаков от обученных моделек с уровней от best_n_features+1 может использоваться только косвенно, а с уровней ниже best_n_features-1 вообще никак.
А что, если бы мы могли все эти важности как-то комбинировать, ну хотя бы голосованием? (привет #votenrank)
3) все обучения моделей внутри RFE/RFECV не поддерживают раннюю остановку. все решения вы будете принимать по оверфитнутым моделям.
4) для задачи с 10_000 фичами всё ещё надо обучить 10_000 моделек. Допустим, у нас терабайтный датасет, и даже на мощном сервере обучение идёт несколько часов. Да, можно задать шаг в 200, и обучить 50 моделек за пару суток, но и придётся пожертвовать точностью в +- 200 полезных признаков. Как там говорит Хеттингер, THERE MUST BE A BETTER WAY! А нельзя ли, попробовав несколько вариантов n_features и глядя на получающийся график скоров, определять следующих кандидатов для проверки более интеллектуально? Это же задача одномерной глобальной оптимизации! см #MBHO
5) даже в случае допустимости по ресурсам шага=1 и полного перебора, признаки имеют свою стоимость: приобретения, создания, хранения в featurestore. + из-за случайностей в разбиении конкретных данных Вы на протяжении десятков и сотен избыточных (и даже совершенно нерелевантных) признаков будете видеть на графике неубывающую полезность, из которой RFECV возьмёт абсолютный максимум, тем самым завысив реально полезное число признаков. Хотелось бы ввести понятие средней стоимости 1 признака, и от непосредственного ML функционала отнимать (шкалированную) стоимость получившегося набора данных. Это создаст адекватный и чёткий глобальный экстремум полезности.
6) некоторые признаки реально могут быть крайне дорогими сами по себе, если их приходится приобретать. в этом случае нужно пытаться их заменить на более дешёвые, и сравнивать каждый раз выгоду от увеличения точности модели с затратами на приобретение признаков.
7) по ходу отбора признаков обучается много моделей, по идее, это даёт вал ценной информации, значительная часть которой (по старой традиции кудесников дата сайенс из sklearn) потом просто выбрасывается, несмотря на потраченные часы вычислений. Давайте не забывать, после FS мы наверняка захотим ещё затюнить гиперпараметры нашей основной модельки, и будем перебирать/переобучать ещё сотни комбинаций (причём на тех же данных, что были использованы для FS), что будет стоить нам дополнительных часов. Так а кто нам мешает задавать моделькам с шага FS разные значения гиперпараметров и тем самым выучить оптимальные ещё до этапа HPO/HPT?!
8) глупое техническое ограничение. sklearn вам не позволит использовать датасет с категориальными признаками (даже если модель их поддерживает).
Решение этих проблем и является моей мотивацией при создании модуля wrappers библиотеки отбора признаков Diogenes.
Есть у меня подозрение, что самым эффективным в итоге окажется гибрид MRMR и RFECV (+возможно, Branch & Bound), но это уже тема другого разговора.
👍2
#featureselection #diogenes
Тестирую сейчас Диогена в контролируемом эксперименте. Несмотря на ожидания, RFECV звёзд с неба не хватает: некоторые значимые группы факторов "уплывают" из зоны видимости, без шансов выйти в топ. Думаю про альтернативу, ну или как минимум предварительный шаг: просчитывать важности признаков на случайных подгруппах случайных размеров, а не просто на всех доступных одним разом.
UPD. Кстати, эксперименты на подгруппах открыли интересный факт: важности признаков катбуста могут совершенно не отражать реальный вклад факторов в результат. Пример в комментах.
Тестирую сейчас Диогена в контролируемом эксперименте. Несмотря на ожидания, RFECV звёзд с неба не хватает: некоторые значимые группы факторов "уплывают" из зоны видимости, без шансов выйти в топ. Думаю про альтернативу, ну или как минимум предварительный шаг: просчитывать важности признаков на случайных подгруппах случайных размеров, а не просто на всех доступных одним разом.
UPD. Кстати, эксперименты на подгруппах открыли интересный факт: важности признаков катбуста могут совершенно не отражать реальный вклад факторов в результат. Пример в комментах.
👍1
#news
День добрых и полезных дел прямо сегодня. Съездил поставил подпись за Надеждина, внёс немного денег. Скорее всего, кремлёвские старцы испугаются, как и Дунцову, и найдут предлог не допустить, но хоть что-то делать надо. Приходят в основном молодые, лет 20-30.
Ещё помог забинтовать попавшего в ДТП собакена.
День добрых и полезных дел прямо сегодня. Съездил поставил подпись за Надеждина, внёс немного денег. Скорее всего, кремлёвские старцы испугаются, как и Дунцову, и найдут предлог не допустить, но хоть что-то делать надо. Приходят в основном молодые, лет 20-30.
Ещё помог забинтовать попавшего в ДТП собакена.
❤2
#hardware #storage
А прогресс-то идёт! можно купить 64TB NVME SSD за $4k! Я брал 8TB за $2k, и то до сих пор очень доволен.
"Компания Solidigm, по сообщению TechRadar, начала приём заказов на самый вместительный в мире QLC NVMe SSD, предназначенный для применения в СХД высокой плотности для дата-центров. Речь идёт об изделии D5-P5336, способном вмещать 61,44 Тбайт информации.
Устройство было представлено летом прошлого года. Оно имеет формат E1.L; задействован интерфейс PCIe 4.0 x4 (NVMe 1.4). В конструкции применены 192-слойные микрочипы флеш-памяти QLC 3D NAND. Стоит отметить, что данный накопитель является наиболее ёмким среди «обычных» NVMe SSD. Заявленная скорость последовательного чтения данных достигает 7000 Мбайт/с, скорость последовательной записи — 3000 Мбайт/с. Величина IOPS при произвольном чтении блоками по 4 Кбайт, согласно техническим характеристикам, составляет до 1 005 000, при произвольной записи — до 43 800."
https://servernews.ru/1099060
А прогресс-то идёт! можно купить 64TB NVME SSD за $4k! Я брал 8TB за $2k, и то до сих пор очень доволен.
"Компания Solidigm, по сообщению TechRadar, начала приём заказов на самый вместительный в мире QLC NVMe SSD, предназначенный для применения в СХД высокой плотности для дата-центров. Речь идёт об изделии D5-P5336, способном вмещать 61,44 Тбайт информации.
Устройство было представлено летом прошлого года. Оно имеет формат E1.L; задействован интерфейс PCIe 4.0 x4 (NVMe 1.4). В конструкции применены 192-слойные микрочипы флеш-памяти QLC 3D NAND. Стоит отметить, что данный накопитель является наиболее ёмким среди «обычных» NVMe SSD. Заявленная скорость последовательного чтения данных достигает 7000 Мбайт/с, скорость последовательной записи — 3000 Мбайт/с. Величина IOPS при произвольном чтении блоками по 4 Кбайт, согласно техническим характеристикам, составляет до 1 005 000, при произвольной записи — до 43 800."
https://servernews.ru/1099060
ServerNews - все из мира больших мощностей
Solidigm начала продажи самого ёмкого в мирe NVMe SSD — 61,44 Тбайт стоят менее $4000
Компания Solidigm, по сообщению TechRadar, начала приём заказов на самый вместительный в мире QLC NVMe SSD, предназначенный для применения в СХД высокой плотности для дата-центров. Речь идёт об изделии D5-P5336, способном вмещать 61,44 Тбайт информации.
#featureselection
Недавно я проводил опрос, нужен ли вообще отбор признаков, если есть современные мощные бустинги. Большая часть аудитории сказала, что нет, и этим не занимается.
Вот вам пример: 246 фичей, из них на таргет влияют 11. Результаты (mean_cv_score, std_cv_score) MSE с 5-фолдовой кросс-валидацией для всех фичей и только для важных фичей показывают ОГРОМНУЮ разницу (0.0219 vs 0.0145, при dummy=0.0278). По сути, наличие/отсутствие FS может быть причиной успеха/провала проекта. Порядок разницы одинаковый для Catboost и Xgboost, кстати.
Недавно я проводил опрос, нужен ли вообще отбор признаков, если есть современные мощные бустинги. Большая часть аудитории сказала, что нет, и этим не занимается.
Вот вам пример: 246 фичей, из них на таргет влияют 11. Результаты (mean_cv_score, std_cv_score) MSE с 5-фолдовой кросс-валидацией для всех фичей и только для важных фичей показывают ОГРОМНУЮ разницу (0.0219 vs 0.0145, при dummy=0.0278). По сути, наличие/отсутствие FS может быть причиной успеха/провала проекта. Порядок разницы одинаковый для Catboost и Xgboost, кстати.
✍4👍1
#music #poetry #magpie
One for sorrow,
Two for joy,
Three for a girl,
Four for a boy,
Five for silver,
Six for gold,
Seven for a secret never to be told.
Eight for a wish,
Nine for a kiss,
Ten a surprise you should be careful not to miss,
Eleven for health,
Twelve for wealth,
Thirteen beware it's the devil himself.
Fourteen for love
Fifteen for a dove
Sixteen for the chime of a bell
Seventeen for the angels protection
Eighteen to be safe from hell
Nineteen to be safe from a crime
Twenty to end this rhyme.
https://www.youtube.com/watch?v=_fPbWEa1cyg
One for sorrow,
Two for joy,
Three for a girl,
Four for a boy,
Five for silver,
Six for gold,
Seven for a secret never to be told.
Eight for a wish,
Nine for a kiss,
Ten a surprise you should be careful not to miss,
Eleven for health,
Twelve for wealth,
Thirteen beware it's the devil himself.
Fourteen for love
Fifteen for a dove
Sixteen for the chime of a bell
Seventeen for the angels protection
Eighteen to be safe from hell
Nineteen to be safe from a crime
Twenty to end this rhyme.
https://www.youtube.com/watch?v=_fPbWEa1cyg
YouTube
Magpie - The Unthanks - LYRICS
As requested by Panthera :)
The magpie (Pica pica) is a beautiful black and white corvid, a familiar bird in the European countryside and one with a rich tradition of symbolism and folk history attached to it.
The Magpie counting song (also known as “One…
The magpie (Pica pica) is a beautiful black and white corvid, a familiar bird in the European countryside and one with a rich tradition of symbolism and folk history attached to it.
The Magpie counting song (also known as “One…
❤2