我目前正在处理一个包含 55k 条记录和七列(一个目标变量)的数据集,其中三个是名义分类的。其他三个是具有高基数的“描述”字段,正如在描述数据的许多情况下所预期的那样:
in>>
df[['size description', 'weight Description', 'height Description']].nunique()
out>>
size Description 4066
weight Description 736
height Description 3173
dtype: int64
这些值的一些示例可能是:
Product Product Description
--------- ------------------------
Ball Round bouncy toy for kids
Bat Stick that kids use to hit a ball
Go-Kart red/black Small motorized vehicle for kids
Go-Kart blue/green Small motorized vehicle for kids
Wrench Tool for tightening or loosening bolts
Ratchet Tool for tightening or loosening bolts
Reclining arm-chair Cushioned seat for lounging
如果描述属于特定类别,我认为描述是标准化的,但目前我无法确认唯一描述的数量是否有限。此时,我的假设是将这些视为名义分类,因为它们是字面上的描述性而不是定性的。
为此,我的问题是处理诸如此类的分类特征的一些最佳实践是什么?
我考虑过的事情:
在这种情况下,标签编码显然是不可行的,因为描述没有层次结构。
One-hot 编码似乎不太可能解决,因为由于其他变量的高基数,它会将数据集的形状从 (55300 , 6) 膨胀到 (55300 , 65223)。然而,我还是尝试了它,并在我的测试集上产生了 98% 的准确度,但在样本外验证集上的结果却非常糟糕(5k 条记录,0-5% 的准确度)。似乎很明显它过度拟合,因此不可行。
无论出于何种原因,散列不适用于其中一列,但我认为它仍然可行。我只需要弄清楚为什么它没有散列我的所有功能(我想这最适合单独的问题?)
PCA - 可能是可行的,但如果我正确理解单热编码后的基数太大,PCA 会抛出错误。公平地说,我还没有尝试过。
分箱似乎不可行,因为我的值可能是 3.5 或 3 和 1/2。每个都将被视为一个单独的垃圾箱,因此不能解决我的问题。
感谢所有可以分享他们的见解/意见的人。