Лучшее, что вы можете сделать, это без каких-либо дополнительных знаний об изменении формы данных. Разработка функций — это очень ручное искусство, которое в значительной степени зависит от знания предметной области.
Эмпирическое правило: если вы действительно ничего не знаете о данных, добавьте необработанные данные и посмотрите, работает ли это. Если у вас есть представление о том, какие свойства данных могут быть полезны для классификации, попробуйте реализовать это в функции.
Допустим, мы хотим классифицировать шаблоны смахивания на сенсорном экране. Это очень похоже на ваши данные: мы получили множество временных рядов таких паттернов, записывая двумерное положение каждые несколько миллисекунд.
В необработанных данных каждый временной ряд характеризуется n_timepoints * 2
признаками. Мы можем использовать это непосредственно для классификации. Если у нас есть дополнительные знания, мы можем использовать их для создания дополнительных/альтернативных функций.
Предположим, мы хотим различать зигзагообразные и волнистые узоры. В этом случае гладкость (как бы она ни определялась) может быть очень информативной характеристикой, которую мы можем добавить в качестве дополнительного столбца к необработанным данным.
С другой стороны, если мы хотим различать медленные и быстрые шаблоны, мгновенная скорость может оказаться хорошей характеристикой. Однако скорость можно вычислить как простую разность по оси времени. Даже линейные классификаторы могут легко моделировать это, поэтому может оказаться, что такие функции, хотя и хороши в принципе, не улучшают классификацию необработанных данных.
Если у вас есть много-много-много-много данных (скажем, в Интернете полно хороших примеров), нейронные сети с глубоким обучением могут в некоторой степени автоматически изучать функции, но, скажем, это довольно продвинуто. В конце концов, большинство практических приложений сводятся к пробам и ошибкам. Посмотрите, какие функции вы можете придумать, и опробуйте их на практике. И остерегайтесь переоснащения гремлина.
07.08.2017