16

PySpark を使用してトレーニングしたランダム フォレスト オブジェクトの機能の重要度を抽出しようとしています。ただし、ドキュメントのどこにもこれを行う例は見当たりませんし、RandomForestModel のメソッドでもありません。

RandomForestModelPySpark のリグレッサーまたは分類子から機能の重要度を抽出するにはどうすればよいですか?

ドキュメントで提供されているサンプル コードを次に示します。ただし、機能の重要性については言及されていません。

from pyspark.mllib.tree import RandomForest
from pyspark.mllib.util import MLUtils

# Load and parse the data file into an RDD of LabeledPoint.
data = MLUtils.loadLibSVMFile(sc, 'data/mllib/sample_libsvm_data.txt')
# Split the data into training and test sets (30% held out for testing)
(trainingData, testData) = data.randomSplit([0.7, 0.3])

# Train a RandomForest model.
#  Empty categoricalFeaturesInfo indicates all features are continuous.
#  Note: Use larger numTrees in practice.
#  Setting featureSubsetStrategy="auto" lets the algorithm choose.
model = RandomForest.trainClassifier(trainingData, numClasses=2, categoricalFeaturesInfo={},
                                     numTrees=3, featureSubsetStrategy="auto",
                                     impurity='gini', maxDepth=4, maxBins=32)

利用可能な属性が表示されませんmodel.__featureImportances_-- どこで確認できますか?

4

5 に答える 5

6

私はあなたを失望させなければなりませんが、RandomForest の MLlib 実装における機能の重要性は計算されていないため、自分で計算を実装する以外にどこからでも取得できません。

これを見つける方法は次のとおりです。

RandomForest.trainClassifierここで deinfed関数を呼び出しますhttps://github.com/apache/spark/blob/branch-1.3/python/pyspark/mllib/tree.py

callMLlibFunc("trainRandomForestModel", ...)これは、オブジェクトを返すScala 関数RandomForest.trainClassifierまたはRandomForest.trainRegressor(アルゴに応じて)への呼び出しであるfor を呼び出しRandomForestModelます。

このオブジェクトはhttps://github.com/apache/spark/blob/branch-1.3/mllib/src/main/scala/org/apache/spark/mllib/tree/model/treeEnsembleModels.scalaTreeEnsembleModelで説明されており、定義を拡張しています同じソース ファイルで。残念ながら、このクラスには、アルゴリズム (回帰または分類)、ツリー自体、ツリーの相対的な重み、結合戦略 (合計、平均、投票) のみが格納されます。残念ながら、機能の重要度は保存されず、計算もされません ( https://github.com/apache/spark/blob/branch-1.3/mllib/src/main/scala/org/apache/spark/mllibを参照)。計算アルゴリズムは/tree/RandomForest.scala )

于 2015-03-13T10:55:36.017 に答える
3

機能の重要度が Spark 1.5 に実装されました。解決された JIRA の問題を参照してください。以下を使用して、機能の重要度のベクトルを取得できます。

val importances: Vector = model.featureImportances
于 2015-11-20T03:28:48.367 に答える