【问题标题】:Standardization before or after categorical encoding?分类编码之前或之后的标准化?
【发布时间】:2018-04-26 14:09:36
【问题描述】:
我正在研究一种回归算法,在本例中是 k-NearestNeighbors 来预测产品的某个价格。
所以我有一个训练集,它只有一个分类特征和 4 个可能的值。我已经使用一对一的分类编码方案来处理它,这意味着现在我的 Pandas DataFrame 中有 3 列,其值为 0/1,具体取决于存在的值。
DataFrame 中的其他特征主要是位置和价格的纬度 - 经度等距离,都是数字。
我应该在分类编码之前还是之后标准化(零均值和单位方差的高斯分布)和标准化?
我认为在编码后进行归一化可能是有益的,这样在测量邻居之间的距离时,每个特征对估计器与其他所有特征一样重要,但我不太确定。 p>
【问题讨论】:
标签:
machine-learning
scikit-learn
linear-regression
sklearn-pandas
one-hot-encoding
【解决方案1】:
似乎是一个悬而未决的问题,因此即使已经很晚了,我也想回答。我也不确定向量之间的相似性会受到多大影响,但根据我的实际经验,您应该首先对特征进行编码,然后对其进行缩放。我用 scikit learn preprocessing.StandardScaler() 尝试了相反的方法,如果您的特征向量的长度不同,它就不起作用:scaler.fit(X_train) 产生 ValueError: setting an array element with a sequence. 从您的描述中可以看出,您的数据具有固定数量的特征,但我认为出于泛化目的(也许您将来会有新功能?),最好假设每个数据实例具有唯一的特征向量长度。例如,我使用 Keras text_to_word_sequence 将我的文本文档转换为单词索引(这给了我不同的向量长度),然后我将它们转换为 one-hot 向量,然后我将它们标准化。我实际上并没有看到标准化有很大的改进。我认为您还应该重新考虑要标准化哪些功能,因为假人可能不需要标准化。 Here 似乎分类属性不需要任何标准化或规范化。 K-最近邻是基于距离的,因此它会受到这些预处理技术的影响。我建议尝试标准化或规范化,并检查不同模型对您的数据集和任务的反应。
【解决方案2】:
之后。试想一下,您的列中没有数字变量,而是字符串。你不能标准化字符串——对吧? :)
但是考虑到你写的关于类别的内容。如果它们用值表示,我想里面有某种排名。可能,您可以使用原始列而不是单热编码。只是想法。
【解决方案3】:
您通常希望对所有特征进行标准化,以便在编码之后完成(假设您希望从一开始就进行标准化,因为有些机器学习算法不需要对特征进行标准化即可工作好)。
【解决方案4】:
所以对于是否标准化数据有 50/50 的投票。
我建议,考虑到改进收益方面的积极影响,无论多么小并且没有不利影响,都应该在拆分和训练估计器之前进行标准化