Имеет ли смысл использовать Standard Scaler после применения Label Encoder? - PullRequest
0 голосов
/ 19 марта 2020

Я начинаю проект с набором данных, который содержит более 5 000 уникальных значений для категории.

Мой вопрос: , после использования кодировщика меток для "перечисления" категорий, имеет ли смысл использовать Standard Scaler, чтобы сделать данные немного более "управляемыми" для моего машинного обучения модель?

Имейте в виду, у меня есть более 500 000 записей и 5 000 уникальных категорий для этого конкретного столбца.

Это скорее интуиция, а не то, как ее кодировать, но я понял должно быть место, чтобы спросить.

Ответы [ 3 ]

0 голосов
/ 19 марта 2020

1) LabelEncoder необходим, поскольку ваша модель машинного обучения не может обрабатывать строки. Вам нужна последовательная цифра c метка (0, 1, 2, .. n-1). Но это только для части метки, вы можете использовать горячее кодирование или метки цифр c в зависимости от требований вашей модели.

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.

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

Например, многие элементы, используемые в целевой функции алгоритма обучения (например, ядро ​​RBF машин опорных векторов или регуляризаторы L1 и L2 линейных моделей), предполагают, что все объекты сосредоточены вокруг 0 и иметь дисперсию в том же порядке. Если у признака есть отклонение, которое на несколько порядков больше, чем у других, оно может доминировать в целевой функции и сделать оценщика неспособным учиться на других признаках правильно, как ожидалось. (документация scikit-learn)

Таким образом, обычно это помогает вам правильно масштабировать данные, что может быть полезно для более быстрой конвергенции. Но, опять же, это зависит от используемой вами модели ML.

0 голосов
/ 20 марта 2020

LabelEncoder следует использовать для меток, чтобы метки для n категорий заменялись на целые числа от 1 до n. Вы должны сделать это, если это еще не сделано.

StandardScaler предназначено для использования, в конечном счете, для данных обучения и испытаний, но не для меток. Он выводит положительный или отрицательный float.

Вы должны определенно не применить это к столбцу меток, так как столбец меток должен быть положительный Integer.

0 голосов
/ 19 марта 2020

Если вы используете LabelEncoder для категории, вам необходимо убедиться, что ваша категория может быть сопоставимой. Например, для категории ['high', 'med', 'low'] элементы сравнимы, поэтому имеет смысл LabelEncoding и стандартное масштабирование.

Однако, когда вашу категорию нельзя сравнить с друг друга, кодирование меток не имеет никакого смысла. Например, вы не можете сравнить «понедельник» со «вторником».

TL; DR
Если ваша категория сопоставима (порядковая), это имеет смысл. Если нет, попробуйте найти способы уменьшить свою категорию, для этого есть много способов.

...