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

Python 我应该为knn规范化或标准化我的数据集吗?,python,python-3.x,machine-learning,scikit-learn,knn,Python,Python 3.x,Machine Learning,Scikit Learn,Knn,我试图使用knn进行分类任务,我的数据集包含分类特征,这些特征是一个热编码的,数字特征,如价格等。,以及我的文本列的BoW(CountVectorizer)向量 我知道knn受到缩放的影响。所以我不知道在这里用什么 from sklearn.preprocessing import StandardScaler from sklearn.preprocessing import Normalizer from sklearn.preprocessing import normalize 我的建

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

我知道knn受到缩放的影响。所以我不知道在这里用什么

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

我的建议是去

其中一个主要原因是,您的特性(如price)不能有负值,而且正如您所提到的,它可能是稀疏的

来自文档:

使用这种缩放的动机包括非常小的鲁棒性 特征的标准差与稀疏空间中的零项保持 数据

同时,如果数值变量的方差很大,则选择或

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

对于BoW,保持数据的稀疏性很重要。如果应用StandardScaler,将失去稀疏性。你一定要选择MinMaxScaler。
另一个选择是使用默认的l2规范化

StandardScaler
对于数字功能应该足够了。@SergeyBushmanov price列中的许多行都是零?我仍然可以使用standardscaler进行标准化吗?您观察到许多价格都是零,这可能会导致您进入另一个功能预处理管道,但通常情况下,会对具有不同比例的数字功能应用
standardscaler
。这对我们来说很重要KNN@SergeyBushmanov我有一个小问题。您提到仅标准化我的数字特征,但我已将PCA应用于我的弓特征,我正在考虑是否应将它们与数字特征一起标准化,而忽略分类特征。弓已经是性能良好的特征。我想你不需要标准化它们。但是,如果您愿意,您可以始终交叉验证,如果这样做有意义的话。我可以知道您所说的保留数据稀疏性是什么意思吗。实际上,我在弓上使用了PCA,并将其转换为更小的维度。因此,我现在可以对其应用缩放还是任其发展。
保留数据的稀疏性
意味着即使在标准化之后,特征中的零也将保持为零。稀疏性仅仅意味着非零值的数量更少。BoW通常有很多零,因为每个文档并不包含词汇表中的所有单词。