Вам не нужно знание предметной области (знание того, что означают ваши данные ) для разработки функций (поиска более выразительных способов формирования данных).
Как объяснил Ту Н. , вы можете найти «быстрые и грязные» комбинации функций, которые могут быть полезны довольно легко. Учитывая выход и отдельную особенность x , вы можете взять следующие преобразования, x ′ ∈ { e x , log ( x ) , x 2 , x 3 , tanh ( x ) } . Быстрая проверка полезности преобразования заключается в том, что корреляция между { y , x ' } выше, чем корреляция междуYИксИкс'∈ { eИкс, журнал( х ) , х2, х3, TANH( х ) }{ у, х'}{ у, х } .
Предупреждение о корреляции: Корреляция не показывает все, и в зависимости от используемой модели (сильно нелинейной, такой как NN или RF) и взаимодействия с другими переменными, изменение корреляции может ничего не значить.
Однако, если вы используете простую линейную модель, такую как логистическая регрессия, это хороший показатель производительности. Однако лучший способ оценить такое преобразование, как отметил Фокруз Заман , состоит в том, чтобы построить модель с преобразованной функцией и без нее и посмотреть, как развивается ошибка проверки (на ваших сгибах перекрестной проверки).
Таким способом довольно легко определить однофункциональные преобразования. Они применимы ко многим данным, где более выразительная связь между вашим вводом и выводом может быть в другом масштабе. Например, связь между доходом и «счастьем» выглядит логарифмической, но вы никогда не будете напрямую записывать журнал дохода участника.
Найти комбинации функций сложнее. Для начала, если вы хотите протестировать каждое добавление 2 функций и у вас есть функций, у вас есть порядок преобразований для тестирования. Чтобы найти такие преобразования, вы можете применить нелинейную модель (такую как NN или RF) к проблеме и попытаться увидеть, что она изучает. Если вы можете определить, что делает промежуточный уровень в NN, вы можете предварительно вычислить его результат и добавить его в качестве новой функции. Ему не нужно будет снова его вычислять, и он, вероятно, попытается узнать что-то новое.DD2
Может быть трудно интерпретировать внутреннее представление NN или даже интерпретировать важность функции в случайном лесу. Легче, и , вероятно , больше подходит метод для этой цели, модель будет Активизации с деревьев решений. Существует много библиотек, реализующих Boosting, и если вы участвуете в конкурсе Kaggle, как, по-видимому, подразумевается в вашем посте, XGBoost используется многими участниками, так что вы можете найти некоторые справочные материалы по тому, что я собираюсь описать.
Во-первых, запустите алгоритм повышения, используя только пни , деревья решений 1-го уровня. Пни очень слабы, но Boosting делает их разумной моделью. Это будет служить вашей базовой линией. В зависимости от используемой вами библиотеки, вы должны довольно легко отобразить наиболее часто используемые функции и вывести их в соответствие с ответом (или сделать гистограмму, если ответ является категоричным), чтобы определить какой-либо шаблон. Это может дать вам интуитивное представление о том, что будет хорошим преобразованием отдельных функций.
Затем запустите алгоритм Boosting с двухуровневыми деревьями решений. Эта модель намного сложнее, чем предыдущая; если две переменные, взятые вместе, имеют большую мощность, чем взятые по отдельности, эта модель должна превзойти вашу предыдущую (опять же, не с точки зрения ошибки обучения, а с ошибкой проверки!). Исходя из этого, вы должны быть в состоянии извлечь, какие переменные часто используются вместе, и это должно привести вас к потенциальным многофункциональным преобразованиям.
На связанных материалах я бы посоветовал следующие видео, так как за ними легко следить