分类变量数组与单热编码

数据挖掘 分类 大数据 分类数据 特征工程
2021-09-16 07:33:04

我有一些 JSON 数据要转换为机器学习友好的格式。我的数据中的每个对象,最终将成为我的数据集中的一个实例,都具有完全相同的字段(在本例中foobararray)。array字段包含可变数量的子对象(从 0 到 10)。这些子对象中的每一个都有一个范围很大的分类字段和一些可以安全忽略的其他字段。这些子对象中的所有分类字段都属于同一个范围

示例(大量简化的对象):

{
"foo": 1
"bar": 0.5
"array" : [
    {
        "categorical": "Lorem"
        "other": 34
        "stuff": 56
    },
    {
        "categorical": "Ipsum"
        "other": 53
        "stuff": 12
    },
    {
        "categorical": "Dolore"
        "other": 6
        "stuff": 101
    }
]
}

显然foo并且bar很容易表示为数字属性。我现在想将此数组 ( array) 表示为一个大的单热(或多热)向量。假设我不关心子对象的任何其他字段,除了类别字段categorical,这是我的问题:

问题

在一个单热向量中设置多个位(我假设这将使它成为一个多热向量)来表示此实例中存在的所有类别是否有效且可能?如果没有,怎么可能做到?

1个回答

是的,它会起作用。基本上,通过创建编码,scikit-learn 的标签编码器会做同样的事情,您正在创建更多的特征,每个特征都代表样本中该级别的存在或不存在。要表示 d 级别,您需要 d-1 个变量,因此在您的情况下,这正是正在发生的事情。但是,正如您所说,级别的数量可能很大,使用如此庞大的向量并不是一个好主意。运行一些初步分析并检查某些级别是否完全无用并且与响应无关,这是一个好主意,有些可能具有完全相同的效果,因此可以组合这些级别。