Я часто вижу, как люди создают новые функции на основе существующих функций для проблемы машинного обучения. Например, здесь: https://triangleinequality.wordpress.com/2013/09/08/basic-feature-engineering-with-the-titanic-data/ люди считают размер семьи человека новой функцией, основанной на на количество братьев, сестер и родителей, которые были существующими функциями.
Но какой в этом смысл? Я не понимаю, почему создание взаимосвязанных новых функций полезно. Разве работа алгоритма не заключается в том, чтобы делать это самостоятельно?
machine-learning
feature-engineering
Матье Верон
источник
источник
Ответы:
Самый простой пример, используемый для иллюстрации этого, - это проблема XOR (см. Изображение ниже). Представьте, что вам даны данные, содержащие координаты и и двоичный класс для прогнозирования. Вы можете ожидать, что ваш алгоритм машинного обучения сам определит правильную границу решения, но если вы сгенерировали дополнительную функцию , то проблема станет тривиальной, так как дает вам почти идеальный критерий решения для классификации, и вы использовали просто простую арифметику !x y z=xy z>0
Таким образом, хотя во многих случаях вы можете ожидать от алгоритма поиска решения, в качестве альтернативы, путем разработки функций, вы можете упростить проблему. Простые проблемы легче и быстрее решать, и для них нужны менее сложные алгоритмы. Простые алгоритмы часто более надежны, результаты часто более интерпретируемы, они более масштабируемы (меньше вычислительных ресурсов, время на обучение и т. Д.) И переносимы. Вы можете найти больше примеров и объяснений в прекрасном выступлении Винсента Д. Вармердама, которое было дано на конференции PyData в Лондоне .
Более того, не верьте всему, что говорят вам маркетологи машинного обучения. В большинстве случаев алгоритмы не будут «учиться самостоятельно». У вас обычно есть ограниченное время, ресурсы, вычислительная мощность, а данные обычно имеют ограниченный размер и шумят, и это не помогает.
Принимая это до крайности, вы можете предоставить свои данные в виде фотографий рукописных заметок о результатах эксперимента и передать их в сложную нейронную сеть. Сначала он научится распознавать данные на картинках, затем научится понимать их и делать прогнозы. Для этого вам понадобится мощный компьютер и много времени для обучения и настройки модели, а также огромные объемы данных из-за использования сложной нейронной сети. Предоставление данных в машиночитаемом формате (в виде таблиц чисел) значительно упрощает проблему, поскольку вам не нужно все распознавание символов. Вы можете думать о разработке функций как о следующем шаге, где вы преобразуете данные таким образом, чтобы создать значимыефункций, так что ваш алгоритм имеет еще меньше, чтобы выяснить сам по себе. Чтобы провести аналогию, вы хотите прочитать книгу на иностранном языке, чтобы вам сначала пришлось выучить язык, а не читать его на том языке, который вы понимаете.
В примере данных Titanic ваш алгоритм должен был бы выяснить, что суммирование членов семьи имеет смысл, чтобы получить функцию «размера семьи» (да, я здесь ее персонализирую). Это очевидная особенность для человека, но она не очевидна, если вы рассматриваете данные только как некоторые столбцы чисел. Если вы не знаете, какие столбцы имеют смысл, если рассматривать их вместе с другими столбцами, алгоритм может выяснить это, попробовав каждую возможную комбинацию таких столбцов. Конечно, у нас есть умные способы сделать это, но все же, намного проще, если информация передается алгоритму сразу.
источник
Что ж, если вы планируете использовать простой линейный классификатор, имеет смысл создавать новые функции, которые являются нелинейной функцией существующих, особенно если ваши знания предметной области указывают на то, что полученная функция будет содержательной и информативной. Обратите внимание, что линейный классификатор не может учитывать эти сложные функции, если вы не предоставите их явно.
В идеале, если вы используете достаточно мощный алгоритм нелинейной классификации, он должен быть в состоянии создать границу решения, которая рассматривает произвольные нелинейные преобразования входных объектов, если они являются информативными для классификации. Однако на практике большинство нелинейных классификаторов просто смотрят на некоторые типы преобразований. Например, SVM с полиномиальным ядром будет учитывать полиномиальное взаимодействие между объектами, но, возможно, можно создать более информативный объект, применяя другие типы преобразований ...
Короче говоря, если знание предметной области показывает, что созданная вручную нелинейная комбинация функций может быть информативной, имеет смысл добавить ее в существующий набор функций.
источник
Это правда, что некоторые из моделей машинного обучения обладают способностью обрабатывать нелинейность и взаимодействие между переменными, однако, в зависимости от ситуации, я вижу три причины, по которым это становится необходимым.
Если вам даны только две функции, и . Простая линейная модель не найдет способа классификации целевой переменной. Таким образом, вместо этого вам нужны новые функции четверти, чтобы захватить нелинейность: .x1 x2 y=x0+c1x1+c2x2 y=x0+c1x21+c2x22
Если вы заранее знаете, что некоторые функции (из бизнес-знаний или опыта), это может помочь создать их, чтобы ускорить время выполнения модели и упростить ее для вашей модели. Например, в вашем примере данных Титаник и если вы используете модель классификации дерева решений. Если вы знаете, что пожилые женщины (возраст и пол) с большей вероятностью выживут, создав одну функцию, которая собирает информацию, ваше дерево может сделать одно разбиение по новой переменной вместо двух по двум переменным. Это может ускорить время вычислений, если вы заранее знаете, что эта функция важна.
В реальном мире вы не получите ни одного набора данных, который предоставляет Kaggle. Вместо этого вы получаете информацию отовсюду. Например, если вы хотите предсказать истощение клиентов для такой розничной интернет-компании, как Amazon, у вас есть демографические данные клиентов, информация о транзакциях покупки. Вам необходимо генерировать множество функций из разных источников, в этом случае вы найдете множество полезных функций, которые можно получить / объединить на уровне транзакций. Как говорит Эндрю Нг: «Часто умение проектировать особенности определяет успех или провал проекта машинного обучения.
источник