Сохраните и загрузите две модели 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?

Другие вопросы по тегам