Имеет ли смысл использовать Standard Scaler после применения Label Encoder?
Я начинаю проект с набором данных, который содержит более 5 тысяч уникальных значений для категории.
Мой вопрос: после использования кодировщика меток для "перечисления" категорий имеет ли смысл использовать Standard Scaler, чтобы сделать данные более "управляемыми" для моей модели машинного обучения?
Имейте в виду, что у меня более 500 тыс. Записей и 5 тыс. Уникальных категорий для этой конкретной колонки.
Это больше связано с интуицией, стоящей за этим, а не с тем, как это кодировать, но я подумал, что это должно быть место, чтобы спросить.
3 ответа
LabelEncoder
следует использовать для меток, чтобы метки для n категорий были заменены целыми числами от 1 до n. Вам следует сделать это, если это еще не сделано.
StandardScaler
предназначен для использования в конечном итоге для данных обучения и тестирования, но не для меток. Он выводит положительный или отрицательный float
.
Вы, конечно, не должны применять это к столбцу метки, так как столбец метки должен быть положительным Integer
.
Если вы используете LabelEncoder для категории, вам необходимо убедиться, что ваша категория может быть сопоставимой. Например, для категории ['high', 'med', 'low'] элементы сопоставимы, поэтому имеет смысл использовать LabelEncoding и стандартное масштабирование.
Однако, когда ваши категории нельзя сравнивать друг с другом, метка кодирования не имеет никакого смысла. Например, нельзя сравнивать "понедельник" и "вторник".
TL;DR
Если ваша категория сопоставима (порядковая), это имеет смысл. Если нет, попробуйте найти способы уменьшить свою категорию, для этого есть много способов.
1) LabelEncoder необходим, поскольку ваша модель машинного обучения не может обрабатывать строки. Вам нужна последовательная числовая метка (0, 1, 2, .. n-1). Но это только для части метки, вы можете использовать однократное кодирование или напрямую числовые метки в зависимости от требований вашей модели.
2) StandardScalar делает ваши данные нулевым средним и единичной дисперсией.
The standard score of a sample x is calculated as:
z = (x - u) / s
where u is the mean of the training samples or zero if with_mean=False, and s is the standard deviation of the training samples or one if with_std=False.
Стандартизация набора данных является общим требованием для многих оценщиков машинного обучения: они могут вести себя плохо, если отдельные функции не более или менее выглядят как стандартные нормально распределенные данные (например, по Гауссу с нулевым средним и единичной дисперсией).
Например, многие элементы, используемые в целевой функции алгоритма обучения (такие как ядро RBF машин опорных векторов или регуляризаторы L1 и L2 линейных моделей), предполагают, что все функции сосредоточены вокруг 0 и имеют дисперсию в том же порядке. Если характеристика имеет дисперсию, которая на несколько порядков больше, чем у других, она может доминировать над целевой функцией и сделать оценщик неспособным правильно учиться на других функциях, как ожидалось. (документация scikit-learn)
Так что обычно это помогает хорошо масштабировать данные, может быть полезно для более быстрой сходимости. Но, опять же, это зависит от модели машинного обучения, которую вы используете.