PySpark проблемы с загрузкой непригодного объекта модели - PullRequest
0 голосов
/ 18 января 2019

Я играл с save и load функциями pyspark.ml.classification моделей. Я создал экземпляр RandomForestClassifier, установил значения для пары параметров и вызвал метод save классификатора. Сохраняет успешно. Там нет проблем.

from pyspark.ml.classification import RandomForestClassifier
# save
rf = RandomForestClassifier()
rf.setImpurity('entropy')
rf.setPredictionCol('predme')
rf.write().overwrite().save('rf_test')

Затем я попытался загрузить его обратно, но заметил, что его параметры не имеют значений, которые я установил перед сохранением. Ниже приведен код, который я пытался

# load
rf2 = RandomForestClassifier()
rf2.load('rf_test')
print(rf2.getImpurity()) # returns gini
print(rf2.getPredictionCol())  # returns prediction

Полагаю, в моем понимании того, как должен работать этот код и как он работает, есть разница.

Что я должен сделать, чтобы вернуть объект так, как я его сохранил?

EDIT

Я попробовал подход, упомянутый здесь. Но это не сработало. Это то, что я пытался

from pyspark.ml.classification import RandomForestClassifier
rf = RandomForestClassifier()
rf.setImpurity('entropy')
rf.setPredictionCol('predme')
rf.write().overwrite().save('rf_test')
rf2 = RandomForestClassifier
rf2.load('rf_test')
print(rf2.getImpurity())

который вернул следующее

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: getImpurity() missing 1 required positional argument: 'self'

1 Ответ

0 голосов
/ 18 января 2019

Это не то, как вы должны использовать load метод. Это classmethod и должно вызываться для объекта класса, а не экземпляра, чтобы вернуть новый объект:

rf2 = RandomForestClassifier.load('rf_test')
rf2.getImpurity()

Технически говоря, вызов этого экземпляра также будет работать, но он не изменяет вызывающую функцию, но возвращает новый независимый объект:

rf2 = RandomForestClassifier().load('rf_test')

На практике, однако, такой конструкции следует избегать.

...