Введение в предварительную обработку данных с использованием количественного распознавания эмоций
![](/static/storage/312041113904216747653560303204199509595.png)
Пожалуй, единственное, что в машинном обучении важнее, чем само машинное обучение, — это предварительная обработка данных
Это потому, что до машинного обучения было определено:
~science~ математика получения информации из реального мира, преобразования ее в числа, а затем ~finding~ изучения закономерности на ее основе
Информация в реальном мире приносит с собой тонну шума
Пример данных из реального мира
Как сторонник того, чтобы учиться, пачкая руки, приведу пример.
Есть нечто, называемое циркумплексом Рассела, что помогает количественно оценить эмоции
![](/static/storage/58825062765930108213921785876858596461.jpg)
Потому что алгоритмы машинного обучения лучше всего обучаются, когда данные, с которыми они работают, представляют собой непрерывные числа, а не традиционные закодированные данные классификации, такие как
Счастливый | Грустный | Гневный | Взволнованный | Испуганный |
0 | 1 | 2 | 3 | 4 |
В то время как классифицированные данные действительно представляют числа, числовое значение класса не всегда представляет интенсивность эмоции, в то время как модель Рассела дает вам значение активации и приятности, которые уже являются интенсивностью эмоции.
Нечистые данные
Скажем, мы находим набор данных с параметрами, которые мы ищем
![](/static/storage/276626922421304604333400168047846503144.png)
Здесь столбец pic представляет собой трехмерный массив значений красного, зеленого и синего пикселей изображения, содержащего эмоцию, а остальные довольно прямолинейны.
![](/static/storage/255002240406403976682108121908465032635.jpg)
Шаг - 1: Разделение данных
Вся цель обучения модели ML состоит в том, чтобы мы могли использовать ее для активного прогнозирования результатов на невидимых данных/ситуациях. Простой способ сделать это:
![](/static/storage/67877629593566761177897164585229392373.png)
Оставшиеся 20% могут быть использованы для оценки эффективности разработанной модели.
Шаг - 2: Работа с отсутствующими данными
Обратите внимание, что в столбце age отсутствуют некоторые данные, так что есть 2 распространенных способа работы с этими отсутствующими данными.
- Удаление целых строк при отсутствии нужного столбца
![](/static/storage/255502684511534615775794535610930967133.png)
Примечание: отлично работает для сверхбольших наборов данных, но так как больше данных = лучше...
- Подстановка среднего значения столбца (зависит от типа данных)
![](/static/storage/209762428627117303345855845801856824109.png)
Шаг - 3: Работа с данными класса
Во многих случаях данные в наборах данных являются данными класса, и хотя закодированные данные класса могут не всегда точно отражать интенсивность параметра, что-то лучше, чем ничего.
Есть 2 распространенных способа работы с данными класса, давайте возьмем столбец gender
- Одно горячее кодирование
![](/static/storage/299149639209503115096090659609302574121.png)
Когда один столбец разбивается на несколько столбцов класса, например, у gender есть 2 класса: мужской и женский, поэтому столбцы пола разбиваются на 2 столбца: мужской столбец и женский столбец
- Кодировка label
![](/static/storage/305716317518514805099363065509054460525.png)
Для столбцов с двоичными классами, такими как true или false, male или female, yes или no и т.д., Чтобы одна метка класса была заменена на 0, а другая на 1
Шаг 4: Масштабирование функций
Разные столбцы обычно представляют разные параметры, и не все параметры имеют одинаковую пропорцию. предполагая набор данных о возрасте и росте, столбец "Возраст" имеет диапазон от 1 до 100, в то время как столбец height, возможно, имеет диапазон от 100 см до 200 см.
Почему это так важно?
Когда мы построим график этих значений, не масштабируя их до одного и того же диапазона, это будет выглядеть следующим образом
![](/static/storage/178150578350206077633026170419261636415.png)
И давайте предположим, что мы попытались найти линию, которая наилучшим образом проходила бы через точки, как это выглядело бы
![](/static/storage/104021133824634474044246222388669726461.png)
Однако, если бы мы масштабировали входные данные до того же диапазона, это выглядело бы примерно так
![](/static/storage/231597327499637851982489554140647348523.png)
Что даже с первого взгляда мы можем сказать, что линия лучше соответствует модели, т.е. меньше ошибок для предсказания невидимых данных.
Tеперь масштабирование функций обычно выполняется с использованием 2 методов:
- нормализация
- стандартизация
![](/static/storage/292962859630560038943815649017897851081.jpg)
Где, x — текущий ввод, который мы хотим масштабировать, вот пример нормализации набора данных, над которым мы работали.
![](/static/storage/141442973078844455103127011101420931103.png)
Это оставляет нам готовый набор данных для обучения.
![](/static/storage/62951170028095249885267468003408624788.png)
Шаг - 5: Работа с данными тестирования
Мы выполнили большую предварительную обработку обучающего набора данных, и данные тестирования будут выглядеть как нечистые обучающие данные.
Поэтому мы должны помнить, что:
- замените отсутствующие данные средним значением обучающих данных
- закодируйте данные класса в соответствии с данными обучения
- масштабирование объектов с использованием параметров обучающих данных
Вы понимаете, что мы использовали точно такие же инструменты работы, которые использовались в обучающем наборе данных, для операции, которую мы выполняли бы в тестовом наборе данных
Люди, занимающиеся обработкой данных, не должны становиться врачами 😝
![](/static/storage/276626338380517293505821071171677391766.png)
И теперь у нас есть данные тестирования, которые готовы к использованию в нашей модели ML