Роботы в наши дни умные, при выполнении определенных задач им нужно принимать мало решений, а что дает им силу мыслить? Датчики, установленные на его теле, процессоры помогают им обрабатывать данные, собранные датчиками. Какие типы решений регулярно принимают роботы и как это помогает роботу? Таким образом, решение может быть любого типа, например, какая скорость будет хорошей, когда задействовать тормоза, когда остановиться, как избежать столкновения и когда увеличить или уменьшить скорость, это некоторые из обычных решений, которые помогают роботам работать хорошо. . Для принятия таких решений им необходимо изучать окружающую среду вокруг себя. Одним из таких решений может быть тип наземного робота, это решение может помочь в дальнейшем принятии решения о том, какая скорость должна быть, когда применять тормоза и т. д. Для изучения окружающей среды или сбора соответствующих данных используется датчик IMU (блок измерения инерции). Используется для сбора данных, таких как ускорение, скорость в линейном или угловом направлении.

Здесь мы будем обсуждать задачу по прогнозированию типа наземного робота, эта задача была поставлена ​​Kaggle в рамках их мероприятия Career-Con 2019, и набор данных можно найти здесь.

Проблема в основном представляет собой проблему классификации, когда нам нужно предсказать тип пола, по которому движется робот. Существует 9 типов пола (9 классов классификации).

  • Мелкий бетон
  • Конкретный
  • Плиточный
  • Мягкий ПВХ
  • Твердые плитки
  • Твердая плитка большое пространство
  • Древесина
  • Мягкая плитка
  • ковровая дорожка

Бизнес-проблема:-

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

Формулировка ML бизнес-задачи:-

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

Бизнес-ограничения:-

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

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

Вероятности; вероятности различных классов не требуются, конечной метки класса будет достаточно, поскольку для просмотра вероятностей не требуется участия человека.

Точность должна быть выше.

Показатели эффективности:-

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

Обзор данных и EDA:

На роботе был установлен датчик IMU, который собирает различные типы данных в зависимости от положения и движения робота. Это данные временного ряда. Он имеет в общей сложности 10 функций, которые заключаются в следующем.

  • Ориентация X
  • Ориентация Y
  • Ориентация Z
  • Ориентация Вт
  • Угловая скорость X
  • Угловая скорость Y
  • Угловая скорость Z
  • Линейное ускорение X
  • Линейное ускорение Y
  • Линейное ускорение Z

Для каждого компонента, показанного выше, имеется 128 показаний (128 показаний для каждой функции). Всего показаний в наборе данных 487680, и у нас есть 3810 уникальных точек данных (487680/128) для обучения, а для теста есть 488448 показаний, что составляет 3816 точек данных.

Всего есть 10 функций, которые можно разделить на 3 основные категории.

  1. Линейное ускорение (в направлениях X, Y, Z)
  2. Угловая скорость (в направлении X, Y, Z)
  3. Ориентация (в направлении X,Y,Z,W)

Помимо этих 10 столбцов есть еще 3 столбца: идентификатор_серии, идентификатор_строки и номер измерения. Идентификатор серии представляет собой номер выборки, поэтому он имеет значения от 0 до 3810 для набора поездов, поскольку у нас есть 3810 точек данных. row_id представляет метки времени, каждая выборка имеет 128 меток времени, поэтому формат row_id выглядит следующим образом.

0_0 :- 0-я отметка времени для 0-й выборки

0_1:- 1-я отметка времени для 0-й выборки

……………………………………….

3810_127:- 128-я метка времени для образца № 3810

Номер измерения — это вторая половина идентификатора строки, если мы разделим его на «_» (представляет отметку времени)

В наборе данных меток классов есть еще одна функция с именем «group_id».

Таким образом, идентификатор группы имеет 73 уникальных значения, давайте посмотрим значения его количества в наборе данных.

Из приведенного выше графика видно, что идентификаторов групп немного, и они встречаются намного чаще, чем идентификаторы других групп. Например Идентификатор 53 встречается более 70 раз, тогда как идентификатор 30 встречается менее 5 раз (из 3810 точек данных). Давайте разберемся, что практически означает идентификатор группы по отношению к нашему набору данных и что он представляет.

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

— Было 73 сеанса, когда люди, которые собирали данные, выходили с роботом и фактически собирали образцы.

