RandomForestClassifier не имеет атрибута transform, так как получить прогнозы? - PullRequest
0 голосов
/ 17 января 2020

Как вы получаете прогнозы из RandomForestClassifier? Слабо следуя последним документам здесь , мой код выглядит так ...

# Split the data into training and test sets (30% held out for testing)
SPLIT_SEED = 64  # some const seed just for reproducibility
TRAIN_RATIO = 0.75
(trainingData, testData) = df.randomSplit([TRAIN_RATIO, 1-TRAIN_RATIO], seed=SPLIT_SEED)
print(f"Training set ({trainingData.count()}):")
trainingData.show(n=3)
print(f"Test set ({testData.count()}):")
testData.show(n=3)

# Train a RandomForest model.
rf = RandomForestClassifier(labelCol="labels", featuresCol="features", numTrees=36)

rf.fit(trainingData)
#print(rf.featureImportances)

preds = rf.transform(testData)

При запуске этого я получаю сообщение об ошибке

AttributeError: 'RandomForestClassifier 'У объекта нет атрибута' transform '

Изучая python api docs , я не вижу ничего похожего на генерацию прогнозов из обученной модели (и не важность функции в этом отношении). Не много опыта работы с mllib, поэтому не уверен, что с этим делать. Кто-нибудь с большим опытом знает, что делать здесь?

1 Ответ

1 голос
/ 17 января 2020

, внимательно изучив документацию

>>> model = rf.fit(td)
>>> model.featureImportances
SparseVector(1, {0: 1.0})
>>> allclose(model.treeWeights, [1.0, 1.0, 1.0])
True
>>> test0 = spark.createDataFrame([(Vectors.dense(-1.0),)], ["features"])
>>> result = model.transform(test0).head()
>>> result.prediction

, вы заметите, что rf.fit возвращает подогнанные модели, которые отличаются от исходного класса RandomForestClassifier.

И модель будет иметь метод для преобразования, а также значение важности

так в вашем коде

# Train a RandomForest model.
rf = RandomForestClassifier(labelCol="labels", featuresCol="features", numTrees=36)

model = rf.fit(trainingData)
#print(rf.featureImportances)

preds = model.transform(testData)
...