随机森林的数据准备和python中的预测建模

时间:2015-04-17 15:03:54

标签: python machine-learning prediction random-forest

我正在使用分类输出(通过/失败:二进制1或0)和大约200个功能进行预测建模练习。我有大约350K的培训示例,但如果需要,我可以增加数据集的大小。以下是我遇到的一些问题:

1-我正在处理严重失衡的课程。在这350K个例子中,只有2K被标记为“失败”(即分类输出= 1)。我如何解释这个?我知道有几种技术,例如使用bootstrap进行上采样;

2- 我的大多数功能(约95%)都是明确的(例如城市,语言等),每个功能少于5-6个级别。我是否需要将它们转换为每个功能级别的二进制数据?例如,如果“city”功能在纽约,巴黎和巴塞罗那有3个级别,那么我可以将其转换为3个二进制功能:city_New_york,city_Paris和city_Barcelona;

3 - 挑选模型本身:我正在考虑一些如SVM,K邻居,决策树,随机森林,Logistic回归,但我的猜测是随机森林将是合适的因为有大量的分类功能。有什么建议吗?

4 - 如果我使用随机森林,我是否需要(a)对连续变量进行特征缩放(我猜不是),(b)将连续变量更改为二进制,如在上面的问题2中解释(我猜不是),(c)说明我严重的不平衡类别,(d)删除缺失值。

提前感谢您的回答!

1 个答案:

答案 0 :(得分:2)

  1. 有助于培训平衡课程(但不要与他们交叉验证)RF对数据的效率令人惊讶,因此您可能不需要所有350k负样本进行培训。通过从该池中替换替换,选择相同数量的正例。不要忘记留下一些积极的例子进行验证。

  2. 如果您正在学习scikit,请使用pandas' df.get_dummies()生成二进制编码。 R为您的变量作为因子进行二进制编码。在幕后它会有点向量。

  3. 我总是从RF开始,因为旋钮很少,它是一个很好的基准。在我完成了我的特征变换并获得了AUC之后,我尝试了其他方法。

  4. a)否b)否c)是d)是的,需要以某种方式修复。如果您可以删除任何预测器缺少值的数据,那就太棒了。但是,如果不可能,中位数是一种常见的选择。让我们说正在构建一棵树,并选择变量X4来分裂。 RF需要在一条线上选择一个点并将所有数据发送到左侧或右侧。对于X4没有价值的数据应该怎么做?以下是'randomForest' package在R中采用的策略:

  5.   

    对于数字变量,NAs被列中位数替换。对于因子变量,NA被最频繁的级别替换(随机断开连接)。如果object不包含NA,则不会更改。