Предварительная обработка данных — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Новая страница: «Процесс подготовки данных для дальнейшего анализа называется '''предобработка''' = Норма…»)
 
м (rollbackEdits.php mass rollback)
 
(не показано 18 промежуточных версий 3 участников)
Строка 1: Строка 1:
Процесс подготовки данных для дальнейшего анализа называется '''предобработка'''
+
= Типизация признаков =
 +
== Преобразование числа ==
 +
Обычно с числами довольно удобно работать и преобразовывают их достаточно редко.
  
= Нормализация =
+
'''Дискретизация'''
Набор данных на самом деле содержит в себе единицы измерения, которые возможно будут указаны в формальном описании. Эти единицы измерения отбрасываются, чтобы набор данных имел только число.
+
* Преобразование в порядковый признак. (берём в числах диапазоны и диапазонам сопоставляем категории)
Чтобы это сделать необходимо, чтобы все объекты были приведены к единому формату (всё в килограммах или всё в метрах)
+
* Преобразование в категориальный признак. ('''НО''' теряется информация о порядке)
//Пример про разницу машин
 
  
== Базовые методы нормализации данных ==
+
== Преобразование порядкового типа ==
Применяются независимо к столбцу X
+
[[File:Преобразование_порядкового_типа_в_k_категорий.png|250px|thumb|рис.1 Преобразование порядкового типа в 3 категории A, B, C : (A<B<C)]]
  
Важно в sklearn.preprocessing есть метод normalize, но это не то, что нам нужно, он рассматривает нормализацию с геометрической точки зрения
+
* Преобразование в число(берём его порядковый номер)
(представляет объект в виде вектора), а не по столбцам
+
* Преобразование в k бинарных категорий(если число значений конечно и равно k):
  
'''Минмакс, [0;1] масштабирование'''
+
<tex>c_i(ord) := (ord < ord_i), где </tex>{<tex>ord_1, ..., ord_k</tex>} - множество значений порядкового признака.(см. рис.1)
<tex> x_{new} = \dfrac{x_{old} - min[X]}{max[X] - min[X]}</tex>
 
  
После нормализации: <math>min[X_{new}] = 0</math> и <math>max[X_{new}] = 1</math>
+
== Преобразование категории ==
 +
[[File:Преобразование_небинарной_категории_в_бинарную.png|250px|thumb|рис.2 Преобразование небинарной категории в бинарную (A<B<C)]]
  
 +
* Бинарную категорию можно преобразовать в число: <tex>c_1 \Rightarrow 0, c_2 \Rightarrow 1</tex> или <tex>c_1 \Rightarrow -1, c_2 \Rightarrow +1</tex>
 +
* Категорию из k значений {<tex>c_1, ..., c_k</tex>} можно '''бинаризовать''' получив k бинарных категорий:<tex>b_i(c) := (c = c_i)</tex>(см. рис.2)('''НО''' обратное преобразование иногда невозможно(получим много true и не понятно, к какой категории относить))
 +
* One-hot encoding - преобразование категорий в числа (0, 1): one-hot<tex>_i(c) = [c = c_i]</tex>
  
