2016-05-04 8 views
0

Pipelineモジュールを使用してpysparkにDecisionTreeClassifierを実装しています。これは、私のデータセットに対していくつかの機能エンジニアリング手順を実行するためです。 コードは、Sparkのドキュメントからの例のようになります。pysparkパイプラインモデルからのモデル解釈

from pyspark import SparkContext, SQLContext 
from pyspark.ml import Pipeline 
from pyspark.ml.classification import DecisionTreeClassifier 
from pyspark.ml.feature import StringIndexer, VectorIndexer 
from pyspark.ml.evaluation import MulticlassClassificationEvaluator 

# Load the data stored in LIBSVM format as a DataFrame. 
data = sqlContext.read.format("libsvm").load("data/mllib/sample_libsvm_data.txt") 

# Index labels, adding metadata to the label column. 
# Fit on whole dataset to include all labels in index. 
labelIndexer = StringIndexer(inputCol="label", outputCol="indexedLabel").fit(data) 
# Automatically identify categorical features, and index them. 
# We specify maxCategories so features with > 4 distinct values are treated as continuous. 
featureIndexer =\ 
    VectorIndexer(inputCol="features", outputCol="indexedFeatures", maxCategories=4).fit(data) 

# Split the data into training and test sets (30% held out for testing) 
(trainingData, testData) = data.randomSplit([0.7, 0.3]) 

# Train a DecisionTree model. 
dt = DecisionTreeClassifier(labelCol="indexedLabel", featuresCol="indexedFeatures") 

# Chain indexers and tree in a Pipeline 
pipeline = Pipeline(stages=[labelIndexer, featureIndexer, dt]) 

# Train model. This also runs the indexers. 
model = pipeline.fit(trainingData) 

# Make predictions. 
predictions = model.transform(testData) 

# Select example rows to display. 
predictions.select("prediction", "indexedLabel", "features").show(5) 

# Select (prediction, true label) and compute test error 
evaluator = MulticlassClassificationEvaluator(
    labelCol="indexedLabel", predictionCol="prediction", metricName="precision") 
accuracy = evaluator.evaluate(predictions) 
print("Test Error = %g " % (1.0 - accuracy)) 

treeModel = model.stages[2] 
# summary only 
print(treeModel) 

の質問はどのように私は、この上のモデルの解釈を実行するのですか?パイプラインモデルオブジェクトは、DecisionTree.trainClassifierクラス における方法と同様の方法toDebugString()を持っていないとtrainclassifierは()としてトレーニングデータを取るので、私は私のパイプラインでDecisionTree.trainClassifierを使用することはできませんパラメータ。

パイプラインはフィット()メソッドに引数としてトレーニングデータを受け取り、変換のに対し()

テストデータのパイプラインを使用して、まだモデルの解釈を実行する方法はあります&属性の重要性を確認しますか?

答えて

0

はい、私はpysparkのほとんどすべてのモデル解釈で以下の方法を使用しました。以下の行は、コードの抜粋の命名規則を使用しています。

dtm = model.stages[-1] # you estimator is the last stage in the pipeline 
# hence the DecisionTreeClassifierModel will be the last transformer in the PipelineModel object 
dtm.explainParams() 

ここで、DecisionTreeClassifierModelのすべてのメソッドにアクセスできます。利用可能なメソッドと属性はすべてhereです。コードはあなたの例ではテストされませんでした。

+0

類似しているがより複雑なやり方で、CrossValidatorModelのベストモデルから推定器のモデルを抽出できることに注意してください。 – ffmmmm

関連する問題