使用 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
请参考输出,让我知道我的意见是否正确。这是我的看法。
- 测试错误意味着它有大约 95% 的修正基于训练
数据?
(最好奇的一个)如果特征 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或每个节点的最小实例数来控制树的生长?这棵树很容易过度生长。
我正在通过以下网站阅读决策树分类部分。 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
请参考输出,让我知道我的意见是否正确。这是我的看法。
- 测试错误意味着它有大约 95% 的修正基于训练 数据?
(最好奇的一个)如果特征 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或每个节点的最小实例数来控制树的生长?这棵树很容易过度生长。