2016-09-25 7 views
0

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

Мой вопрос: с учетом CSV-файла, где каждый столбец данных представляет собой функцию, с какими значениями minX и maxX я должен нормализовать свои данные?

Более конкретно, следует ли нормализовать каждую функцию отдельно (используя значения minX/maxX из каждого столбца), нормализуя все данные за один раз (поиск minX/maxX из всего набора данных, ergo всех функций) или нормализация на входные данные?

ответ

0

Вы хотите, чтобы все ваши функции были в одном диапазоне для линейных классификаторов (и не только для них! Также для нейронных сетей!). Причина, по которой вы хотите масштабировать, должна быть очень ясной для вас, прежде чем двигаться вперед. Взгляните на Andrew Ng's lecture на эту тему для интуитивного объяснения того, что происходит.

Как только это станет ясно, у вас должен быть ответ на ваш вопрос: нормализовать каждую функцию по отдельности. Например, если у вас есть таблица с 3-мя рядами:

row | F1 | F2 
1 | 1 | 1000 
2 | 2 | 2000 
3 | 3 | 3000 

Вы хотите масштабировать F1, принимая его максимальное значение (3) и его минимального значения (1). Вы будете делать то же самое для F2 с 3000 и 1000 как max и min соответственно.

Это называется масштабированием MinMax. Вы также можете делать масштабирование, основанное на среднем значении и дисперсии, или следовать другому подходу полностью, думая, что у вас обычно есть «бюджет» с точки зрения вычислительных ресурсов, и вы хотите его максимизировать. В этом случае что-то вроде Histogram Equalization может быть хорошим выбором.

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

+0

Я понимаю нормализацию функции по характеристикам для данных обучения, но как насчет входных данных, которые я использую, когда начинаю делать прогнозы? Например, если у меня есть массив входов: {F1: 12, F2: 19, F3: 8}, следует ли нормализовать каждое значение с помощью значений minX/maxX из данных обучения или из других значений в массиве? –

+0

Конечно. Классификатор, который вы обучили, является функцией f (V), где V - ваш вектор функции. Если V был нормализован через какую-либо другую функцию g (V), то вам нужно применить ту же самую функцию к данным прогноза. Так, например, если вы используете нормировку minmax, вам нужно сохранить значения min и max где-нибудь, чтобы вы могли применить ту же самую нормализацию к данным прогнозирования. Примечание: если ваши данные прогнозирования имеют функцию, меньшую, чем мин или больше максимальной, просто установите ее в MIN или MAX (соответственно). – Tex

1

Нормализовать каждую функцию отдельно. Вы хотите ограничить диапазон каждой функции в четко определенном интервале (т. Е. [0,1]). Используйте данные только из набора данных обучения.

Если вы используете масштабирование Min-Max, у вас будет меньший STD, это неплохо. Если использование Min-Max или стандартизация (mu = 0, std = 1) зависит от приложения, которое вам нужно выполнить.

+0

Хорошо, поэтому, когда я ввожу в мою нейронную сеть массив функций {F1: 12, F2: 19, F3: -80}, я нормализую каждую функцию с данными прошлого minX/maxX (из данных обучения)? Или я нормализую его значениями minX/maxX из входного массива? –

+0

Если набор учебных данных достаточно хорош, ваши входные данные должны быть в диапазоне [0,1], используя min-max из него. Если этого не произойдет, это не очень хорошо. В любом случае используйте min-max из набора данных обучения. – ozw1z5rd