使用 Spark 的 Spark 决策树

Spark Decision Tree with Spark

我正在通过以下网站阅读决策树分类部分。 http://spark.apache.org/docs/latest/mllib-decision-tree.html

我将提供的示例代码构建到我的笔记本电脑中并试图理解它的输出。 但我有点听不懂。下面是代码和 sample_libsvm_data.txt 可以在下面找到 https://github.com/apache/spark/blob/master/data/mllib/sample_libsvm_data.txt

请参考输出,让我知道我的意见是否正确。这是我的看法。

  1. 测试错误意味着它有大约 95% 的修正基于训练 数据?
  2. (最好奇的一个)如果特征 434 大于 0.0 那么,基于基尼杂质它会是 1?例如,值为 434:178 那么它将是 1。

    from __future__ import print_function
    from pyspark import SparkContext
    from pyspark.mllib.tree import DecisionTree, DecisionTreeModel
    from pyspark.mllib.util import MLUtils
    
    if __name__ == "__main__":
      sc = SparkContext(appName="PythonDecisionTreeClassificationExample")
      data = MLUtils.loadLibSVMFile(sc,'/home/spark/bin/sample_libsvm_data.txt')
      (trainingData, testData) = data.randomSplit([0.7, 0.3])
    
      model = DecisionTree.trainClassifier(trainingData, numClasses=2, categoricalFeaturesInfo={}, impurity='gini', maxDepth=5, maxBins=32)
    
      predictions = model.predict(testData.map(lambda x: x.features))
      labelsAndPredictions = testData.map(lambda lp: lp.label).zip(predictions)
      testErr = labelsAndPredictions.filter(lambda (v, p): v != p).count() / float(testData.count())
    
    print('Test Error = ' + str(testErr))
    print('Learned classification tree model:')
    print(model.toDebugString())
    
    // =====Below is my output=====
    Test Error = 0.0454545454545
    Learned classification tree model:
    DecisionTreeModel classifier of depth 1 with 3 nodes
    If (feature 434 <= 0.0)
      Predict: 0.0
    Else (feature 434 > 0.0)
      Predict: 1.0
    

我相信你是对的。是的,你的错误率大约是 5%,所以你的算法在大约 95% 的时间内是正确的,因为你保留作为测试的那 30% 的数据。根据您的输出(我假设是正确的,我自己没有测试代码),是的,唯一决定观察 class 的特征是特征 434,如果它小于 0,则为0,否则 1。

为什么在Spark ML中,训练决策树模型时,没有使用minInfoGain或每个节点的最小实例数来控制树的生长?这棵树很容易过度生长。