Стандартизация до или после категориального кодирования?
Я работаю над алгоритмом регрессии, в данном случае k-NearestNeighbors, чтобы предсказать определенную цену продукта.
Таким образом, у меня есть тренировочный набор, который имеет только одну категориальную особенность с 4 возможными значениями. Я имел дело с этим, используя схему категориального кодирования "один к к", что означает, что теперь у меня есть еще 3 столбца в моем Pandas DataFrame с 0/1 в зависимости от текущего значения.
Другие функции в DataFrame - это, в основном, расстояния, такие как широта - долгота для местоположений и цен, все числовые.
Должен ли я стандартизировать (распределение Гаусса с нулевым средним и единичной дисперсией) и нормализовать до или после категориального кодирования?
Я думаю, что может быть полезно нормализовать после кодирования, чтобы каждая функция была для оценки столь же важной, как и любая другая при измерении расстояний между соседями, но я не совсем уверен.
3 ответа
Похоже на открытую проблему, поэтому я хотел бы ответить, хотя уже поздно. Я также не уверен, насколько сильно повлияет сходство между векторами, но по моему практическому опыту вы должны сначала закодировать свои функции, а затем масштабировать их. Я попробовал противоположное с Scikit учиться preprocessing.StandardScaler()
и это не сработает, если ваши векторы объектов не имеют одинаковую длину: scaler.fit(X_train)
доходность ValueError: setting an array element with a sequence.
Из вашего описания я вижу, что ваши данные имеют фиксированное количество функций, но я думаю, что для целей обобщения (возможно, у вас появятся новые функции в будущем?), Было бы хорошо предположить, что каждый экземпляр данных имеет уникальную длину вектора признаков. Например, я преобразовываю свои текстовые документы в словарные индексы с помощью Keras text_to_word_sequence
(это дает мне разную длину вектора), затем я конвертирую их в однозначные векторы и затем стандартизирую их. На самом деле я не видел большого улучшения в стандартизации. Я думаю, что вы должны также пересмотреть, какие из ваших функций стандартизировать, так как манекены могут не нуждаться в стандартизации. Здесь не похоже, что категориальные атрибуты нуждаются в какой-либо стандартизации или нормализации. K-ближайшие соседи основаны на расстоянии, поэтому на них могут влиять эти методы предварительной обработки. Я бы предложил попробовать либо стандартизацию, либо нормализацию и проверить, как разные модели реагируют на ваш набор данных и задачу.
После. Просто представьте, что в вашем столбце есть не числовые переменные, а строки. Вы не можете стандартизировать строки - верно?:)
Но учитывая то, что вы написали о категориях. Если они представлены значениями, я полагаю, что внутри есть какой-то рейтинг. Вероятно, вы можете использовать необработанный столбец, а не одно горячее кодирование. Просто мысли.
Как правило, вы хотите стандартизировать все свои функции так, чтобы это было сделано после кодирования (то есть предполагается, что вы хотите начать стандартизацию с начала, учитывая, что есть некоторые алгоритмы машинного обучения, которые не нуждаются в стандартизации функций для нормальной работы).
Таким образом, существует 50/50 голосов по вопросу стандартизации данных. Я бы посоветовал, учитывая положительные эффекты с точки зрения улучшений, независимо от того, насколько малы и отсутствуют побочные эффекты, следует провести стандартизацию перед разделением и обучением оценки.