'''Стандартизация, Z-масштабирование'''
+
= Нормализация данных =
<tex> x_{new} = \dfrac{x_{old} - E[X]}{D[X]}</tex>
 
  
После нормализации: <math>E[X_{new}] = 0</math> и <math>D[X_{new}] = 1</math>
+
Набор данных содержит в себе единицы измерения, которые отбрасываются, чтобы набор данных был просто числами. Но чтобы далее работать, нам нужно, чтобы все объекты были приведены к единому формату. Подробнее читай [http://neerc.ifmo.ru/wiki/index.php?title=Нормализация_набора_данных тут]
  
// == декорреляция == пока не нашёл
+
= Аномалии в наборе данных =
  
= Задача заполнения пропусков. =
+
Аномалии - плохие объекты для построения нашей модели.
  
== Откуда берутся пропуски? ==
+
Задача поиска аномалий является отдельной задачей машинного обучения, про которую можно почитать [http://neerc.ifmo.ru/wiki/index.php?title=поиск_аномалий здесь]
*Решаем задачу поиска аномалий для столбцов. Когда находим аномальное значение в столбце. Можно сказать, что это не аномалия, а ошибка и его можно пометить как пропуск
 
*2 набора данных объединяем(рис1(1 лекция, стр60)). Из-за того, что эти наборы данных немного разные(в разных наборах данных были разные признаки) и после объединения получатся пропуски.
 
// про разные скорости
 
*Конвертировать разреженный набор данных в обычный. Недостающие значения сконцентрируются(3:45:26) в пропуски.//(Вы будете делать таблицу)
 
  
== Как кодируются пропуски? ==
+
= Пропуски в наборе данных =
*В CSV не стандартизировано, могут быть: “?”, “ “(пробел), “_”, любой другой символ или например две запятых подряд или пустая строка
 
*В ARFF файле: “?”
 
*В программе(Строка / объект): Null, None, пустая строка
 
*В категории(кодирующейся от 0 до k-1): -1 или k
 
*Число: NaN
 
  
== Базовые решения: ==
+
Иногда в таблице с данными существую пустоты(они же пропуски), про работу с пропусками можно почитать [http://neerc.ifmo.ru/wiki/index.php?title=Работа_с_пропусками_в_наборе_данных тут]
*Удаление
 
*Заменить
 
*Добавить
 
 
 
Если алгоритм делает что-то быстрее или умнее чем базовое решение, то утверждается, что '''алгоритм умеет работать с пропусками'''
 
 
 
=== Удаление ===
 
Если в столбце есть пропуск - берём и удаляем его из рассмотрения.
 
 
 
Можно удалять строки(объекты), '''НО''' могут возникнуть проблемы: если в столбце были пропуски в тренировочном наборе данных, то скорее всего в этом столбце они будут и в тестовом наборе.
 
 
 
=== Замена ===
 
Выделяют 2 подхода:
 
==== Общий подход: ====
 
Обучить модель, которая умеет учитывать пропуски, предсказывать значения текущего столбца.
 
рис2(1 лекция, стр61, левый)
 
Предполагаем, что второй объект ближе всего к четвёртому, поэтому скорость заполняем 160,
 
а первый ближе к пятому, поэтому цвет заполняем красный
 
 
 
==== Частный случай: ====
 
заполнение средним арифметическим / модой
 
рис2(1 лекция, стр61, правый)
 
//про zero-rule classification
 
Среднее арифметическое(230, 160, 80, 250) = 180
 
Мода(красный, синий, зелёный, синий) = синий
 
 
 
==== Константная замена ====
 
Применяется в случае, когда мы знаем, что кодирует пропуск
 
(например) разреженная таблица состоит из слов и количества вхождений этого слова в текст, если слово в тексте не встречалось, то на месте количества может стоять пропуск, что эквивалентно 0, если же храним встречалось или нет, то на месте пропуска может быть false
 
 
 
=== Добавление ===
 
Если признак категориальный - добавляем к нему новое значение "пропуск"(увеличиваем количество категорий на 1)
 
Если признак числовой - добавляем новый бинарный признак, было ли данное значение пропущено, а само значение заменять методами описанными выше
 
рис3(1 лекция, страница 62)
 
 
 
== Отказ алгоритмов ==
 
(3:52:00) возвращение дата-сетов с пропусками
 
 
 
== Задача предсказания и заполнения пропусков ==
 
Задачу заполнения пропусков можно свести к задаче предсказания
 
рис4(1 лекция, страница 64 верхняя часть)
 
Есть набор данных, который условно разбит на train и test. Можно сказать, что значения test в столбце Y пропущены и вместо задачи обучения с учителем решать задачу заполнения пропусков.
 
 
 
В случае задачи обучения без учителя можно сказать, что все значения в столбце пропущены
 
рис5(1 лекция, страница 64 справа снизу)
 
 
 
== Рекомендательные системы ==
 
'''Коллаборативная(совместная) фильтрация'''
 
 
 
Есть множество пользователей и множество предметов, которые эти пользователи оценят. Нужно понять, как определённый пользователь оценит предмет, который до этого не оценивал.
 
рис6(1 лекция, страница 65)
 
Эта задача не решается методами заполнения пропуска. Но методами рекомендательной систем можно решить задачу заполнения пропусков.
 
 
 
== Обучение на привилегированных данных ==
 
Задача обучения с учителе, но к X даётся некоторый X', про который известно, что в тестовом множестве X' будет пропущен
 
рис7(1 лекция, страница 66)
 
Базовые решения:
 
*Не использовать X'
 
*Обучить модель <math>a_1</math> предсказывать X' по X. Затем обучить модель <math>a_2</math> предсказывать Y по X и <math> a_1</math>(X)
 
*Обучать предсказывать X' и Y.
 
(Пример)
 
Предсказать результат футбольного матча(победа/поражение)
 
Привелигированные данные: число голов, число красных/ жёлтых карточек
 
 
 
== Обучение на частично размеченных данных ==
 
В тренировачном множестве только часть объектов имеют значение целевой переменной Y, у остальных объектов тренировочного и тестового множества значение Y пропущено.
 
рис8(1 лекция, страница 67)
 
 
 
Базовое решение:
 
*Не использовать объекты у которых пропущен целевой признак
 
*Не использовать целевой признак для обучения. Размеченные объекты(с заданным Y) можно использовать для тестирования(как внешнюю меру)
 
 
 
//Активное обучение
 
//Обучение с подкреплением
 

Текущая версия на 19:30, 4 сентября 2022

Типизация признаков

Преобразование числа

Обычно с числами довольно удобно работать и преобразовывают их достаточно редко.

Дискретизация

  • Преобразование в порядковый признак. (берём в числах диапазоны и диапазонам сопоставляем категории)
  • Преобразование в категориальный признак. (НО теряется информация о порядке)

Преобразование порядкового типа

рис.1 Преобразование порядкового типа в 3 категории A, B, C : (A<B<C)
  • Преобразование в число(берём его порядковый номер)
  • Преобразование в k бинарных категорий(если число значений конечно и равно k):

[math]c_i(ord) := (ord \lt ord_i), где [/math]{[math]ord_1, ..., ord_k[/math]} - множество значений порядкового признака.(см. рис.1)

Преобразование категории

рис.2 Преобразование небинарной категории в бинарную (A<B<C)
  • Бинарную категорию можно преобразовать в число: [math]c_1 \Rightarrow 0, c_2 \Rightarrow 1[/math] или [math]c_1 \Rightarrow -1, c_2 \Rightarrow +1[/math]
  • Категорию из k значений {[math]c_1, ..., c_k[/math]} можно бинаризовать получив k бинарных категорий:[math]b_i(c) := (c = c_i)[/math](см. рис.2)(НО обратное преобразование иногда невозможно(получим много true и не понятно, к какой категории относить))
  • One-hot encoding - преобразование категорий в числа (0, 1): one-hot[math]_i(c) = [c = c_i][/math]

Нормализация данных

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

Аномалии в наборе данных

Аномалии - плохие объекты для построения нашей модели.

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

Пропуски в наборе данных

Иногда в таблице с данными существую пустоты(они же пропуски), про работу с пропусками можно почитать тут