我应该为 knn 规范化或标准化我的数据集吗?

Should I normalize or standardize my dataset for knn?

我试图将 knn 用于分类任务,我的数据集包含 分类特征,这些特征是一种热编码 价格等数字特征.. 以及 BoW(CountVectorizer) 向量用于我的文本列。

我知道 knn 会受到缩放的影响。所以我很困惑在这里使用什么?

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

我的建议是 MinMaxScaler

一个主要原因是您的价格等特征不能有负值,而且正如您提到的,它可能是稀疏的。

来自文档:

The motivation to use this scaling include robustness to very small standard deviations of features and preserving zero entries in sparse data.

同时,如果你的数值变量有很大的方差,那就去RobustScaler or StandardScaler

您不必缩放一个热编码特征。

对于 BoW 来说,保持数据的稀疏性很重要。如果您应用 StandardScaler,您将失去稀疏性。您绝对必须选择 MinMaxScaler。 另一种选择是选择 TfidfVectorizer,它默认执行 l2 规范化。