我应该为 knn 标准化还是标准化我的数据集?

Posted

技术标签:

【中文标题】我应该为 knn 标准化还是标准化我的数据集?【英文标题】:Should I normalize or standardize my dataset for knn? 【发布时间】:2019-07-31 02:07:45 【问题描述】:

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

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

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

【问题讨论】:

StandardScaler 对于数字特征应该足够了。 @SergeyBushmanov 价格列中的许多行都是零?我还能使用standardscaler进行标准化吗? 您观察到许多价格为零可能会导致您使用其他特征预处理管道,但一般来说,可以将StandardScaler 应用于具有不同比例的数值特征。这对 KNN 很重要 @SergeyBushmanov 我有一个小问题。你提到只标准化我的数字特征,但我已经在我的 BoW 特征上应用了 PCA,我正在考虑是否应该将它们与数字特征一起标准化并省略分类特征。 BoW 已经是表现良好的功能。我猜你不需要标准化它们。但是,如果您愿意,您可以随时交叉验证这是否有意义。 【参考方案1】:

我的建议是MinMaxScaler

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

来自文档:

使用这种缩放的动机包括对非常小的鲁棒性 特征的标准偏差并在稀疏中保留零条目 数据。

同时,如果你的数值变量有很大的差异,那么选择RobustScaler 或StandardScaler。

您不必缩放一个热门编码功能。

对于 BoW,保持数据的稀疏性很重要。如果您应用 StandardScaler,您将失去稀疏性。你一定要选择 MinMaxScaler。 另一种选择是使用TfidfVectorizer,默认情况下它会进行 l2 标准化。

【讨论】:

我能知道你所说的保持数据的稀疏性是什么意思吗?实际上,我已经在我的 BoW 上使用了 PCA 并转换为更少的维度。那么我现在可以对其应用缩放还是让它成为现实。 preserving the sparsity of the data 表示特征中的零点即使在标准化之后也会保持为零。稀疏性仅仅意味着具有较少数量的非零值。 BoW 通常有很多零,因为每个文档都不包含词汇表中的所有单词。

以上是关于我应该为 knn 标准化还是标准化我的数据集?的主要内容,如果未能解决你的问题,请参考以下文章

使用KNN算法对鸢尾花种类预测

使用KNN算法对鸢尾花种类预测

K-近邻算法(KNN)

如何按照某些标准将数据集拆分为子集?

knn算法错误百分比

机器学习:kNN的超参数