分类编码之前或之后的标准化?

Fra*_*nch 6 machine-learning linear-regression scikit-learn sklearn-pandas one-hot-encoding

我正在研究回归算法,在这种情况下k-NearestNeighbors预测产品的某个价格。

所以我有一个训练集,它只有一个具有 4 个可能值的分类特征。我已经使用一对 k 分类编码方案处理了它,这意味着现在我的 Pandas DataFrame 中还有 3 个列,其中 0/1 取决于存在的值。

DataFrame 中的其他特征主要是距离,如纬度 - 位置和价格的经度,都是数字。

我应该标准化(具有零均值和单位方差的高斯分布)并在分类编码之前或之后归一化吗?

我认为在编码后进行归一化可能是有益的,这样在测量邻居之间的距离时,每个特征对估计器来说都与其他特征一样重要,但我不太确定。

KLa*_*Laz 6

似乎是一个悬而未决的问题,因此即使已经晚了,我也想回答。我也不确定向量之间的相似性会受到多大影响,但根据我的实际经验,您应该首先对特征进行编码,然后对其进行缩放。我已经尝试了与 scikit learn 相反的方法,preprocessing.StandardScaler()如果您的特征向量的长度不同,它就不起作用:scaler.fit(X_train)收益ValueError: setting an array element with a sequence.我可以从您的描述中看到您的数据具有固定数量的特征,但我认为是出于泛化目的(也许您将来有新功能吗?),最好假设每个数据实例都有唯一的特征向量长度。例如,我使用 Keras 将我的文本文档转换为单词索引text_to_word_sequence(这给了我不同的向量长度),然后我将它们转换为单热向量,然后对它们进行标准化。我实际上并没有看到标准化有很大的改进。我认为您还应该重新考虑要标准化哪些功能,因为可能不需要标准化假人。在这里,分类属性似乎不需要任何标准化或规范化。K-最近邻是基于距离的,因此它会受到这些预处理技术的影响。我建议尝试标准化或规范化,并检查不同的模型如何对您的数据集和任务做出反应。