如果分类变量可以取的值的数量很大,我们如何使用一种热编码?
就我而言,它是 56 个值。因此,按照通常的方法,我必须在训练数据集中添加 56 列(56 个二进制特征),这将极大地增加复杂性,从而增加训练时间。
那么我们如何处理这种情况呢?
如果分类变量可以取的值的数量很大,我们如何使用一种热编码?
就我而言,它是 56 个值。因此,按照通常的方法,我必须在训练数据集中添加 56 列(56 个二进制特征),这将极大地增加复杂性,从而增加训练时间。
那么我们如何处理这种情况呢?
如果你真的很在意维度的数量,你仍然可以在你的一次热编码之后尝试应用降维算法,例如 PCA(主成分分析)或 LDA(线性判别分析)。
但是要知道,“56 个特征”并不是很大,拥有数千、数百万甚至数十亿个特征在行业中非常普遍。
如果您有一些类别与大多数类别相比所占比例较小,则可以尝试通过将它们标记为相同来减少 56 个虚拟结果特征的维度。
这取决于您正在处理的问题。如果分类变量的数量很大,最好使用标签编码。但是标签编码应该是有意义的,即彼此接近的类别应该得到相似的标签。假设您正在创建一个具有 feature 的模型Month
。但是您的目标变量有一个周期性,即每 x 个月,比如 3 个月,趋势是相似的。现在使用标签 1, 2, ... 12 几个月没有意义,相反,最好使用 0, 1, 2, 0, 1, 2.... 这样的标签。所以Jan
是0,Feb
是1,Mar
是2,又Apr
是0,依此类推。
您可以使用LabelEncoder
ofsklearn.preprocessing
来解决这个问题。但它并没有像我提到的那样处理语义。为此,您可以进行一些手动标签编码。
当有大量分类变量时,建议做一个与休息。