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

Материал из Викиконспекты
Перейти к: навигация, поиск
(Базовые методы нормализации данных)
Строка 1: Строка 1:
Процесс подготовки данных для дальнейшего анализа называется '''предобработка'''
 
 
= Нормализация =
 
 
Набор данных на самом деле содержит в себе единицы измерения, которые возможно будут указаны в формальном описании. Эти единицы измерения отбрасываются, чтобы набор данных имел только число.
 
Набор данных на самом деле содержит в себе единицы измерения, которые возможно будут указаны в формальном описании. Эти единицы измерения отбрасываются, чтобы набор данных имел только число.
 
Чтобы это сделать необходимо, чтобы все объекты были приведены к единому формату (всё в килограммах или всё в метрах)
 
Чтобы это сделать необходимо, чтобы все объекты были приведены к единому формату (всё в килограммах или всё в метрах)
  
//Пример про разницу машин
+
= Базовые методы нормализации данных =
 
 
== Базовые методы нормализации данных ==
 
 
Применяются независимо к столбцу X
 
Применяются независимо к столбцу X
  
Строка 25: Строка 20:
 
После нормализации: <math>\mathbb{E}[X_{new}] = 0</math> и <math>\mathbb{D}[X_{new}] = 1</math>
 
После нормализации: <math>\mathbb{E}[X_{new}] = 0</math> и <math>\mathbb{D}[X_{new}] = 1</math>
  
// == декорреляция == пока не нашёл
+
= Декорреляция =
 
 
= Задача заполнения пропусков. =
 
 
 
== Откуда берутся пропуски? ==
 
*Решаем задачу поиска аномалий для столбцов. Когда находим аномальное значение в столбце. Можно сказать, что это не аномалия, а ошибка и его можно пометить как пропуск
 
*Объединяем 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)
+
1. Есть матрица X.
  
== Рекомендательные системы ==
+
2. Матрицу центрировали (<math>\mathbb{E}[X_j] = 0</math>).
'''Коллаборативная(совместная) фильтрация'''
 
  
Есть множество пользователей и множество предметов, которые эти пользователи оценивают. Нужно понять, как определённый пользователь оценит предмет, который до этого не оценивал. (см. рис7)
+
3. Ковариация вычисляется по следующей формуле:
  
Эта задача не решается методами заполнения пропуска. Но методами рекомендательных систем можно решить задачу заполнения пропусков.
+
<tex>\Sigma(X) = \dfrac{1}{N}X^TX</tex>
  
== Обучение на привилегированных данных ==
+
4. Если же матрица нормализована так, что <math>\mathbb{D}[X_j] = 1</math>, то из произведения мы получим не ковариационную, а корреляционную матрицу
Задача обучения с учителем, но к X даётся некоторый X', про который известно, что в тестовом множестве X' будет пропущен. (см. рис8)
 
  
Базовое решение:
+
5. Декорреляция вычисляется по формуле:
*Не использовать X'
 
*Обучить модель <math>a_1</math> предсказывать X' по X. Затем обучить модель <math>a_2</math> предсказывать Y по X и <math> a_1</math>(X)
 
*Обучать предсказывать X' и Y.
 
  
(Пример)
+
<tex>\hat{X} = X \times \sum^{-1/2}(X)</tex>
Предсказать результат футбольного матча(победа/поражение). Где привелигированные данные: число голов, число красных/ жёлтых карточек.
 
  
== Обучение на частично размеченных данных ==
+
где <tex>\Sigma^{1/2}</tex>  находится из разложения Холецкого
В тренировачном множестве только часть объектов имеют значение целевой переменной Y, у остальных объектов тренировочного и тестового множества значение Y пропущено. (см. рис9)
 
  
Базовое решение:
+
{{Утверждение
*Не использовать объекты у которых пропущен целевой признак
+
|statement=После декорреляции: <tex>\sum(\hat{X}) = I</tex>
*Не использовать целевой признак для обучения. Размеченные объекты(с заданным Y) можно использовать для тестирования(как внешнюю меру)
+
|proof=<tex>\Sigma = \dfrac{X^TX}{n}</tex>
  
//Активное обучение
+
<tex>\hat{X} = X \times \Sigma^{-1/2}</tex>
  
//Обучение с подкреплением
+
<tex>\dfrac{\hat{X}^T\hat{X}}{n} = \dfrac{(X * \Sigma^{-1/2})^T * (X * \Sigma^{-1/2})}{n} = \dfrac{\Sigma^{-T/2} * X^T * X * \Sigma^{-1/2}}{n} =
 +
= (\Sigma^{-T/2} * \Sigma^{T/2})*(\Sigma^{1/2}*\Sigma^{-1/2}) = I * I = I</tex>.
 +
}}

Версия 16:56, 29 июня 2022

Набор данных на самом деле содержит в себе единицы измерения, которые возможно будут указаны в формальном описании. Эти единицы измерения отбрасываются, чтобы набор данных имел только число. Чтобы это сделать необходимо, чтобы все объекты были приведены к единому формату (всё в килограммах или всё в метрах)

Базовые методы нормализации данных

Применяются независимо к столбцу X

Важно в sklearn.preprocessing есть метод normalize, но это не то, что нам нужно, он рассматривает нормализацию с геометрической точки зрения (представляет объект в виде вектора), а не по столбцам


Минмакс, [0;1] масштабирование [math] x_{new} = \dfrac{x_{old} - \min[X]}{\max[X] - \min[X]}[/math]

После нормализации: [math]\min[X_{new}] = 0[/math] и [math]\max[X_{new}] = 1[/math]


Стандартизация, Z-масштабирование [math] x_{new} = \dfrac{x_{old} - \mathbb{E}[X]}{\mathbb{D}[X]}[/math]

После нормализации: [math]\mathbb{E}[X_{new}] = 0[/math] и [math]\mathbb{D}[X_{new}] = 1[/math]

Декорреляция

1. Есть матрица X.

2. Матрицу центрировали ([math]\mathbb{E}[X_j] = 0[/math]).

3. Ковариация вычисляется по следующей формуле:

[math]\Sigma(X) = \dfrac{1}{N}X^TX[/math]

4. Если же матрица нормализована так, что [math]\mathbb{D}[X_j] = 1[/math], то из произведения мы получим не ковариационную, а корреляционную матрицу

5. Декорреляция вычисляется по формуле:

[math]\hat{X} = X \times \sum^{-1/2}(X)[/math]

где [math]\Sigma^{1/2}[/math] находится из разложения Холецкого

Утверждение:
После декорреляции: [math]\sum(\hat{X}) = I[/math]
[math]\triangleright[/math]

[math]\Sigma = \dfrac{X^TX}{n}[/math]

[math]\hat{X} = X \times \Sigma^{-1/2}[/math]

[math]\dfrac{\hat{X}^T\hat{X}}{n} = \dfrac{(X * \Sigma^{-1/2})^T * (X * \Sigma^{-1/2})}{n} = \dfrac{\Sigma^{-T/2} * X^T * X * \Sigma^{-1/2}}{n} = = (\Sigma^{-T/2} * \Sigma^{T/2})*(\Sigma^{1/2}*\Sigma^{-1/2}) = I * I = I[/math].
[math]\triangleleft[/math]