如果标题不太明确,我对此表示歉意。我是机器学习的新手,正在使用Scikit和决策树进行学习。
我想做的是,将所有输入数据包括一个独特的特征,即客户ID。现在的问题是,客户ID是唯一的,不能像决策树分析中的其他特征那样进行总结。目前,决策树将客户ID视为普通整数值进行分支,例如,ID小于430的客户走一条路径,大于430的走另一条路径。这显然是不正确的,也不是我想要的。我希望决策树能够理解这个特定字段不能这样分析,每个客户应该有自己的分支。这在决策树中是可能实现的吗?
我有一些变通方法,其中一个是为每个客户开发独特的决策树,但这样训练起来将是一场噩梦。另一个方法是,假设我们有800个客户,我将创建800个带有位字段的特征,但这也太疯狂了。
回答:
这在机器学习中是一个相当常见的问题。机器学习特征在任何情况下都不能对每个实例都是唯一的。从直觉上讲,这是有道理的;如果算法无法从该特征中推断出任何东西,它就不会“学习”到任何东西。
你可以做的就是在将其他特征传递给决策树之前,将这部分信息分离出来,然后在做出预测后再将ID和预测结果重新合并。
我强烈建议不要对特征向量进行任何形式的操纵以包含ID。特征应该只是算法用来做出决策的东西。不要给它你不希望它使用的信息。你希望避免将ID作为特征使用是正确的,因为(很可能)ID与你试图预测的任何事情都没有关系。
如果你确实想要个性化模型(并且对每个用户有足够的数据来创建它们),这并没有你想象的那么麻烦。你可以使用Scikit的模型保存功能以及这个关于将pickle保存到MySQL的回答,轻松创建和存储个性化模型。除非你有大量用户,否则创建个性化的决策树应该不会花费太多时间。