— Таким образом, каждый идентификатор группы имеет один тип этажа, и я предполагаю, что это не просто тот же тип этажа, а точно такой же этаж. Например, давайте представим, что для сеанса 1 они пошли в класс с «плиточной» поверхностью, собрали несколько образцов (38 образцов по 128 временных меток в каждом) и вернулись, для сеанса 66 они пошли в конференц-зал с «плиточным» покрытием, собрали несколько образцов. и уехал обратно и тд(эта информация не указана, это только предположения)

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

Ярлыки классов:

Итак, как мы видим, данные несбалансированы. Hard_tiles имеет очень мало точек данных с высоким дисбалансом. Ковер с высоким дисбалансом занимает предпоследнюю позицию, а затем мягкие плитки.

Теперь, если вы видите, что угловая скорость и линейное ускорение имеют 3 координаты (X, Y, Z), но ориентация имеет 4 (X, Y, Z, W). Этот тип представления ориентации известен как Кватернион, и нам нужен этот тип представления из-за проблемы карданного замка.

Давайте визуализируем одну случайную выборку из всех этих функций.

1) Для типа пола Fine_concrete: - Показания по оси Y и Z колеблются не сильно, почти около нуля, по оси X есть небольшое колебание, не заметное

2) Для бетонного пола: по оси Z хорошо видна структура типа синусоидальной волны, которая указывает на то, что тело слегка перемещается влево и вправо, когда тип пола бетонный, в то время как оси x и y не показывают заметных колебаний, и с течением времени они приближаются к нулю.

3) Для напольного типа soft_tiles: - Здесь ось Y очень плавная вокруг нуля, несмотря на тестовый прогон, значение оси z отрицательно во всем, что указывает на то, что тело наклонено влево или вправо в зависимости от положения датчика, ось x менее стабильна по сравнению с к оси Y

4) Для плиточного типа пола: здесь ось x показывает больше колебаний, чем любая другая ось, которая показывает, что пол неровный с левой и правой стороны робота.

5) Для типа пола soft_pvc: - оси x и y имеют меньшие колебания, в то время как z наклонена в любом направлении из двух, но не в значительной степени.

6) Для типа пола hard_tiles_large_space: - Здесь все три оси почти одинаковы и выровнены с 0

7) Для напольного ковра: - здесь ось z показывает некоторое положительное значение, которое противоположно показаниям любого другого типа пола.

8) Для типа пола hard_tiles: - Здесь оси X и Y почти равны нулю, поэтому очень номинальное отклонение в этом направлении и, как обычно, ось Z показывает некоторое значение в отрицательном направлении.

9) Для древесины напольного типа: - Угловая скорость по оси X имеет несколько заметных флуктуаций по сравнению с осью Z, имеет положительное значение, ось Y почти равномерно совмещена с нулем.

Здесь следует отметить одну вещь: ускорение в направлении z всегда близко к -10, что показывает, что робот всегда падает, НЕТ, потому что гравитационная сила постоянно тянет робота вниз.

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

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

Здесь ориентация, кажется, вообще не меняется, ее ровные линии для всех типов пола.

Значения различаются для разных типов пола, но за один проход они не сильно меняются.

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

Здесь мы можем видеть результаты аналогичного типа, где значения положения меняются при изменении типа пола, но во время бега оно почти постоянно,

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

Давайте посмотрим на распределение данных о поездах.

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

Давайте проверим некоторые статистические данные нашего набора данных

линейное ускорение X имеет значения от -36 до 36, Y имеет значения от -121 до 73, Z имеет значения от -75 до 65, похоже, что эта функция имеет некоторые выбросы.

Мы заменим выбросы (сохранив значение 99-го или 100-го процентиля в качестве порога набора поездов) и заменим его средним значением как в наборе данных поезда, так и в тестовом наборе. Вот как выглядит линейное ускорение X, Y, Z до и после удаления выбросов.

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

Ориентация Y и Z имеет 100% корреляцию, с другой стороны, углы Эйлера не имеют такой большой корреляции.

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

Одна вещь, которую я хочу добавить, это результирующая X, Y, Z для линейного ускорения и угловой скорости.

У нас было 10 сигналов, и мы добавили еще 5, с этими 15 функциями мы перейдем к разработке функций.

  1. Использование TSFEL для извлечения признаков:

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

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

tsfel.feature_extraction.features

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

Чтобы визуализировать эти функции, мы можем использовать t-sne и отображать точки данных в 2D.

