2016-03-21 23 views
0

Ich war durch unten Website für Entscheidung Baum Klassifizierung Teil. http://spark.apache.org/docs/latest/mllib-decision-tree.htmlSpark Entscheidungsbaum mit Spark

Ich baute Beispielcode in meinen Laptop und versuchte zu verstehen, es ist Ausgabe. aber ich konnte ein bisschen nicht verstehen. Die unten ist der Code und sample_libsvm_data.txt kann unter https://github.com/apache/spark/blob/master/data/mllib/sample_libsvm_data.txt

Bitte beachten Sie den Ausgang zu finden, und lassen Sie mich wissen, ob meine Meinung richtig ist. Hier sind meine Meinungen.

  1. Testfehler bedeutet, dass es ungefähr 95% Korrektur basierend auf dem Training hat Daten?
  2. (merkwürdigsten eins), wenn Merkmal 434 größer ist als 0,0, dann wäre es auf Gini-Index wird 1 basiert? beispielsweise wird der Wert als 434 gegeben: 178, dann wäre es 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 
    

Antwort

2

ich sein glauben, dass Sie richtig sind. Ja, Ihre Fehlerrate beträgt ungefähr 5%, also ist Ihr Algorithmus ungefähr 95% der Zeit für diese 30% der Daten korrekt, die Sie als Tests zurückgehalten haben. Entsprechend Ihrer Ausgabe (die ich annehmen werde, habe ich den Code nicht selbst getestet), ja, das einzige Merkmal, das die Klasse der Beobachtung bestimmt, ist Merkmal 434, und wenn es kleiner als 0 ist, ist es 0, sonst 1 .

0

Warum in Spark ML, wenn ein Entscheidungsbaummodell trainiert wird, wird die minInfoGain oder minimale Anzahl von Instanzen pro Knoten nicht verwendet, um das Wachstum des Baumes zu steuern? Es ist sehr einfach, den Baum zu überziehen.