python中随机森林和预测建模的数据准备
Posted
技术标签:
【中文标题】python中随机森林和预测建模的数据准备【英文标题】:data preparation for random forest and predictive modeling in python 【发布时间】:2015-06-24 12:32:27 【问题描述】:我正在使用分类输出(通过/失败:二进制 1 或 0)和大约 200 个特征进行预测建模练习。我有大约 350K 的训练示例,但如果需要,我可以增加数据集的大小。以下是我遇到的一些问题:
1- 我正在处理严重不平衡的课程。在这 350K 示例中,只有 2K 被标记为“失败”(即分类输出 = 1)。我该如何解释?我知道有几种技术,例如使用 bootstrap 进行上采样;
2- 我的大部分特征 (~ 95%) 是分类的(例如城市、语言等),每个级别少于 5-6 个。我是否需要将它们转换为每个功能级别的二进制数据?例如,如果特征“城市”有纽约、巴黎和巴塞罗那的 3 个级别,那么我可以将其转换为 3 个二元特征:city_New_york、city_Paris 和 city_Barcelona;
3 - 选择模型本身:我正在考虑一些,例如 SVM、K-neighbors、决策树、随机森林、逻辑回归,但我的猜测是随机森林将是合适的因为有大量的分类特征。那里有什么建议吗?
4 - 如果我使用随机森林,我是否需要 (a) 对连续变量进行特征缩放(我猜不是),(b) 将我的连续变量更改为二进制,如在上面的问题 2 中进行了解释(我猜不是),(c)说明我的严重不平衡类,(d)删除缺失值。
提前感谢您的回答!
【问题讨论】:
为什么用 python 标记? 【参考方案1】:它有助于使用平衡的类进行训练(但不要与它们交叉验证)RF 对数据的效率惊人,因此您可能不需要所有 350k 负样本来训练。通过从该池中进行带放回抽样来选择相同数量的正例。不过,不要忘记留下一些正面的例子以供验证。
如果您在 scikit-learn 中,请使用 pandas 的 df.get_dummies() 生成二进制编码。 R 为作为因子的变量进行二进制编码。它在幕后制作了一个位向量。
我总是从 RF 开始,因为旋钮很少,这是一个很好的基准。在我理顺了我的特征转换并获得了 AUC 之后,我尝试了其他方法。
a) 否 b) 否 c) 是 d) 是的,它需要以某种方式修复。如果您可以删除任何预测变量缺失值的数据,那就太好了。但是,如果这是不可能的,中位数是一个常见的选择。假设正在构建一棵树,并选择变量 X4 进行拆分。 RF 需要在一条线上选择一个点并将所有数据发送到左侧或右侧。对于 X4 没有价值的数据应该怎么办?这是'randomForest' package 在 R 中采用的策略:
对于数值变量,NA 被替换为列中位数。对于因子变量,NA 被替换为最频繁的水平(随机打破平局)。如果对象不包含 NA,则原样返回。
【讨论】:
以上是关于python中随机森林和预测建模的数据准备的主要内容,如果未能解决你的问题,请参考以下文章