Сохраните и загрузите две модели ML в pyspark
Сначала я создаю два алгоритма ML и сохраняю их в два отдельных файла. Обратите внимание, что обе модели основаны на одном и том же кадре данных. feature_1
а также feature_2
различные наборы функций, извлеченные из одного и того же набора данных.
import sys
from pyspark.ml.classification import RandomForestClassificationModel
trainer_1 = RandomForestClassifier(featuresCol="features_1")
trainer_2 = RandomForestClassifier(featuresCol="features_2")
model_1 = trainer_1.fit(df_training_data)
model_2 = trainer_2.fit(df_training_data)
model_1.save(sys.argv[1])
model_2.save(sys.argv[2])
Затем, когда я позже захочу использовать модели, я должен загрузить их оба с их соответствующих путей, предоставляя пути f.ex. через sys.argv.
import sys
from pyspark.ml.classification import RandomForestClassificationModel
model_1 = RandomForestClassificationModel.load(sys.argv[1])
model_2 = RandomForestClassificationModel.load(sys.argv[2])
То, что я хочу, - это элегантный способ сохранить эти две модели вместе, как одну, на одном пути. Я хочу это главным образом, чтобы пользователю не приходилось отслеживать два отдельных пути каждый раз, когда он сохраняет и загружает. Эти две модели тесно связаны и, как правило, всегда будут создаваться и использоваться как единое целое, поэтому они являются своего рода одной моделью.
Для чего предназначены трубопроводы?
1 ответ
Я нашел способ сделать это, просто поместив их вместе в папку. Тогда пользователю нужно только указать и узнать путь к этой папке.
import sys
import os
from pyspark.ml.classification import RandomForestClassificationModel
trainer_1 = RandomForestClassifier(featuresCol="features_1")
trainer_2 = RandomForestClassifier(featuresCol="features_2")
model_1 = trainer_1.fit(df_training_data)
model_2 = trainer_2.fit(df_training_data)
path = 'model_rfc'
os.mkdir(path)
model_1.save(os.path.join(sys.argv[1], 'model_1'))
model_2.save(os.path.join(sys.argv[1], 'model_2'))
Имена model_1
а также model_2
жестко закодированы и не должны быть известны пользователю.
import sys
import os
from pyspark.ml.classification import RandomForestClassificationModel
model_1 = RandomForestClassificationModel.load(os.path.join(sys.argv[1], 'model_1'))
model_2 = RandomForestClassificationModel.load(os.path.join(sys.argv[1], 'model_2'))
Это должно решить проблему. Это лучший способ сделать это или может быть еще лучший способ связать модели вместе, используя функциональность из библиотеки Spark?