Стандартизация до или после категориального кодирования?

Я работаю над алгоритмом регрессии, в данном случае k-NearestNeighbors, чтобы предсказать определенную цену продукта.

Итак, у меня есть обучающий набор, который имеет только одну категориальную функцию с 4 возможными значениями. Я справился с этим, используя схему категориального кодирования «один к k», что означает, что теперь у меня есть еще 3 столбца в моем Pandas DataFrame с 0/1 в зависимости от имеющегося значения.

Другие функции DataFrame - это в основном расстояния, такие как широта - долгота для местоположений и цен, все числовые.

Следует ли стандартизировать (распределение Гаусса с нулевым средним и единичной дисперсией) и нормализовать до или после категориального кодирования?

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


comment
Вы должны попробовать оба варианта и посмотреть, что работает для вас хорошо, учитывая ваш выбор алгоритма.   -  person Vivek Kumar    schedule 14.11.2017
comment
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что он касается машинного обучения, а не разработки программного обеспечения. Вы можете задать эти вопросы на Cross Validated или DataScience.SE.   -  person E_net4 the curator    schedule 15.11.2017


Ответы (4)


Вроде открытая проблема, поэтому я хотел бы ответить, хотя уже поздно. Я также не уверен, насколько это повлияет на сходство между векторами, но по моему практическому опыту вы должны сначала кодировать свои функции, а затем масштабировать их. Я пробовал обратное с помощью scikit learn preprocessing.StandardScaler(), и это не сработает, если ваши векторы функций не имеют одинаковой длины: scaler.fit(X_train) дает ValueError: setting an array element with a sequence. Из вашего описания я вижу, что ваши данные имеют фиксированное количество функций, но я думаю для обобщения целей (может быть, в будущем у вас появятся новые функции?), хорошо предположить, что каждый экземпляр данных имеет уникальную длину вектора признаков. Например, я преобразую свои текстовые документы в индексы слов с помощью Keras text_to_word_sequence (это дает мне различную длину вектора), затем я конвертирую их в горячие векторы, а затем стандартизирую их. На самом деле я не заметил значительных улучшений в стандартизации. Я думаю, вам также следует пересмотреть, какие из ваших функций стандартизировать, поскольку макеты могут не нуждаться в стандартизации. Здесь не похоже, что категориальные атрибуты нуждаются в какой-либо стандартизации или нормализации. K-ближайшие соседи зависят от расстояния, поэтому на него могут повлиять эти методы предварительной обработки. Я бы посоветовал попробовать либо стандартизацию, либо нормализацию и проверить, как разные модели реагируют на ваш набор данных и задачу.

person KLaz    schedule 29.10.2018

После. Представьте себе, что в вашем столбце есть не числовые переменные, а строки. Строки нельзя стандартизировать, верно? :)

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

person avchauzov    schedule 15.11.2017

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

person bernando_vialli    schedule 13.11.2017

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

person Waleed93    schedule 15.09.2020