玉来愈宏的随笔 2019-06-10
随机森林和神经网络是两种广泛使用的机器学习算法。这两种方法有什么区别?什么时候应该使用神经网络,什么时候应该使用随机森林? 您看待数据变化的方式改变了您看待业务战略的方式。
哪个更好:随机森林或神经网络?这是一个常见问题,答案非常简单:视情况而定。我将尝试向您展示何时使用随机森林好以及何时使用神经网络好。
首先,随机森林(RF)和神经网络(NN)是不同类型的算法。 RF是决策树的集合,在集合中,每个决策树处理样本并预测输出标签(在分类的情况下)。集合中的决策树是独立的,每个人都可以预测最终的反应。神经网络是连接神经元的网络。没有其他神经元,神经元就无法运作 - 它们是相互连接的。通常,它们按层分组并处理每层中的数据并传递给下一层,最后一层神经元负责做决定。
随机森林只能使用表格数据。(什么是表格数据?它是表格格式的数据)。另一方面,神经网络可以使用许多不同的数据类型:
所以现在你有一些直觉,当你处理图像、音频或文本数据时,你应该选择NN。
那么表格数据呢?
对于表格数据,您应该检查两种算法并选择更好的一种。但是,相对于神经网络我更喜欢随机森林,因为它们更容易使用。我会告诉你原因。
随机森林与神经网络 - 数据预处理
理论上,随机森林应该使用缺失和分类数据。但是,sklearn实现不处理此问题(link1,link2)。要为Random Forest(在python和sklearn包中)准备数据,您需要确保:
神经网络的数据预处理需要填充缺失值并将分类数据转换为数字。更重要的是,需要进行特征缩放。在具有不同范围的特征的情况下,模型训练将存在问题。如果不将特征缩放到相同的范围,那么具有较大值的特征将在训练中被视为更重要,这是不需要的。更重要的是,梯度值可能会爆炸,神经元可能会饱和,这将使得无法训练NN。总之,对于神经网络训练,您需要执行以下预处理:
请记住,用于准备训练数据的所有预处理都应该用于生产。对于NN,您有更多的预处理步骤,因此在生产系统中实施更多步骤!
随机森林与神经网络 - 模型训练
数据准备就绪,我们可以训练模型。
对于随机森林,您可以设置集合中的树木数量(这很容易,因为RF中的树越多越好),您可以使用默认的超参数,它应该可以工作。
你需要一些神奇的技能来训练神经网络
你知道什么是有趣的。上面提到的每个NN超参数都很关键。例如,您在第二个隐藏层中设置了太大的学习率或没有足够的神经元,那么您的NN训练将陷入局部极小值。
实证例子
别说了,告诉我结果!好吧,让我们开始训练模型。
我将从OpenML.org数据存储库中的9个数据集上训练随机森林和神经网络。
数据集描述:
如您所见,我使用的数据集相当小,最多可达几千行和几列。我希望有一些小数据用于快速示例,尽管如此,它们涵盖了一些可能的用例范围。您可以通过openml.org中的id访问每个数据集。我将使用70%的数据进行训练,其余的则使用随机分割进行测试。
对于随机森林和神经网络训练,我使用了我的开源AutoML软件包mljar-supervised。我更喜欢在这里使用AutoML方法,因为它为我进行数据预处理并调优超参数。
最后,我将简单集成计算为随机森林和神经网络预测的平均值。
值得一提的是使用AutoML训练NN的细节。以下是在AutoML中选择的NN超参数:
AutoML正在创建具有1、2或3层的神经网络,并绘制神经元的数量。对于训练,使用批量大小等于256的SGD。
与5次重复比较的实证结果(logloss越低越好):
随机森林与神经网络的logloss度量
也许有可能通过神经网络可以获得更好的结果,但需要专家进行大量的手动调整。
下一个令人惊讶的事情是简单集成平均值的结果,它仅在3个案例(id为31,44,179的数据集)中略微改善了最终预测。
结论
当您左右为难时,不知道选择随机森林还是神经网络。您应该根据您拥有的数据类型来决定。您应该使用神经网络:
如果您要使用表格数据,则首先检查随机森林是值得的,因为它更容易。随机森林需要较少的预处理,训练过程更简单。因此,在生产系统中使用RF更简单。如果您对模型性能不满意,您应该尝试调整和训练神经网络。有很多超参数可以在NN中调整,如果您有足够的知识和经验,您可以用NN获得非常好的结果。