在sklearn中处理具有多个值的分类数据

时间:2019-03-21 17:23:20

标签: python pandas scikit-learn categorical-data

我正在尝试通过各种功能来预测客户保留率。

其中之一是org_id,代表客户所属的组织。当前它是一个浮点数列,数字范围为0.0到416.0,以及417个唯一值。

我想知道在将此列提供给scikit学习RandomForestClassifier之前最好的预处理方式是什么。通常,我会对类别特征进行一次热编码,但是这里的值太多,因此会从根本上增加我的数据维数。我有12,000行数据,因此我可能还可以,并且只有大约10个其他功能。

替代方法是为列保留浮点值,将浮点值转换为int值,或将浮点数转换为熊猫的分类对象。

任何提示都非常感谢。

1 个答案:

答案 0 :(得分:2)

org_id似乎不是为分类带来任何信息的功能,您应该删除该值,而不要将其传递到分类器中。

在分类器中,您只希望传递与您要执行的任务具有区别性的功能:此处可能影响保留或搅动的元素。公司ID在这种情况下不会带来任何有价值的信息,因此不应使用。

根据OP的评论进行编辑:

在进一步介绍之前,我们先说点什么:关于样本数量(12000)和模型的相对简单性,人们可以多次尝试轻松地尝试不同的功能配置。

因此,作为基准,我将按照我之前说的做,将所有功能放在一起。这是您的基准分数,也就是您可以比较其他功能组合的分数。

我认为尝试对org_id进行热编码没有任何花费,无论您观察到哪种结果,都将加深您的经验和对随机森林在这种情况下的行为的了解。由于您只有10个以上的功能,因此布尔功能is_org_id_1is_org_id_2,...将非常占优势,并且分类结果可能受这些功能的影响很大。

然后,我将尝试通过查找可以“描述”这400多个组织的新功能来减少布尔功能的数量。例如,如果它们只是美国组织,其状态约为50个特征,或者其用户数(将是一个数字特征),存在的年限(另一个单个数字特征)。让我们注意,这些仅是示例,用于说明创建新功能的过程,只有知道完整问题的人才能以明智的方式设计这些功能。

另外,我会发现有趣的是,一旦您解决了问题,您就回到这里,为我的问题写另一个答案,因为我相信,很多人在处理真实数据时都会遇到这样的问题:)