Мне нужна функция, которая описывает набор последовательностей нулей и единиц? - PullRequest
0 голосов
/ 23 марта 2012

У меня есть несколько наборов с переменным количеством последовательностей.Каждая последовательность состоит из 64 чисел, равных 0 или 1, например:

Set A

последовательность 1: 0,0,0,0,0,0,1,1,0, 0,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1, 0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,1, 0,0,0,0,0

последовательность 2: 0,0,0,0,1,1,1,1,0,0,0,1,1,1,0,0, 0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,1, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0

последовательность 3: 0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0, 0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0

...

Set B

sequence1: 0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0, 0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,00,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1

sequence2: 0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,0

...

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

Мне это нужно, потому что я пытаюсь распознать различные жесты в мобильном приложении на основе ячеек в сетке, которые были затронуты (1коснуться / 0 не трогать).Наборы представляют каждый жест, а последовательности - ограниченную выборку вариаций каждого жеста.

В идеале функция, описывающая последовательности в наборе, позволила бы мне проверять прикосновения пользователя к нему, чтобы определить, к какому набору / жесту относится.

Я искал решение, используя либо Excel, либоMathematica, но, будучи очень невежественным в отношении и математики, и в целом, я ищу направление эксперта.Предложения по базовой документации по этому вопросу также приветствуются.

Ответы [ 2 ]

3 голосов
/ 24 марта 2012

Похоже, что вы пытаетесь обработать то, что по сути является двумерными данными в 1D. Например, пусть s1 представляет первую последовательность в множестве A в вашем вопросе. Тогда команда

ArrayPlot[Partition[s1, 8]]

производит эту картинку:

enter image description here

Другие последовательности в том же наборе дают похожие сюжеты. Одна из последовательностей из второго набора выдает в ответ на те же операции картинку:

enter image description here

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

Вы можете сделать что-то гораздо более простое, например, рассчитать «среднее» изображение для каждого из ваших жестов. Один из способов сделать это - вычислить среднее значение для каждого из 64 пикселей в каждом из изображений. Возможно, в вашем наборе A 6 последовательностей, описывающих жест A. Суммируйте последовательности поэлементно. Теперь у вас будет последовательность со значениями от 0 до 6. Разделите каждый элемент на 6. Теперь каждый элемент представляет своего рода вероятность того, что новый жест, который вы пытаетесь распознать, коснется этого пикселя.

Повторите это для всех наборов последовательностей, представляющих ваш набор жестов.

Чтобы распознать жест пользователя, просто вычислите разницу между последовательностью, представляющей жест, и каждой из последовательностей, представляющих «средние» жесты. Наименьшая (абсолютная) разница приведет вас к жесту, который сделал пользователь.

Я не ожидаю, что это будет абсолютно надежно, это может привести к тому, что некоторые пользовательские жесты будут неоднозначными или не распознаваемыми, и вы можете попробовать что-то более сложное. Но я думаю, что этот подход прост и, вероятно, адекватен, чтобы вы начали.

2 голосов
/ 23 марта 2012

В Mathematica следующее выражение будет перечислять все возможные комбинации {0,1} длины 64.

Tuples[{1, 0}, {64}]

Но их 2 ^ 62 или 18446744073709551616, поэтому я не уверенкакая польза от этого.

Возможно, вы просто хотели, чтобы уникальные последовательности содержались в каждом наборе, в этом случае все, что вам нужно, - это функция Mathematica Union [], примененная к набору.Если у вас есть наборы, сгруппированные в списке в Mathematica, скажем, mySets, то вы можете применить оператор Union к каждому набору в списке, используя оператор карты.

Union/@mySets

Если вы хотите сделатьнекоторый тип прогноза может быть полезен немного больше информации.

Спасибо за разъяснения.

Машинное обучение

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

Вопрос: В вашем случае вы знаете, какой жест представляет каждый пример?

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

Учебные ресурсы

Существует очень обширный опыт исследований по этой теме, но популярное введение в эту тему - машинное обучение КристоферомБишоп.Стэнфорд предлагает серию видео-лекций по машинному обучению Standford ML , доступных в Интернете.

Точность

Возможно, вы захотите определить, как вы будете определятьточность вашей системы при прогнозировании типа жеста для невидимого примера.Обычно вы тренируете модель, используя некоторые из ваших примеров, а затем тестируете ее производительность, используя примеры, которых модель не видела.Двумя наиболее распространенными методами, используемыми для этого, являются 10-кратная перекрестная проверка или повторное удержание 50/50.Мера точности позволяет вам сравнивать один метод с другим, чтобы определить, какой из них лучше.

Задумывались ли вы над тем, какой уровень точности требуется в вашей задаче, достаточно точности на 70%, на 85%, на 99%?или лучше?

Методы машинного обучения, как правило, весьма чувствительны к конкретному типу данных, которые у вас есть, и к количеству примеров, которым вы должны обучить систему, чем больше примеров, тем лучше производительность.

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

Наборы инструментов

Mathematica - замечательная система, бесконечно гибкая и моя любимая среда,но из коробки он не имеет большой поддержки для машинного обучения.

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

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

Если у вас есть представление о том, насколько хорошо установленные методы работают с вашими данными, у вас есть хорошая отправная точка для сравнения индивидуального подхода, если он не соответствует вашим критериям.

Распознавание рукописных цифр

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...