|
|
(не показано 15 промежуточных версий 2 участников) |
Строка 1: |
Строка 1: |
− | Процесс подготовки данных для дальнейшего анализа называется '''предобработка'''
| + | = Типизация признаков = |
| + | == Преобразование числа == |
| + | Обычно с числами довольно удобно работать и преобразовывают их достаточно редко. |
| | | |
− | = Нормализация =
| + | '''Дискретизация''' |
− | Набор данных на самом деле содержит в себе единицы измерения, которые возможно будут указаны в формальном описании. Эти единицы измерения отбрасываются, чтобы набор данных имел только число.
| + | * Преобразование в порядковый признак. (берём в числах диапазоны и диапазонам сопоставляем категории) |
− | Чтобы это сделать необходимо, чтобы все объекты были приведены к единому формату (всё в килограммах или всё в метрах)
| + | * Преобразование в категориальный признак. ('''НО''' теряется информация о порядке) |
| | | |
− | //Пример про разницу машин
| + | == Преобразование порядкового типа == |
| + | [[File:Преобразование_порядкового_типа_в_k_категорий.png|250px|thumb|рис.1 Преобразование порядкового типа в 3 категории A, B, C : (A<B<C)]] |
| | | |
− | == Базовые методы нормализации данных ==
| + | * Преобразование в число(берём его порядковый номер) |
− | Применяются независимо к столбцу X
| + | * Преобразование в k бинарных категорий(если число значений конечно и равно k): |
| | | |
− | Важно в sklearn.preprocessing есть метод normalize, но это не то, что нам нужно, он рассматривает нормализацию с геометрической точки зрения
| + | <tex>c_i(ord) := (ord < ord_i), где </tex>{<tex>ord_1, ..., ord_k</tex>} - множество значений порядкового признака.(см. рис.1) |
− | (представляет объект в виде вектора), а не по столбцам | |
| | | |
| + | == Преобразование категории == |
| + | [[File:Преобразование_небинарной_категории_в_бинарную.png|250px|thumb|рис.2 Преобразование небинарной категории в бинарную (A<B<C)]] |
| | | |
− | '''Минмакс, [0;1] масштабирование''' | + | * Бинарную категорию можно преобразовать в число: <tex>c_1 \Rightarrow 0, c_2 \Rightarrow 1</tex> или <tex>c_1 \Rightarrow -1, c_2 \Rightarrow +1</tex> |
− | <tex> x_{new} = \dfrac{x_{old} - min[X]}{max[X] - min[X]}</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> |
| | | |
− | После нормализации: <math>min[X_{new}] = 0</math> и <math>max[X_{new}] = 1</math>
| + | = Нормализация данных = |
| | | |
| + | Набор данных содержит в себе единицы измерения, которые отбрасываются, чтобы набор данных был просто числами. Но чтобы далее работать, нам нужно, чтобы все объекты были приведены к единому формату. Подробнее читай [http://neerc.ifmo.ru/wiki/index.php?title=Нормализация_набора_данных тут] |
| | | |
− | '''Стандартизация, 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). Из-за того, что эти наборы данных немного разные(в разных наборах данных были разные признаки) после объединения получатся пропуски.
| |
− | *Подали разреженный набор данных. Недостающие значения - пропуски.
| |
− | | |
− | == Как кодируются пропуски? ==
| |
− | *В CSV не стандартизировано, могут быть: “?”, “ “(пробел), “_”, любой другой символ, будь то две запятых подряд или пустая строка
| |
− | *В ARFF файле: “?”
| |
− | *В программе(Строка / объект): Null, None, пустая строка
| |
− | *В категории(кодирующейся от 0 до k-1): -1 или k
| |
− | *Число: NaN
| |
− | | |
− | == Базовые решения: ==
| |
− | *Удалить
| |
− | *Заменить
| |
− | *Добавить
| |
− | | |
− | Если алгоритм делает что-то быстрее или умнее чем базовое решение, то утверждается, что '''алгоритм умеет работать с пропусками'''
| |
− | | |
− | === Удаление ===
| |
− | Если в столбце есть пропуск - берём и удаляем его из рассмотрения.
| |
− | | |
− | Можно удалять строки(объекты), '''НО''' могут возникнуть проблемы: если в столбце были пропуски в тренировочном наборе данных, то скорее всего в этом столбце пропуски будут и в тестовом наборе.
| |
− | | |
− | === Замена ===
| |
− | Выделяют 2 подхода:
| |
− | ==== Общий подход: ====
| |
− | Обучить модель, которая умеет учитывать пропуски, предсказывать значения текущего столбца.
| |
− | | |
− | На примере с рис2. Предполагаем, что второй объект ближе всего к четвёртому, поэтому скорость заполняем 160,
| |
− | а первый ближе к пятому, поэтому цвет заполняем "красный"
| |
− | | |
− | ==== Частный случай: ====
| |
− | Заполнение средним арифметическим / модой
| |
− | | |
− | //про zero-rule classification
| |
− | | |
− | На примере с рис3. Среднее арифметическое(230, 160, 80, 250) = 180, а Мода(красный, синий, зелёный, синий) = синий
| |
− | | |
− | ==== Константная замена ====
| |
− | Применяется в случае, когда мы знаем, что кодирует пропуск.
| |
− | | |
− | (Пример) разреженная таблица состоит из слов и количества вхождений этого слова в текст. Если слово в тексте не встречалось, то на месте количества может стоять пропуск, что эквивалентно 0, если же храним: встречалось или нет, то на месте пропуска может быть false. | |
− | | |
− | === Добавление ===
| |
− | *Если признак категориальный - добавляем к нему новое значение "пропуск"(увеличиваем количество категорий на 1)
| |
− | *Если признак числовой - добавляем новый бинарный признак, было ли данное значение пропущено, а само значение заменять методами описанными выше.
| |
− | (рис4)
| |
− | | |
− | == Отказ алгоритмов ==
| |
− | Алгоритм может не только принимать на вход пропуски, но и возвращать. Если алгоритм возвращает проспуск, значит он отказывается от работы.
| |
− | *Отказ от классификации: используется в ансамблях(когда несколько алгоритмов классификации работают, то какой-то из них может отказаться, понадеясь, что другой сможет классифицировать объект)
| |
− | *Отказ от кластеризации: используется для поиска аномалий(объект не попал ни в один кластер => аномальный)
| |
− | | |
− | '''Важно''' Алгоритм не будет просто так возвращать отказ от классификации / кластеризации(не будет возвращать значение пропуск, а вернёт что-то).
| |
− | Нужно смотреть отдельные реализации алгоритмов.
| |
− |
| |
− | == Задача предсказания и заполнения пропусков ==
| |
− | Задачу заполнения пропусков можно свести к задаче предсказания.
| |
− | (рис5)
| |
− | | |
− | Есть набор данных, который условно разбит на train и test. Можно сказать, что значения test в столбце Y пропущены и вместо задачи обучения с учителем решать задачу заполнения пропусков.
| |
− | | |
− | В случае задачи обучения без учителя можно сказать, что все значения в столбце пропущены. (см. рис6)
| |
− | | |
− | == Рекомендательные системы ==
| |
− | '''Коллаборативная(совместная) фильтрация'''
| |
− | | |
− | Есть множество пользователей и множество предметов, которые эти пользователи оценивают. Нужно понять, как определённый пользователь оценит предмет, который до этого не оценивал. (см. рис7)
| |
− | | |
− | Эта задача не решается методами заполнения пропуска. Но методами рекомендательных систем можно решить задачу заполнения пропусков.
| |
− | | |
− | == Обучение на привилегированных данных ==
| |
− | Задача обучения с учителем, но к X даётся некоторый X', про который известно, что в тестовом множестве X' будет пропущен. (см. рис8)
| |
− | | |
− | Базовое решение:
| |
− | *Не использовать X'
| |
− | *Обучить модель <math>a_1</math> предсказывать X' по X. Затем обучить модель <math>a_2</math> предсказывать Y по X и <math> a_1</math>(X)
| |
− | *Обучать предсказывать X' и Y.
| |
− | | |
− | (Пример)
| |
− | Предсказать результат футбольного матча(победа/поражение). Где привелигированные данные: число голов, число красных/ жёлтых карточек.
| |
− | | |
− | == Обучение на частично размеченных данных ==
| |
− | В тренировачном множестве только часть объектов имеют значение целевой переменной Y, у остальных объектов тренировочного и тестового множества значение Y пропущено. (см. рис9)
| |
− | | |
− | Базовое решение:
| |
− | *Не использовать объекты у которых пропущен целевой признак
| |
− | *Не использовать целевой признак для обучения. Размеченные объекты(с заданным Y) можно использовать для тестирования(как внешнюю меру)
| |
− | | |
− | //Активное обучение
| |
− | | |
− | //Обучение с подкреплением
| |