pyspark.ml 随机森林模型特征重要性结果为空?

pyspark.ml random forest model feature importances result empty?

我正在 pyspark.ml 中训练 RandomForestClassifier,当我试图通过 Estimator 的 featureImportances 属性获取训练模型的特征重要性时,我在返回的结果中看不到任何内容特征索引或重要性权重的元组:

(37,[],[])

我期待类似...

(37,[<feature indices>],[<feature importance weights>])

...(当然不是完全空白)。很奇怪 b/c 它似乎认识到有 37 个特征,但在其他列表中没有任何信息。 the docs 似乎没有解决这个问题。

这里可能发生了什么?

TLDR:稀疏向量通常以特定方式表示。如果您的稀疏向量打印为空,则可能意味着您的稀疏向量中的所有值都是零。

Checking/printing typeRandomForestClassificationModel Transformer's featureImportance attribute, we can see that it is a SparseVector。在大多数情况下,打印稀疏向量时,您会看到类似...

(<size>, <list of non-zero indices>, <list of non-zero values associated with the indices>)

...(如果有人有任何文档链接确认这是解释稀疏向量的方法,请告诉我 b/c 我不记得我是怎么知道的或者在哪里已确认)。

下面显示了如何打印 SparseVectors 的示例:

from  pyspark.mllib.linalg import SparseVector
import pprint
a = SparseVector(5,{})
print(a)
# (5,[],[])
pprint.pprint(a)
# SparseVector(5, {})
pprint.pprint(a.toArray())
# array([0., 0., 0., 0., 0.])
 
 
b = SparseVector(5,{0:1, 2:3, 4:5})
print(b)
# (5,[0,2,4],[1.0,3.0,5.0])
pprint.pprint(b)
# SparseVector(5, {0: 1.0, 2: 3.0, 4: 5.0})
pprint.pprint(b.toArray())
# array([1., 0., 3., 0., 5.])

因此,如果您的 featureImportances 得到了像 (<size>, [], []) 这样的稀疏向量,(我很确定)这意味着 Estimator 没有发现任何特别重要的特征(即. 可悲的是,your/my 选择的特征不是很好(至少从 Estimator 的 POV 来看是这样),需要进行更多数据分析)。