Использование библиотеки scikit-learn в задаче классификации движений трекбола (Константин Пархоц, OSSDEVCONF-2017) — различия между версиями
Материал из 0x1.tv
StasFomin (обсуждение | вклад) |
StasFomin (обсуждение | вклад) (Batch edit: replace PCRE (\n\n)+(\n) with \2) |
||
(не показано 11 промежуточных версий этого же участника) | |||
Существенной проблемой в конструкции многих трекболов является интеграция колеса прокрутки, для которого найти удобное место расположения труднее, чем в случае мыши. Варианты расположения бывают очень разные (вплоть до использования большого подвижного обруча вокруг шара), и в отличие от мыши, ни один из них не оказался достаточно удобным, чтобы стать стандартом. Также прокрутку можно реализовать программно, вращением шара с зажатой клавишей (например, опциями «EmulateWheel» и «EmulateWheelButton» в <tt>xorg.conf</tt>), однако это увеличивает физическую нагрузку пользователя. Самое минималистичное решение применено в модели «Kensington Slimblade Trackball», где дополнительный оптический датчик отслеживает вращение шара в горизонтальной плоскости; вращение по часовой стрелке означает прокрутку в прямом направлении, а против — в обратном: «Kensington Slimblade Trackball» [[File:Использование библиотеки scikit-learn в задаче классификации движений трекбола (Константин Пархоц, OSSDEVCONF-2017)-r1.png|center|640px]] Во всех остальных трекболах горизонтальное вращение предсказуемо вызывает незначительные «хаотические» перемещения курсора. Однако распознавание такого вращения в потоке векторов перемещения позволило бы добавить интуитивную прокрутку во множество более дешевых устройств. «Нелинейный классификатор на основе SVM» [[File:Использование библиотеки scikit-learn в задаче классификации движений трекбола (Константин Пархоц, OSSDEVCONF-2017)-r2.png|center|640px]] При исследовании возможности такого распознавания средствами scikit-learn использовался метод опорных векторов (\EN{support vector machines} или SVM). Каждый объект данных (упорядоченный набор из $n$ чисел) представляется в SVM как вектор (точка) в n-мерном пространстве. Каждая из этих точек принадлежит одному из двух классов, и множество точек делится такой гиперплоскостью размерности $n-1$, что обеспечивает максимальный зазор между классами (для более надежной классификации). Для построения нелинейного классификатора скалярное произведение при построении гиперплоскости заменяется на нелинейную функцию (многочлен, функцию Гаусса, радиальную базисную функцию, сигмоидальную функцию на основе гиперболического тангенса и др.) — т. н. «\EN{Kernel trick}». Формально эту функцию считают скалярном в пространстве с еще большей размерностью (рис. \ref{fig:parhoc2}). На странице [https://github.com/parchoc/trackball-learn] находится программный модуль, разработанный для экспериментов с распознаванием движений трекбола. Вращение шара в scikit-learn распознает класс SVC. Классификатор обучается с помощью функции fit, с указанием массива данных и целевых значений для них. Опционально обучены классификатор можно сохранить для дальнейшего использования с помощью функции joblib.dump. Далее новые значения распознаются функцией predict с массивом данных в качестве аргумента (результат — значение вероятности принадлежности к заданному классу). В качестве функции активации лучше всего проявили себя сигмовидная функция, которая показала наибольшую точность распознавания, и радиальная базисная функция (RBF). Исследование работы классификатора при различных размерах скользящего окна от 2 до 40 показало, что RBF более эффективно при размере окна 12, а сигмоидная функция — при значении 37. Для RBF результаты оказались заметно лучше при четном размере окна, тогда как для сигмоидной функции — при нечётном. «Точность распознания всех типов движения при разном размере скользящего окна» [[File:Использование библиотеки scikit-learn в задаче классификации движений трекбола (Константин Пархоц, OSSDEVCONF-2017)-r3.png|center|640px]] На основе данных результатов была создана пробная программная реализация, генерирующая события прокрутки на основе распознавания типа движения в реальном времени. Программа написана на Python с графическим интерфейсов на основе PyQt. На текущий момент данный модуль работает под Windows. Он использует классификатор с RBF в качестве ядра. Координаты курсора снимаются через равные промежутки времени средствами фреймворка Qt, а затем вычисленная скорость перемещения курсора передаётся в классификатор. В зависимости от отклика классификатора генерируется событие прокрутки (обращением к системной библиотеке user32), либо перехваченное перемещение курсора возвращается в систему для дальнейшей обработки. {{LinksSection}} <!-- <blockquote>[©]</blockquote> --> {{fblink|1951747615078250}} {{vklink|764}} <references/> [[File:{{#setmainimage:Использование библиотеки scikit-learn в задаче классификации движений трекбола (Константин Пархоц, OSSDEVCONF-2017)!.jpg}}|center|640px]] {{stats|disqus_comments=1|refresh_time=2019-08-19T19:30:022021-08-31T17:08:00.603171669891|vimeo_comments=0|vimeo_plays=245|youtube_comments=02|youtube_plays=211444}} [[Категория:OSSDEVCONF-2017]] [[Категория:Open-source projects]] [[Категория:Machine Learning]] |
Текущая версия на 12:21, 4 сентября 2021
- Докладчик
- Константин Пархоц
Описывается применение свободной библиотеки машинного обучения scikit-learn для решения задачи распознания нестандартных движений трекбола. Описаны особенности библиотеки, её возможности, приведено сравнение с другими свободными библиотеками машинного обучения. Для анализа особенностей перемещений трекбола использован метод опорных векторов.
Рассмотрено создание классификатора, а также результаты его обучения для программной реализации в трекболе дополнительной функции прокрутки вращением шара в горизонтальной плоскости. Представлен экспериментальный драйвер, позволяющий генерировать данным способом события прокрутки при использовании любого механического либо оптического трекбола.
Содержание
Видео
Посмотрели доклад? Понравился? Напишите комментарий! Не согласны? Тем более напишите.
Презентация
Thesis
К машинному обучению относят подходы, где используется не прямое решение задачи, а обучение программы на задачах-аналогах — на реальных задачах в ходе эксплуатации или учебных (для предварительной «дрессировки» системы на правильные ответы). Свободных проектов реализации алгоритмов машинного обучения достаточно много, они отличаются по производительности, языку, универсальности или ориентации на конкретную сферу применения[1].
Scikit-learn[2] — одна из таких библиотек. Она реализована на языке Python, лицензируется под упрощенной BSD и включает средства классификации, регрессионного и кластерного анализа. Особенности, на которые делают упор разработчики — простота использования, высокая производительность, подробная документация и понятный API. Производительность scikit-learn обеспечивается компилированием кода, рядом высокоэффективных библиотек на Python (NumPy), а также реализация подпрограмм линейной алгебры на С/С++. Особенностью API является активное использование интерфейсов для доступа к объектам, что упрощает код и позволяет легко заменять фрагменты кода и используемые алгоритмы[3].
Реальная прикладная задача распознавания, в которой библиотека scikit-learn использовалась авторами — распознавание вращательных движений шара трекбола. Трекбол является достаточно распространенным альтернативной устройством перемещения курсора. Конструктивно он представляет собой опрокинутую механическую мышь (пользователь вращает шар вместо того, чтобы перемещать корпус устройства). Из-за неподвижного корпуса трекбол требует меньше места, а неподвижное запястье уменьшает нагрузку при длительном использовании, и это предупреждает/ослабляет туннельный синдром.
Существенной проблемой в конструкции многих трекболов является интеграция колеса прокрутки, для которого найти удобное место расположения труднее, чем в случае мыши. Варианты расположения бывают очень разные (вплоть до использования большого подвижного обруча вокруг шара), и в отличие от мыши, ни один из них не оказался достаточно удобным, чтобы стать стандартом. Также прокрутку можно реализовать программно, вращением шара с зажатой клавишей (например, опциями «EmulateWheel» и «EmulateWheelButton» в xorg.conf), однако это увеличивает физическую нагрузку пользователя. Самое минималистичное решение применено в модели «Kensington Slimblade Trackball», где дополнительный оптический датчик отслеживает вращение шара в горизонтальной плоскости; вращение по часовой стрелке означает прокрутку в прямом направлении, а против — в обратном:
«Kensington Slimblade Trackball»
Во всех остальных трекболах горизонтальное вращение предсказуемо вызывает незначительные «хаотические» перемещения курсора. Однако распознавание такого вращения в потоке векторов перемещения позволило бы добавить интуитивную прокрутку во множество более дешевых устройств.
«Нелинейный классификатор на основе SVM»
При исследовании возможности такого распознавания средствами scikit-learn использовался метод опорных векторов (\EN{support vector machines} или SVM). Каждый объект данных (упорядоченный набор из $n$ чисел) представляется в SVM как вектор (точка) в n-мерном пространстве. Каждая из этих точек принадлежит одному из двух классов, и множество точек делится такой гиперплоскостью размерности $n-1$, что обеспечивает максимальный зазор между классами (для более надежной классификации). Для построения нелинейного классификатора скалярное произведение при построении гиперплоскости заменяется на нелинейную функцию (многочлен, функцию Гаусса, радиальную базисную функцию, сигмоидальную функцию на основе гиперболического тангенса и др.) — т. н. «\EN{Kernel trick}». Формально эту функцию считают скалярном в пространстве с еще большей размерностью (рис. \ref{fig:parhoc2}).
На странице [3] находится программный модуль, разработанный для экспериментов с распознаванием движений трекбола. Вращение шара в scikit-learn распознает класс SVC. Классификатор обучается с помощью функции fit, с указанием массива данных и целевых значений для них. Опционально обучены классификатор можно сохранить для дальнейшего использования с помощью функции joblib.dump. Далее новые значения распознаются функцией predict с массивом данных в качестве аргумента (результат — значение вероятности принадлежности к заданному классу).
В качестве функции активации лучше всего проявили себя сигмовидная функция, которая показала наибольшую точность распознавания, и радиальная базисная функция (RBF). Исследование работы классификатора при различных размерах скользящего окна от 2 до 40 показало, что RBF более эффективно при размере окна 12, а сигмоидная функция — при значении 37. Для RBF результаты оказались заметно лучше при четном размере окна, тогда как для сигмоидной функции — при нечётном.
«Точность распознания всех типов движения при разном размере скользящего окна»
На основе данных результатов была создана пробная программная реализация, генерирующая события прокрутки на основе распознавания типа движения в реальном времени. Программа написана на Python с графическим интерфейсов на основе PyQt. На текущий момент данный модуль работает под Windows. Он использует классификатор с RBF в качестве ядра. Координаты курсора снимаются через равные промежутки времени средствами фреймворка Qt, а затем вычисленная скорость перемещения курсора передаётся в классификатор. В зависимости от отклика классификатора генерируется событие прокрутки (обращением к системной библиотеке user32), либо перехваченное перемещение курсора возвращается в систему для дальнейшей обработки.
Примечания и ссылки
- ↑ Yegulalp S. 11 open source tools to make the most of machine learning // InfoWorld, Dec 4, 2014. [1]
- ↑ Scikit-learn: machine learning in Python. [2]
- ↑ Pedregosa F. et al. Scikit-learn: machine learning in Python // Journal of Machine Learning Research, No. 12, 2011. — P. 2825—2830.
Plays:469 Comments:3