如何编码大量唯一的分类值?
我有一个数据集,其中有几列,每个列的 18000 唯一值。
不可能使用 One_hot
,因为它在维度上炸开并且还用尽了内存。
简单的 label_encoder
仍将从 {0,18000}
中具有值,因此它并不理想。也许,这可以在两个值之间进行归一化,即: { - 1,1}
。
一个人将如何处理这个问题?
编辑 提出这个 - 不知道它是否正确
class OrdinalEncoderAndStandardScalerTransformer(BaseEstimator, TransformerMixin):
def __init__(self, mean=None, var=None, encoding_dict=None):
self.mean = mean
self.var = var
self.encoding_dict = encoding_dict
def fit(self, x, y=None):
self.ordinal_encoder = OrdinalEncoder()
self.scaler = StandardScaler()
return self
def transform(self, x, y=None):
series_name = x.name
_x = x.to_numpy().reshape(-1, 1)
_x = self.ordinal_encoder.fit_transform(_x)
categories = self.ordinal_encoder.categories_
self.encoding_dict = dict(zip((categories[0]), range(len(categories[0]))))
_x = np.squeeze(self.scaler.fit_transform(_x))
self.mean = self.scaler.mean_[0]
self.var = self.scaler.var_[0]
return pd.Series(_x, name=series_name)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
假设该订单不是有意义的,那么想到了两种可能的方法:
在
Assuming the order is not meaningful, two possible ways come to mind:
There's a nice flowchart for encoding method selection at https://innovation.alteryx.com/encode-smarter/