Nano Hash - криптовалюты, майнинг, программирование

Использование SVM для классификации многомерных наборов данных временных рядов

Я хотел бы использовать оценщик svm.SVC() scikit-learn для выполнения задач классификации в многомерных временных рядах, то есть во временных рядах, где точки в ряду принимают значения в R ^ d, где d > 1.

Проблема с этим заключается в том, что svm.SVC() будет принимать только ndarray объектов размерности не более 2, тогда как размерность такого набора данных будет равна 3. В частности, форма данного набора данных будет (n_samples, n_features, d).

Доступен ли обходной путь? Одним из простых решений было бы просто изменить набор данных, чтобы он был двумерным, однако я полагаю, что это приведет к тому, что классификатор не будет правильно учиться на наборе данных.


  • Что такое n_features измерение? Временной ряд, который вы описываете в первом абзаце, будет иметь форму (n_samples, d). Кроме того, изменение формы вполне может сработать. Почему бы тебе просто не попробовать? 07.08.2017
  • n_features — это количество записей во времени — например, если я буду записывать положение курсора на экране каждую минуту в течение 1 часа, то n_features будет 60, а d — 3. Второй момент: мне было интересно, если было доступно лучшее решение (я нигде не видел, чтобы этот вопрос обсуждался). 07.08.2017
  • Я думал, что samples это места во времени... Так что же такое n_samples измерение? Различные реализации пути? 07.08.2017
  • n_samples — это количество разных серий: если бы мы классифицировали изображения, это было бы количество изображений в нашем наборе данных. 07.08.2017

Ответы:


1

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

Эмпирическое правило: если вы действительно ничего не знаете о данных, добавьте необработанные данные и посмотрите, работает ли это. Если у вас есть представление о том, какие свойства данных могут быть полезны для классификации, попробуйте реализовать это в функции.

Допустим, мы хотим классифицировать шаблоны смахивания на сенсорном экране. Это очень похоже на ваши данные: мы получили множество временных рядов таких паттернов, записывая двумерное положение каждые несколько миллисекунд.

В необработанных данных каждый временной ряд характеризуется n_timepoints * 2 признаками. Мы можем использовать это непосредственно для классификации. Если у нас есть дополнительные знания, мы можем использовать их для создания дополнительных/альтернативных функций.

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

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

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

07.08.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..