【问题标题】:categorical data encoder for unseen data in pythonpython中看不见的数据的分类数据编码器
【发布时间】:2020-12-05 10:59:32
【问题描述】:

有一个包含许多分类数据的大型数据集,想使用 sklearn 进行一次热编码。 有一个问题是 sklearn 只处理当前数据中的类别。如果我将来有新数据有一些现在看不到的值,如何处理?

似乎跟随 feature_engine 包可以选择最常出现的值并折叠其他值。对于这一点,如果有未来看不见的值,它们将被折叠。

from feature_engine import categorical_encoders as ce
import pandas as pd
 
# set up the encoder
encoder = ce.OneHotCategoricalEncoder(
    top_categories=10,
    drop_last=False)
 
# fit the encoder
encoder.fit(df)
encoder.transform(df)

我最感兴趣的类别值不是经常出现的值,所以我不能直接使用它。

例如一列包含计算机类型名称,例如:'MacBook Air'、'MacBook Pro'、'Chromebook Flex 3'、'Samsung Chromebook',......可能会有更多新的笔记本电脑名称未来。

如何处理?

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

    你必须让它充满活力。例如: 您的数据框(我们称之为 df)有一个名为“mob_names”的属性,然后以下命令将生成一个包含列的唯一值及其长度的数组:

    unique_names = df.mob_names.unique()
    num_of_unique_names = len(unique_names)
    

    然后您使用为编码器创建的变量:

    encoder = ce.OneHotCategoricalEncoder(
        top_categories= num_of_unique_names ,
        variables= unique_names.tolist() )
    
    # fit the encoder
    encoder.fit(df)
    encoder.transform(df)
    
    

    同样drop_last 是无用的,因为它只在top_categories = None 时使用。摆脱它。

    Check documentation

    【讨论】:

      猜你喜欢
      • 2017-10-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2020-12-21
      • 1970-01-01
      • 2018-12-19
      相关资源
      最近更新 更多