在大约100万行的数据集中,其中大多数都是布尔功能,我想对15列字符串数据进行编码,以便识别它们之间的交互。所以数据是这样的:
Name1 Name2 Name3 ...
Jane John Julie ...
John Julie Peter ...
相同的名称可以出现在任何列中,但是名称在列之间始终按字母顺序排列。 现在,我将数据重塑为“长”格式。这样一来,机器学习算法就可以识别出詹姆斯,例如,无论他开始从事哪一专栏,詹姆斯始终是詹姆斯,但是却失去了交互作用。
df = (pd.wide_to_long(df,
stubnames = stubs,
i = i,
j = j)
.reset_index())
虚拟编码也有类似的问题(并且有点笨拙,因为我有成千上万个名字)。
将其保留为宽格式并单独对每一列进行编码会遗漏同一个人位于不同的列中(因为它存储在单独的类别变量中)。因此,在这种情况下,交互效果被静音/扭曲(因为如果Anna或Zachary也与James互动,则James与Julie的互动是不同的)。我真正想做的是将这些列中名称的各种组合编码为单个分类功能。
对于它的价值,我还在管道中使用category_encoders包中的其他变量,并主要为tree(Random Forest)和ensemble(xgboost)方法准备数据。