Apache Spark中的决策树
决策树是在顺序决策问题进行分类,预测和促进决策的有效方法。决策树由两部分组成:
决策树包含三种类型的节点:
(分割节点(Splitting node),仅就离散数学中的树的概念而言,就是指分支节点,下面的翻译为了强调"分支"有时会翻译成分支结点,译者注)
为了抵达终端结点或者说获得结果,该过程从根节点开始。根据在根节点上做出的决定,选择分支节点。基于在分支节点上做出的决定,选择下一个子分支节点。这个过程继续下去,直到我们到达终端节点,终端节点的值是我们的结果。
Apache Spark中的决策树
Apache Spark中没有决策树的实现可能听起来很奇怪。然而从技术上来说是有的。在Apache Spark中,您可以找到一个随机森林算法的实现,该算法实现可以由用户指定树的数量。因此,Apache Spark使用一棵树来调用随机森林。
在Apache Spark中,决策树是在特征空间上执行递归二进制分割的贪婪算法。树给每个***部(即叶子结点)分区预测了相同的标签。为了***化树的节点处的信息增益,通过在一组可能的分支中选择其中的***分割来贪婪地选择每个分支结点。
节点不纯度(impurity)是节点上标签一致性的度量。目前的实施提供了两种不纯的分类方法(Gini杂质和熵(Gini impurity and entropy))。
停止规则
在满足以下列条件之一的情况下,在节点处停止递归树构建(即只要满足一个就停止,译者注):
有用的参数
准备决策树的训练数据
您不能直接向决策树提供任何数据。它需要一种特殊的格式来提供。您可以使用 HashingTF 技术将训练数据转换为标记数据,以便决策树可以理解。这个过程也被称为数据的标准化。
(数据)供给和获得结果
一旦数据被标准化,您就可以提供相同的决策树算法进来行分类。但在此之前,您需要分割数据以用于训练和测试目的; 为了测试的准确性,你需要保留一部分数据进行测试。你可以像这样提供数据:
- al splits = data.randomSplit(Array(0.7, 0.3))
- val (trainingData, testData) = (splits(0), splits(1))
- // Train a DecisionTree model.
- // Empty categoricalFeaturesInfo indicates all features are continuous.
- val numClasses = 2
- val categoricalFeaturesInfo = Map[Int, Int]()
- val impurity = "gini"
- val maxDepth = 5
- val maxBins = 32
- val model = DecisionTree.trainClassifier(trainingData, numClasses, categoricalFeaturesInfo,
- impurity, maxDepth, maxBins)
在这里,数据是我的标准化输入数据,为了训练和测试目的,我将其分成7:3的比例。我们正在使用***深度的为5的"gini" 杂质("gini" impurity)。
一旦模型生成,您也可以尝试预测其他数据的分类。但在此之前,我们需要验证最近生成的模型的分类准确性。您可以通过计算"test error"来验证其准确性。
- / Evaluate model on test instances and compute test error
- val labelAndPreds = testData.map { point =>
- val prediction = model.predict(point.features)
- (point.label, prediction)
- }
- val testErr = labelAndPreds.filter(r => r._1 != r._2).count().toDouble / testData.count()
- println("Test Error = " + testErr)
就是这样!你可以在这里查看一个正在运行的例子。
随着云原生、直播技术的不断发展,线上授课、重大赛事、网剧轮播等直播场景不断...
面试的时候,面试官只要看到你简历的上写的有Zookeeper(熟悉、掌握)之类,那你至...
想了解更多内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区 https://...
2020年10月15日,在工业和信息化部指导下,中国信息通信研究院(以下简称“中国...
?阿里云开发者大会议题 2021年5月28日、29日 由阿里云主办的“云上创新开发者大...
作者:闲鱼技术锦逸/码宝 一、背景 随着闲鱼业务的高速增长,业务的数量和复杂度...
活动时间 7月9日 14:00-17:00 搭建基于运维大数据的可观测性系统 7月10日 13:00-...
怎样部署CDN?其实,部署CDN是一件相对比较麻烦的事情,如果不是特别大的规模,...
一起来看近日结拍、成交 域名 : .com canzan.com:一口价40000元被秒,该域名有...
影响服务器托管的因素有哪些 对着企业的不断发展,企业网站的规模也不断的壮大,...