Идентификация и извлечение функций являются ключом к успеху проекта. Подождите, я еще не упомянул, является ли это программным проектом или проектом машинного обучения :). Хотя это утверждение верно для всего этого, исходя из опыта работы с программным обеспечением, функция для меня всегда была какой-то причудливой (или обыденной) вещью, которую это программное приложение позволяет мне делать. Я обнаружил, что это верно для многих (включая представителей малого и среднего бизнеса), которые в основном заняты обсуждением функций программного обеспечения, чтобы изменить точку зрения на «функции» набора данных в начале любых дискуссий о данных для машинного обучения. Поэтому я счел уместным открыть дискуссию и поделиться некоторыми мыслями о «функциях» и некоторыми соображениями о том, как работать с ними для решения проблем машинного обучения.
«Отличительный атрибут или аспект чего-либо» — это то, что словарь провозглашает значением признака.
Это значение очень хорошо подходит, когда вы думаете о «особенности» набора данных в науке о данных, которую я чувствую. Например, время и дата, количество наблюдаемых видов, фактическое местонахождение и т. д. являются характеристиками данных экологических полевых наблюдений.
Эти функции могут быть простым набором столбцов набора данных во многих случаях, особенно в тех четко определенных областях с числовыми, категориальными наборами данных, например, данные о транзакциях по кредитной карте для обнаружения обнаружения мошенничества. Но во многих случаях может потребоваться выйти за рамки очевидного, чтобы извлечь функции, которые не доступны напрямую в данных данных, или этого может потребовать предметная область. Это могут быть какие-то статистические особенности или закономерность во временном ряду. Это становится немного сложнее, когда речь идет о тексте, изображениях, аудио-видео данных. Для определения функций для моделирования требуется хороший объем знаний в предметной области. Важнейшим аспектом любого машинного обучения или проекта искусственного интеллекта становится не только фактическая используемая модель/алгоритм, но и определение функций, хотя во многих случаях глубокого обучения, где оно предназначено для прямой идентификации и изучения данных. Но также очень важно знать, какой аспект данных является ключевым для алгоритма, чтобы убедиться, что правильный набор данных подготовлен и доступен для алгоритма. Обратите внимание, что, поскольку здесь речь идет об извлечении функции для целей машинного обучения; методы извлечения признаков, основанные на глубоком обучении, здесь в этой статье не обсуждаются.
Начиная с
В качестве первого шага необходимо очистить данные и провести первоначальный анализ, подробное обсуждение которого вы можете найти в следующей статье: Как эффективно обрабатывать большие наборы данных для машинного обучения и анализа данных с помощью Python.
С помощью анализа EDA и созданных визуализаций настало время засучить рукава и приступить к работе над выбором функций, спроектировать их в соответствии с требованиями, извлечь дополнительные, если их больше, чем очевидные. Это может быть ручной процесс в простых небольших, четко определенных наборах данных. В большом наборе данных с большим количеством переменных некоторые автоматизированные методы используются для выбора только релевантных признаков. Обычно используются следующие методы: статистические подходы, подход на основе моделей, такой как деревья решений, поиск по сетке и так далее. Но на любом этапе выходом процесса выбора признаков будет сокращенный набор входных данных.
Во многих случаях только выбора функций может быть недостаточно, может потребоваться некоторое преобразование, такое как нормализация или стандартизация, в зависимости от требований модели и типов данных. Выбор только соответствующих функций и преобразований помогает снизить сложность моделей, избежать чрезмерной подгонки моделей, уменьшения размера входных данных и т. д.
Извлечение признаков — это еще один процесс, который необходим в зависимости от типа данных и/или предметной области, даже в качестве инструмента для уменьшения размерности.
Давайте сделаем паузу и обсудим извлечение признаков из разных типов (если не всех) данных, а также некоторые примеры широко используемых методов.
Числовые/статистические характеристики
Как обсуждалось ранее во многих случаях с числовыми данными, это может быть так же просто, как выбор важных столбцов для выполнения некоторых преобразований, таких как нормализация, и передачи их в модель.
Но во многих случаях многие числовые переменные требуют некоторого преобразования, основанного на предметной области, это могут быть некоторые статистические характеристики, основанные на предметной области, или научные вычисления. Пример: в некоторых случаях необходимо учитывать случайное влияние одной из функций на остальную часть системы. При анализе опыта или специализации врача и их влияния на диагноз пациента уместно использование статистических моделей случайных эффектов. День года влияет на наблюдения за видами, сделанные в данных экологических наблюдений, что оказывает сезонное влияние на окончательный результат.
Существует множество библиотек статистического моделирования общего назначения, таких как scikitlearn, statsmodels. Кроме того, многие из библиотек научных вычислений, специфичных для предметной области, доступны на python, хотя в основном они изначально написаны на R или MatLab. Эти библиотеки в некоторых случаях имеют открытый исходный код, например: Ndlib с моделями Network Diffusion, используемыми для изучения пандемий/эпидемий, для моделирования или расчета распространения, которые в дальнейшем будут использоваться для каких-то моделей прогнозирования.
Особенности временных рядов
Многие из собранных данных представляют собой временные ряды, то есть с информацией о дате и времени. После включения данных временной шкалы можно получить множество статистических данных, основанных на измерениях времени. Во-первых, вероятно, можно было бы понять сезонность, распознать закономерности важных переменных в данных. Извлекайте множество дополнительных статистических данных, основанных на дне недели, месяце года или времени данных о том, как ведут себя различные ключевые переменные.
Библиотеки, такие как Skitlearn, statmodels, предоставляют базовые возможности анализа временных рядов. Существует множество других расширенных библиотек с возможностями извлечения признаков временных рядов, которые также включают многопроцессорную обработку, распределенные параметры, модели прогнозирования, возможности оценки признаков.
Извлечение текстовых признаков
Со всеми этими мощными устройствами и благодаря эре социальных сетей, помимо качественных данных, все больше и больше приложений собирают и различную текстовую информацию. Текстовые данные привносят множество аспектов человеческого общения, которые ранее не измерялись системой, добавляя большую ценность для принятия решений или понимания поведения машин.
Это может быть понимание настроения сообщения или извлечение и добавление резюме текстового сообщения в качестве измерения анализа. Проблемы варьируются от простого обобщения сообщения до сегментации или классификации потребителей на основе текстов комментариев.
Существуют различные способы извлечения функции из текста для машинного обучения. Выбор одного или другого полностью зависит от контекста рассматриваемой проблемы.
- Статистические признаки из текстов — некоторые методы, такие как подсчет слов, мешок слов, TFIDF, пригодятся, когда контекст произнесенных слов и языковая чувствительность не являются ключом к выводам. Многие библиотеки, такие как scikitlearn, gensim, предоставляют реализацию этих методов на python.
- Word Embedding — другой метод, связанный с представлением текстовых документов в векторном пространстве. Этот подход учитывает как контекст, так и семантику слов. Популярным используемым алгоритмом является Word2Vec, Glove, в обоих случаях доступны предварительно обученные модели с большим корпусом слов. Но Word2Vec тоже можно обучить с нуля. Библиотека Gensim обеспечивает реализацию этих алгоритмов для Python.
- Существуют и другие популярные алгоритмы НЛП на основе нейронных сетей, такие как BERT, выполняющие многие более сложные задачи ИИ, а также сегментацию документов, которые могут быть полезны в некоторых случаях.
Извлечение аудиофункций
Аудиоданные становятся все более актуальными, и существует множество передовых технологий и вариантов использования, которые рассматриваются различными энтузиастами ИИ. В случае глубокого обучения требование извлечения признаков из этих аудиофайлов становится менее вероятным требованием, поскольку алгоритмы способны сами изучать эти признаки. Но во многих случаях, когда цель требует использования каких-либо алгоритмов машинного обучения, требуется процесс извлечения признаков, позволяющий собирать различные шаблоны из имеющихся аудиоданных.
Когда дело доходит до аудио, например, текста, функции могут быть извлечены из различных измерений, таких как частотная область, временная область и другие передовые методы, такие как мелспекограммы.
Python предоставляет набор четко определенных библиотек для извлечения этих функций из аудиофайлов в известных форматах, таких как mp3, wave и т. д. Например, Librosa, которая предоставляет различные возможности расширенного извлечения признаков.
Извлечение функций зависит от качества данных и имеющихся требований, может потребоваться предварительная обработка звука для повышения / понижения дискретизации или увеличение аудиосэмплов и т. Д. Извлечение аудиофункций — довольно ресурсоемкий процесс, возможно, GPU или процессоры хорошей конфигурации определенно помогут с оптимизацией времени.
Изображение/видео и другие научные данные
Существуют различные стандартные методы извлечения признаков для изображений и видео как с методами глубокого обучения, так и без них, которые затем можно использовать для различных задач, таких как обнаружение объектов, сегментация и повторная генерация. Многие популярные библиотеки, такие как scikitlearn, предоставляют возможности для функций изображения. Я бы не стал углубляться в эти методы, так как не занимался ими глубоко на данный момент.
Извлечение научных признаков, которые очень специфичны для предметной области и требуют, чтобы эксперты в предметной области определяли их. В R и в python доступны различные библиотеки для конкретного домена, которые можно исследовать на основе домена.
Процесс — эксперименты, итерации, отслеживание
Вся обработка по подготовке функций к моделированию часто становится итеративным процессом, генерирующим несколько версий функций в качестве выходных данных. Некоторые данные могут потребовать предварительной обработки, например, аудио/видеоданные, или числовые данные также требуют нескольких статистических преобразований для получения окончательного набора функций. Создание надежного конвейера с каждым итеративным процессом обнаружения, безусловно, будет основным требованием для любого процесса машинного обучения. Это позволит инженерам данных/ученым свободно тестировать различные наборы данных или алгоритмы на разных этапах, а отладка будет намного быстрее без потери контроля над версией данных или кодом, используемым для обработки. Помимо этого, существуют различные аспекты, связанные с тем, как разбить эти процессы, чтобы максимизировать повторное использование кода, добиться многопроцессорной или распределенной обработки, где это необходимо, или хранения промежуточных результатов в оптимизированных форматах файлов или даже в РСУБД.
На рынке представлено множество фреймворков, как с открытым исходным кодом (пример: DVC), так и коммерческих для этой цели, предоставляющих различные возможности в зависимости от потребности. Это большая тема и требует отдельного обсуждения.
Заключение
Этап подготовки функций является ключевым для решения любой задачи машинного обучения. Этот этап может занять довольно много времени и ресурсов в зависимости от типа имеющихся данных и проблемной области. В большинстве случаев анализ и ввод данных экспертами в предметной области становятся важными на этом этапе. Создание хорошей стратегии управления конвейером для обработки данных для извлечения функций также не менее важно.