web-dev-qa-db-ja.com

2つのMLモデルをpysparkに保存してロードします

まず、2つのMLアルゴリズムを作成し、それらを2つの別々のファイルに保存します。両方のモデルが同じデータフレームに基づいていることに注意してください。 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])

私が欲しいのは、これら2つのモデルを1つにまとめて、同じパスに保存できるエレガントな方法です。これは主に、ユーザーが保存およびロードするたびに2つの別々のパス名を追跡する必要がないようにするためです。これらの2つのモデルは密接に関連しており、通常は常に一緒に作成および使用されるため、1つのモデルのようなものです。

これはパイプラインが意図しているようなものですか?

6
PaulMag

それらをフォルダにまとめるだけでそれを行う方法を考え出しました。次に、ユーザーはこのフォルダーへのパスを指定して知っているだけで済みます。

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ライブラリの機能を使用してモデルをバンドルするさらに良い方法があるでしょうか?

5
PaulMag