После t-sne мы можем увидеть несколько кластеров, но они сильно перекрываются. Функции не легко образуют кластеры, поэтому нам могут понадобиться некоторые сложные модели для классификации с использованием этих функций.

2. Извлечение признаков вручную:

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

С помощью этой функции мы получаем 255 функций, теперь мы можем напрямую использовать эти функции для любых моделей ML/DL.

3. Выравнивание данных временных рядов и передача необработанных данных в модели: -

Поскольку мы добавили 5 новых сигналов, мы частично использовали разработку признаков, поэтому мы можем использовать эти 15 признаков (каждый из которых имеет 128 выборок для 1 точки данных). Таким образом, 128 образцов для 15 признаков дают 1920 признаков (15*128=1920).

После этой формы набора поездов (3810,1920)

4.Использование TSFRESH для извлечения признаков:

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

Из TSFRESH мы получаем около 1470 функций, которые имеют значения NaN для некоторых столбцов, давайте поинтересуемся.

Прогнозное моделирование:

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

Поток моделирования будет таким:

  • Будет использоваться некоторая предварительная обработка, такая как StandardScalar, MinMax Scalar или нормализация набора данных.

  • мы разделим данные на данные обучения и проверки.

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

  • После использования smote мы сначала перейдем к моделированию, мы выполним настройку гиперпараметров, используя GridSearchCV и RandomizedSearchCV, мы будем использовать такие модели, как
  • КНН
  • Классификатор СГД
  • Ядро SVM RBF
  • RandomForest
  • XGBoost
  • СветGBM

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

Как мы видим, набор функций 2, который извлекается вручную, имеет наилучшую точность среди всех 92,30%, что является самым высоким. Мы перейдем к набору функций 2.

Давайте проверим важность функции

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

Согласно приведенной выше матрице путаницы, мы видим, что модель допускает ошибки при прогнозировании типа пола «Бетон», 19 неправильных классификаций.

Давайте попробуем одну простую модель глубокого обучения

Эта модель глубокого обучения дает точность 97% в наборе данных проверки, но эта модель является моделью с высоким переобучением, поскольку в таблице лидеров kaggle она дает точность 63%. поэтому мы не сможем использовать эту модель.

Теперь мы попробуем одну пользовательскую модель стекирования ансамбля, в качестве базовых моделей мы будем использовать XGBoost, randomforest и Multinomial Naive Bayes.

мы разделим набор данных поезда на 50–50% и назовем его D1 и D2. У нас уже есть набор тестовых данных, предоставленный Kaggle.

Мы будем использовать D1 для обучения наших 3 базовых моделей, и мы будем использовать D2 и набор тестов для прогнозирования вероятностей для меток классов, поэтому для каждой точки данных у нас будет 9 значений вероятностей, мы будем прогнозировать 3 раза для каждой базовой модели и будем получить 27 значений вероятностей для 1 точки данных как для D2, так и для тестового набора. После создания нового фрейма данных вероятностей мы будем использовать D2 для обучения модели Xgboost, а набор данных test_probabilities будет использоваться для генерации меток классов, на этот раз мы будем прогнозировать не вероятности, а метки классов, эти окончательные метки прогнозируемых классов мы можем использовать для измерения производительности.

Теперь у нас есть 2 набора данных, train_X и test_data, с помощью которых мы можем создать еще одну модель, которая будет предсказывать окончательные метки классов.

Это финальное сравнение различных моделей. Мое последнее представление имело 93% точности, благодаря чему я переместился на 22-е место в таблице лидеров из общего числа 1443 заявок, я был в 1,45% лучших в таблице лидеров.

Код для этого кейса можно найти здесь.

Вы можете связаться со мной в Linkedin



Будущая работа:-

  • Здесь я использовал очень простую модель глубокого обучения, вместо этого мы можем использовать глубокую сеть LSTM, чтобы получить лучшие результаты, поскольку она рассматривает последовательную информацию набора данных.
  • Слой Conv1D мог бы быть намного полезнее и в этом случае, для 128 меток времени мы можем использовать conv1d с размером фильтра 4,5 или больше, я думаю, это поможет определить неровности на поверхности или внезапные изменения показаний.
  • Мы вручную извлекли так много функций, но многие из них были чисто математическими операциями, мы действительно можем больше сосредоточиться на извлечении большего количества функций, таких как крутящий момент, сила, производные, интеграция и т. д.

Ссылки: