【问题标题】:Data preparation for scikit learn decision treescikit learn 决策树的数据准备
【发布时间】:2016-08-12 07:20:03
【问题描述】:

我正在尝试为 scikit learn 准备数据集,计划构建 pandas 数据框以将其提供给决策树分类器。

这些数据代表具有不同标准的不同公司,但某些标准可以有多个值 - 例如“客户群” - 对于任何给定的公司,它可以是以下任何一个或全部:SMB、中型市场、企业等。还有其他类似的标准/列具有多个可能的值。我需要根据个人价值而非总体价值做出决策 - 因此 A 公司针对 SMB,A 公司针对 Midmarket,而不是针对 SMB 和 Midmarket 客户 A 的“分组”。

是否有关于如何处理此问题的指导?我是否需要为给定公司的每个变体生成行以输入到学习程序中?这样的输入:

Company,Segment
A,SMB:MM:ENT

变成:

A, SMB
A, MM
A, ENT

以及可能来自其他标准/列的任何其他变体 - 例如也可能包含多个值的“客户垂直”?看起来这将大大增加数据集的大小。有没有更好的方法来构建这些数据和/或处理这种情况?

我的最终目标是让用户通过简单的问题完成一个简短的调查,并将他们的回答映射到价值,以预测“正确”的公司,对于给定的细分市场、垂直、产品类别等。但我'我正在努力构建正确的学习数据集来实现这一目标。

【问题讨论】:

    标签: python pandas machine-learning scikit-learn


    【解决方案1】:

    让我们试试吧。

    df = pd.DataFrame({'company':['A','B'], 'segment':['SMB:MM:ENT', 'SMB:MM']})
    expended_segment = df.segment.str.split(':', expand=True)
    expended_segment.columns = ['segment'+str(i) for i in range(len(expended_segment.columns))]
    wide_df = pd.concat([df.company, expended_segment], axis=1)
    result = pd.melt(wide_df, id_vars=['company'], value_vars=list(set(wide_df.columns)-set(['company'])))
    result.dropna()
    

    【讨论】:

    • 谢谢,虽然这确实解决了将子类别扩展到单个行的“机械”方面,但我的基本问题是 - 是否需要这样的扩展?还是有另一种方法来准备这些数据,然后再将其提供给将获得有效结果的决策树?也许我需要重新表述我的问题以使这方面更清楚,但是您的代码是有效的,并且在需要时可以正确扩展分组标准。
    猜你喜欢
    • 2017-02-23
    • 2020-04-05
    • 2017-03-26
    • 1970-01-01
    • 2015-04-07
    • 2017-01-21
    • 2019-01-25
    • 2015-03-05
    相关资源
    最近更新 更多