Как выполнить проектирование функций на неизвестных функциях?

19

Я участвую в соревнованиях по борьбе. Набор данных имеет около 100 объектов, и все они неизвестны (с точки зрения того, что на самом деле они представляют). В основном это просто цифры.

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

user2409011
источник

Ответы:

19

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


Как объяснил Ту Н. , вы можете найти «быстрые и грязные» комбинации функций, которые могут быть полезны довольно легко. Учитывая выход и отдельную особенность x , вы можете взять следующие преобразования, x { e x , log ( x ) , x 2 , x 3 , tanh ( x ) } . Быстрая проверка полезности преобразования заключается в том, что корреляция между { y , x ' } выше, чем корреляция междуYИксИкс'{еИкс,журнал(Икс),Икс2,Икс3,TANH(Икс)}{Y,Икс'}{Y,Икс} .

Предупреждение о корреляции: Корреляция не показывает все, и в зависимости от используемой модели (сильно нелинейной, такой как NN или RF) и взаимодействия с другими переменными, изменение корреляции может ничего не значить.

Однако, если вы используете простую линейную модель, такую ​​как логистическая регрессия, это хороший показатель производительности. Однако лучший способ оценить такое преобразование, как отметил Фокруз Заман , состоит в том, чтобы построить модель с преобразованной функцией и без нее и посмотреть, как развивается ошибка проверки (на ваших сгибах перекрестной проверки).

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


Найти комбинации функций сложнее. Для начала, если вы хотите протестировать каждое добавление 2 функций и у вас есть функций, у вас есть порядок преобразований для тестирования. Чтобы найти такие преобразования, вы можете применить нелинейную модель (такую ​​как NN или RF) к проблеме и попытаться увидеть, что она изучает. Если вы можете определить, что делает промежуточный уровень в NN, вы можете предварительно вычислить его результат и добавить его в качестве новой функции. Ему не нужно будет снова его вычислять, и он, вероятно, попытается узнать что-то новое.DD2

Может быть трудно интерпретировать внутреннее представление NN или даже интерпретировать важность функции в случайном лесу. Легче, и , вероятно , больше подходит метод для этой цели, модель будет Активизации с деревьев решений. Существует много библиотек, реализующих Boosting, и если вы участвуете в конкурсе Kaggle, как, по-видимому, подразумевается в вашем посте, XGBoost используется многими участниками, так что вы можете найти некоторые справочные материалы по тому, что я собираюсь описать.

Во-первых, запустите алгоритм повышения, используя только пни , деревья решений 1-го уровня. Пни очень слабы, но Boosting делает их разумной моделью. Это будет служить вашей базовой линией. В зависимости от используемой вами библиотеки, вы должны довольно легко отобразить наиболее часто используемые функции и вывести их в соответствие с ответом (или сделать гистограмму, если ответ является категоричным), чтобы определить какой-либо шаблон. Это может дать вам интуитивное представление о том, что будет хорошим преобразованием отдельных функций.

Затем запустите алгоритм Boosting с двухуровневыми деревьями решений. Эта модель намного сложнее, чем предыдущая; если две переменные, взятые вместе, имеют большую мощность, чем взятые по отдельности, эта модель должна превзойти вашу предыдущую (опять же, не с точки зрения ошибки обучения, а с ошибкой проверки!). Исходя из этого, вы должны быть в состоянии извлечь, какие переменные часто используются вместе, и это должно привести вас к потенциальным многофункциональным преобразованиям.


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

подмигивает
источник
4

Вы можете использовать различные комбинации функций, такие как сумма функций: feat_1 + feat_2 + feat_3... или их произведение. Или вы можете преобразовать объекты по логу, или по экспоненте, по сигмоиде ... или даже дискретизировать числовую функцию в категориальную. Это бесконечное пространство для исследования.

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

Ту Н.
источник
2
Я бы немного усомнился в том, что «какую бы комбинацию или преобразование ни увеличивало производительность перекрестной проверки или набора тестов, вам следует его использовать». Слепая попытка чего-либо, пока что-то не улучшит вашу метрику производительности, может привести к обнаружению отношений, которые не имеют смысла и приводят к переобучению. Это может действительно повредить производительности на новых наблюдениях в будущем.
Хершизи
1

Не могли бы вы объяснить подробнее конкретные примеры о вашем следующем утверждении?

The dataset has around 100 features and all are unknown (in terms of what actually they represent). Basically they are just numbers.

Я не уверен, что вы можете сделать Feature Engineering без хорошего понимания вашего набора данных и заданных атрибутов !!

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

«Идея функции, отдельной от атрибута, имеет больше смысла в контексте проблемы. Функция - это атрибут, который полезен или значим для вашей проблемы. Это важная часть наблюдения для изучения структуры проблема, которая моделируется. ... ... ...

В компьютерном зрении изображение - это наблюдение, но особенность может быть линией на изображении.

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

В распознавании речи высказывание может быть наблюдением, но особенность может быть отдельным словом или фонемой. "

Пожалуйста, посетите следующий URL для более:

Познакомьтесь с особенностями проектирования, как сконструировать функции и как добиться успеха в этом

Фохруз Заман
источник
Атрибуты в случае OP были анонимизированы до такой степени, что знание предметной области не может быть использовано. Это довольно часто встречается в соревнованиях Kaggle, но все еще возможны ограниченные формы разработки функций. Обычно новые функции создаются массово, а затем тестируются, в отличие от использования предметных знаний для руководства их созданием. Пример: kaggle.com/c/bnp-paribas-cardif-claims-management/data
Нил Слейтер,
как сказал Нил, функции анонимны, это то, что я имею в виду в своем заявлении.
user2409011