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

时间:2017-11-13 19:27:04

标签: machine-learning scikit-learn linear-regression sklearn-pandas one-hot-encoding

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

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

DataFrame中的其他功能主要是纬度 - 纬度 - 位置和价格的经度,所有数字。

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

我认为在编码后进行规范化可能会有所帮助,以便在测量邻居之间的距离时,每个特征对于估算器和其他一样重要,但我不太确定。

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

您通常希望标准化所有功能,以便在编码后完成(假设您要开始标准化,考虑到有些机器学习算法不需要标准化的功能孔)。

答案 2 :(得分:0)

在。试想一下,你的列中没有数值变量,而是字符串。你不能标准化字符串 - 对吗? :)

但考虑到你写的关于类别的内容。如果它们用值表示,我想里面有某种排名。也许,你可以使用原始列而不是一个热编码。只是想一想。

答案 3 :(得分:0)

因此,对于是否标准化数据有50/50的投票。 我建议,鉴于改进带来的积极影响,无论有多小,也没有不利影响,应该在拆分和培训估计量之前进行标准化