Должен ли я нормализовать или стандартизировать мой набор данных для knn? - PullRequest
3 голосов
/ 09 марта 2019

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

Я знаю, что на knn влияет масштабирование.Так что я запутался, что тут использовать?

from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import Normalizer
from sklearn.preprocessing import normalize

1 Ответ

1 голос
/ 09 марта 2019

Мое предложение было бы пойти на MinMaxScaler

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

Из документации:

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

В то же время, если ваша числовая переменная имеет огромную дисперсию, выберите RobustScaler или StandardScaler .

Вам не нужно масштабировать функции с горячим кодированием.

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

...