标准化是在类别编码之前还是之后进行?

我正在开发一个回归算法,在本例中使用k-最近邻来预测某产品的价格。

我的训练集只有一个类别特征,具有四种可能的值。我使用了一对多的类别编码方案来处理它,这意味着现在我的Pandas DataFrame中增加了三个列,每列根据现有的值包含0或1。

DataFrame中的其他特征主要是距离,如位置的纬度-经度和价格,全部为数值型数据。

我应该在类别编码之前还是之后进行标准化(使其符合均值为零和单位方差的高斯分布)以及归一化处理?

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


回答:

这似乎是一个悬而未决的问题,因此我想回答,尽管现在有点晚了。我也不确定向量之间的相似性会受到多大影响,但在我的实际经验中,你应该先对特征进行编码,然后再对它们进行缩放。我曾尝试过使用scikit learn的preprocessing.StandardScaler()进行相反的操作,如果你的特征向量长度不一致,它是行不通的:scaler.fit(X_train)会产生ValueError: setting an array element with a sequence. 从你的描述中我可以看出你的数据具有固定的特征数量,但我认为为了泛化(将来可能有新的特征?),最好假设每个数据实例具有唯一的特征向量长度。例如,我使用Keras的text_to_word_sequence将我的文本文档转换为词索引(这会给我不同的向量长度),然后我将它们转换为一热向量,最后进行标准化。实际上,我并没有看到标准化带来多大的改进。我认为你也应该重新考虑哪些特征需要标准化,因为虚拟变量可能不需要标准化。这里似乎并没有提到类别属性需要任何标准化或归一化处理。K-最近邻是基于距离的,因此这些预处理技术可能会对其产生影响。我建议尝试标准化或归一化,并检查不同模型对你的数据集和任务的反应如何。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注