【发布时间】:2021-02-10 19:23:45
【问题描述】:
我有一种方法,可以对来自 pandas 数据帧的列列表进行热编码并删除原始列。虽然这对某些领域非常有效,但对于其他领域来说,这个过程需要非常长的时间。例如,我目前正在研究一个高度分类的数据集(即超过 80 个分类特征),其中单个特征将我带入超过 100,000 维度。
我正在寻找一种更优化、内存效率更高的例程来对高维数据进行一次热编码。
以下是我目前的做法:
# For each column to encode
for col in encode_cols:
col_name = str(col)
if col not in ('PRICE_AMOUNT', 'CHECKSUM_VALUE'):
old_cols = df.shape[1]
print("Now testing: {}".format(col_name))
# Use pandas get_dummies function
temp = pd.get_dummies(df[col], prefix=col_name, prefix_sep='_')
df.drop(col, axis=1, inplace=True)
df = pd.concat([df, temp], axis=1, join='inner')
print("New Size: {}".format(df.shape))
sizes[col] = df.shape[1] - old_cols
else:
continue
del(temp)
gc.collect()
就我而言,encode_cols 只有大约 75 个元素,但向量在完成时从 100 维度变为 107,000。如何优化此例程?
【问题讨论】:
-
编码的目的是什么?你期待使用什么模型?你试过sklearns OneHotEncoder吗?
-
一个热编码数据自然会输入模型@AndreS.,我和我的团队将找出给定结果的确切技术。我知道高维的诅咒,我们有解决这个问题的技术,但考虑到我们的业务问题,这就是我们需要表示数据的方式。
-
好的,根据您使用的模型,您还可以使用标签编码来避免所有额外的列。缺点是当类别得到排名时,您不能对线性模型使用标签编码。另一方面,基于树的模型可以很好地处理标签编码的特征。
标签: python pandas optimization encoding