scikit的数据准备学习决策树

时间:2016-04-19 21:27:38

标签: python pandas machine-learning scikit-learn

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

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

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

Company,Segment
A,SMB:MM:ENT

变为:

A, SMB
A, MM
A, ENT

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

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

1 个答案:

答案 0 :(得分:0)

试试吧。

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()