Я пробовал PySpark RandomForestClassifier при определении важности объектов, и я был озадачен, когда увидел, что массив заполнен всеми нулевыми записями. Кто-нибудь может объяснить, почему это происходит?
Мой код, который строит конвейер для обучения, может быть показан ниже:
assembler = VectorAssembler(inputCols=feature_cols, outputCol='features')
rfc = RandomForestClassifier(labelCol='label',featuresCol='features')
paramGrid = ParamGridBuilder().addGrid(rfc.maxDepth, [3, 10, 20]).addGrid(rfc.minInfoGain, [0.01, 0.001]).addGrid(rfc.numTrees, [5, 10, 15]).build()
evaluator = BinaryClassificationEvaluator()
pipeline = Pipeline(stages=[assembler, rfc])
crossval = CrossValidator(estimator=pipeline,
estimatorParamMaps=paramGrid,
evaluator=evaluator,
numFolds=5)
rfc_model = crossval.fit(df) # train model
best_model = rfc_model.bestModel
print(best_model.stages[-1].featureImportances.toArray()) # [0. 0. 0. 0. 0. 0. 0. 0.]
Просто добавлю, та же проблема все еще сохраняется, даже после того, как я сохраню и загрузлю модель. Модель предсказывает очень хорошо, часть вывода для прогноза показана ниже:
features=DenseVector([12000.0, 319.0, 3.0, 8.0, -6.8023, 6.9123, 5.0, 18.0]), rawPrediction=DenseVector([4.9981, 0.0019]), probability=DenseVector([0.9996, 0.0004]), prediction=0.0
Я также попытался извлечь отдельные записи из этого массива и проверил. Большое спасибо всем, кто может помочь мне справиться с этой сложной ситуацией!