Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano sposób trenowania modeli przy użyciu Feature Engineering w Unity Catalog lub starszego Workspace Feature Store. Najpierw należy utworzyć zestaw danych szkoleniowych, który definiuje funkcje do użycia i sposób ich dołączania. Następnie podczas trenowania modelu model zachowuje odwołania do funkcji.
Podczas trenowania modelu przy użyciu Feature Engineering w Unity Catalog można wyświetlić genezę modelu w Katalog Explorer. Tabele i funkcje, które zostały użyte do utworzenia modelu, są automatycznie śledzone i wyświetlane. Zobacz Zarządzanie funkcjami i pochodzenie danych.
Jeśli używasz modelu do wnioskowania, możesz pobrać wartości funkcji z magazynu funkcji. Możesz również obsłużyć model z obsługą modelu i będzie automatycznie wyszukiwać funkcje opublikowane w sklepach online. Modele przechowywania funkcji są również zgodne z interfejsem MLflow pyfunc, więc można użyć interfejsu MLflow pyfunc do wnioskowania wsadowego z tabelami funkcji.
Jeśli model używa zmiennych środowiskowych, dowiedz się więcej o sposobie ich używania podczas obsługi modelu w trybie online w artykule Konfigurowanie dostępu do zasobów z punktów końcowych obsługujących model.
Model może używać co najwyżej 50 tabel i 100 funkcji do trenowania.
Tworzenie zestawu danych szkoleniowych
Aby wybrać określone funkcje z tabeli funkcji na potrzeby trenowania modelu, należy utworzyć zestaw danych szkoleniowych przy użyciu FeatureEngineeringClient.create_training_set (dla Feature Engineering w Unity Catalog) lub interfejsu API FeatureStoreClient.create_training_set (dla Workspace Feature Store) oraz obiektu o nazwie FeatureLookup.
FeatureLookup określa każdy element do użycia w zestawie treningowym, w tym nazwę tabeli cech, nazwy cech oraz klucze, które mają być używane podczas łączenia tabeli cech z DataFrame przekazanym do create_training_set. Aby uzyskać więcej informacji, zobacz Wyszukiwanie funkcji.
Użyj parametru feature_names podczas tworzenia elementu FeatureLookup.
feature_names przyjmuje pojedynczą nazwę cechy, listę nazw cech lub "None," aby wyszukać wszystkie cechy (z wyłączeniem kluczy podstawowych) w tabeli cech w momencie utworzenia zbioru treningowego.
Uwaga
Typ i kolejność kolumn lookup_key w DataFrame muszą być zgodne z typem i kolejnością kluczy podstawowych (z wyłączeniem kluczy sygnatury czasowej) tabeli cech referencyjnych.
Ten artykuł zawiera przykłady kodu dla obu wersji składni.
W tym przykładzie ramka danych zwrócona przez trainingSet.load_df zawiera kolumnę dla każdej funkcji w feature_lookups. Zachowuje wszystkie kolumny ramki danych podane do create_training_set z wyjątkiem tych wykluczonych przy użyciu exclude_columns.
Inżynieria funkcji w Katalogu Unity
from databricks.feature_engineering import FeatureEngineeringClient, FeatureLookup
# The model training uses two features from the 'customer_features' feature table and
# a single feature from 'product_features'
feature_lookups = [
FeatureLookup(
table_name='ml.recommender_system.customer_features',
feature_names=['total_purchases_30d', 'total_purchases_7d'],
lookup_key='customer_id'
),
FeatureLookup(
table_name='ml.recommender_system.product_features',
feature_names=['category'],
lookup_key='product_id'
)
]
fe = FeatureEngineeringClient()
# Create a training set using training DataFrame and features from Feature Store
# The training DataFrame must contain all lookup keys from the set of feature lookups,
# in this case 'customer_id' and 'product_id'. It must also contain all labels used
# for training, in this case 'rating'.
training_set = fe.create_training_set(
df=training_df,
feature_lookups=feature_lookups,
label='rating',
exclude_columns=['customer_id', 'product_id']
)
training_df = training_set.load_df()
Magazyn funkcji obszaru roboczego
from databricks.feature_store import FeatureLookup, FeatureStoreClient
# The model training uses two features from the 'customer_features' feature table and
# a single feature from 'product_features'
feature_lookups = [
FeatureLookup(
table_name='recommender_system.customer_features',
feature_names=['total_purchases_30d', 'total_purchases_7d'],
lookup_key='customer_id'
),
FeatureLookup(
table_name='recommender_system.product_features',
feature_names=['category'],
lookup_key='product_id'
)
]
fs = FeatureStoreClient()
# Create a training set using training DataFrame and features from Feature Store
# The training DataFrame must contain all lookup keys from the set of feature lookups,
# in this case 'customer_id' and 'product_id'. It must also contain all labels used
# for training, in this case 'rating'.
training_set = fs.create_training_set(
df=training_df,
feature_lookups=feature_lookups,
label='rating',
exclude_columns=['customer_id', 'product_id']
)
training_df = training_set.load_df()
Tworzenie elementu TrainingSet, gdy klucze odnośnika nie są zgodne z kluczami podstawowymi
Użyj argumentu lookup_key w FeatureLookup jako nazwy kolumny w zestawie treningowym.
create_training_set wykonuje uporządkowane sprzężenia między kolumnami z zestawu treningowego określonego w argumencie lookup_key przy użyciu kolejności, w której klucze podstawowe zostały określone podczas tworzenia tabeli funkcji.
W tym przykładzie recommender_system.customer_features są następujące klucze podstawowe: customer_id, dt.
Tabela funkcji recommender_system.product_features ma klucz podstawowy product_id.
Jeśli training_df ma następujące kolumny:
cidtransaction_dtproduct_idrating
Poniższy kod spowoduje utworzenie prawidłowych odnośników funkcji dla elementu TrainingSet:
Inżynieria funkcji w Katalogu Unity
feature_lookups = [
FeatureLookup(
table_name='ml.recommender_system.customer_features',
feature_names=['total_purchases_30d', 'total_purchases_7d'],
lookup_key=['cid', 'transaction_dt']
),
FeatureLookup(
table_name='ml.recommender_system.product_features',
feature_names=['category'],
lookup_key='product_id'
)
]
Magazyn funkcji obszaru roboczego
feature_lookups = [
FeatureLookup(
table_name='recommender_system.customer_features',
feature_names=['total_purchases_30d', 'total_purchases_7d'],
lookup_key=['cid', 'transaction_dt']
),
FeatureLookup(
table_name='recommender_system.product_features',
feature_names=['category'],
lookup_key='product_id'
)
]
Gdy wywoływany jest create_training_set, tworzy zestaw danych treningowych, wykonując połączenie lewostronne, łącząc tabele recommender_system.customer_features i training_df poprzez klucze (customer_id,dt) odpowiadające (cid,transaction_dt), jak pokazano w poniższym kodzie:
Inżynieria funkcji w Katalogu Unity
customer_features_df = spark.sql("SELECT * FROM ml.recommender_system.customer_features")
product_features_df = spark.sql("SELECT * FROM ml.recommender_system.product_features")
training_df.join(
customer_features_df,
on=[training_df.cid == customer_features_df.customer_id,
training_df.transaction_dt == customer_features_df.dt],
how="left"
).join(
product_features_df,
on="product_id",
how="left"
)
Magazyn funkcji obszaru roboczego
customer_features_df = spark.sql("SELECT * FROM recommender_system.customer_features")
product_features_df = spark.sql("SELECT * FROM recommender_system.product_features")
training_df.join(
customer_features_df,
on=[training_df.cid == customer_features_df.customer_id,
training_df.transaction_dt == customer_features_df.dt],
how="left"
).join(
product_features_df,
on="product_id",
how="left"
)
Tworzenie zestawu TrainingSet zawierającego dwie funkcje o tej samej nazwie z różnych tabel funkcji
Użyj opcjonalnego argumentu output_name w elem.FeatureLookup Podana nazwa jest używana zamiast nazwy funkcji w ramce danych zwracanej przez TrainingSet.load_dfelement . Na przykład przy użyciu następującego kodu ramka danych zwrócona przez training_set.load_df zawiera kolumny customer_height i product_height.
Inżynieria funkcji w Katalogu Unity
feature_lookups = [
FeatureLookup(
table_name='ml.recommender_system.customer_features',
feature_names=['height'],
lookup_key='customer_id',
output_name='customer_height',
),
FeatureLookup(
table_name='ml.recommender_system.product_features',
feature_names=['height'],
lookup_key='product_id',
output_name='product_height'
),
]
fe = FeatureEngineeringClient()
with mlflow.start_run():
training_set = fe.create_training_set(
df=df,
feature_lookups=feature_lookups,
label='rating',
exclude_columns=['customer_id']
)
training_df = training_set.load_df()
Magazyn funkcji obszaru roboczego
feature_lookups = [
FeatureLookup(
table_name='recommender_system.customer_features',
feature_names=['height'],
lookup_key='customer_id',
output_name='customer_height',
),
FeatureLookup(
table_name='recommender_system.product_features',
feature_names=['height'],
lookup_key='product_id',
output_name='product_height'
),
]
fs = FeatureStoreClient()
with mlflow.start_run():
training_set = fs.create_training_set(
df=df,
feature_lookups=feature_lookups,
label='rating',
exclude_columns=['customer_id']
)
training_df = training_set.load_df()
Tworzenie zestawu trainingSet przy użyciu tej samej funkcji wiele razy
Aby utworzyć zestaw TrainingSet przy użyciu tej samej funkcji przyłączonej przez różne klucze odnośników, użyj wielu funkcjiLookups.
Użyj unikatowego output_name elementu dla poszczególnych danych wyjściowych funkcjiLookup.
Inżynieria funkcji w Katalogu Unity
feature_lookups = [
FeatureLookup(
table_name='ml.taxi_data.zip_features',
feature_names=['temperature'],
lookup_key=['pickup_zip'],
output_name='pickup_temp'
),
FeatureLookup(
table_name='ml.taxi_data.zip_features',
feature_names=['temperature'],
lookup_key=['dropoff_zip'],
output_name='dropoff_temp'
)
]
Magazyn funkcji obszaru roboczego
feature_lookups = [
FeatureLookup(
table_name='taxi_data.zip_features',
feature_names=['temperature'],
lookup_key=['pickup_zip'],
output_name='pickup_temp'
),
FeatureLookup(
table_name='taxi_data.zip_features',
feature_names=['temperature'],
lookup_key=['dropoff_zip'],
output_name='dropoff_temp'
)
]
Tworzenie zestawu szkoleniowego dla nienadzorowanych modeli uczenia maszynowego
Ustaw label=None podczas tworzenia zestawu treningowego dla modeli uczenia nienadzorowanego. Na przykład następujący zestaw TrainingSet może służyć do klastrowania różnych klientów w grupach na podstawie ich zainteresowań:
Inżynieria funkcji w Katalogu Unity
feature_lookups = [
FeatureLookup(
table_name='ml.recommender_system.customer_features',
feature_names=['interests'],
lookup_key='customer_id',
),
]
fe = FeatureEngineeringClient()
with mlflow.start_run():
training_set = fe.create_training_set(
df=df,
feature_lookups=feature_lookups,
label=None,
exclude_columns=['customer_id']
)
training_df = training_set.load_df()
Magazyn funkcji obszaru roboczego
feature_lookups = [
FeatureLookup(
table_name='recommender_system.customer_features',
feature_names=['interests'],
lookup_key='customer_id',
),
]
fs = FeatureStoreClient()
with mlflow.start_run():
training_set = fs.create_training_set(
df=df,
feature_lookups=feature_lookups,
label=None,
exclude_columns=['customer_id']
)
training_df = training_set.load_df()
Tworzenie zestawu TrainingSet w przypadku korzystania z widoku jako tabeli funkcji
Aby użyć widoku jako tabeli funkcji, należy użyć databricks-feature-engineering w wersji 0.7.0 lub nowszej, która jest wbudowana w środowisko Databricks Runtime 16.0 ML.
Widok musi być prostym widokiem SELECT ze źródłowej tabeli Delta. Prosty widok SELECT jest definiowany jako widok utworzony na podstawie pojedynczej tabeli Delta w katalogu Unity, który może być używany jako tabela cech i w którym klucze główne są wybierane bez klauzul JOIN, GROUP BYlub DISTINCT. Dopuszczalne słowa kluczowe w instrukcji SQL to SELECT, FROM, WHERE, ORDER BY, LIMITi OFFSET.
W poniższym przykładzie ml.recommender_system.customer_table ma klucze cid podstawowe i dt, gdzie dt jest kolumną szeregów czasowych. W przykładzie przyjęto założenie, że ramka danych training_df zawiera kolumny cid, dti label:
from databricks.feature_engineering import FeatureEngineeringClient, FeatureLookup
customer_features_df = spark.sql("CREATE OR REPLACE VIEW ml.recommender_system.customer_features AS SELECT cid, dt, pid, rating FROM ml.recommender_system.customer_table WHERE rating > 3")
feature_lookups = [
FeatureLookup(
table_name='ml.recommender_system.customer_features',
feature_names=['pid', 'rating'],
lookup_key=['cid'],
timestamp_lookup_key='dt'
),
]
fe = FeatureEngineeringClient()
training_set = fe.create_training_set(
df=training_df,
feature_lookups=feature_lookups,
label='label'
)
training_df = training_set.load_df()
Tworzenie zestawu treningowego z wartościami domyślnymi
Podczas tworzenia zestawu danych treningowych można określić wartości domyślne dla cech do obsługi przypadków, w których repozytorium cech nie ma obliczonej wartości cechy dla danego identyfikatora.
Aby określić wartości domyślne, użyj parametru default_values w pliku FeatureLookup.
W poniższym przykładzie pokazano, jak określić wartości domyślne dla zestawu funkcji:
feature_lookups = [
FeatureLookup(
table_name="ml.recommender_system.customer_features",
feature_names=[
"membership_tier",
"age",
"page_views_count_30days",
],
lookup_key="customer_id",
default_values={
"age": 18,
"membership_tier": "bronze"
},
),
]
Jeśli nazwy kolumn funkcji zostaną zmienione przy użyciu parametru rename_outputs , default_values należy użyć nazw funkcji o zmienionej nazwie.
FeatureLookup(
table_name = 'main.default.table',
feature_names = ['materialized_feature_value'],
lookup_key = 'id',
rename_outputs={"materialized_feature_value": "feature_value"},
default_values={
"feature_value": 0
}
)
Trenowanie modeli i wykonywanie wnioskowania wsadowego za pomocą tabel cech
Podczas trenowania modelu przy użyciu funkcji ze sklepu Feature Store model zachowuje odwołania do funkcji. Jeśli używasz modelu do wnioskowania, możesz sprawić, aby pobrał wartości cech z Feature Store. Musisz podać podstawowe klucze funkcji używanych w modelu. Model pobiera funkcje wymagane ze sklepu Feature Store w obszarze roboczym. Następnie łączy wartości funkcji zgodnie z potrzebami podczas oceniania.
Aby obsługiwać wyszukiwanie funkcji w czasie wnioskowania:
- Należy zarejestrować model przy użyciu metody
log_modelFeatureEngineeringClient(dla przygotowywania cech w Unity Catalog) lubFeatureStoreClient(w przypadku Workspace Feature Store). - Aby wytrenować model, musisz użyć ramki danych zwróconej przez
TrainingSet.load_dfprogram . Jeśli zmodyfikujesz tę ramkę danych w jakikolwiek sposób przed użyciem go do trenowania modelu, modyfikacje nie będą stosowane podczas korzystania z modelu do wnioskowania. Zmniejsza to wydajność modelu. - Typ modelu musi mieć odpowiedni
python_flavorelement w narzędziu MLflow. Platforma MLflow obsługuje większość platform trenowania modeli języka Python, w tym:- scikit-learn
- Keras
- PyTorch
- SparkML
- LightGBM
- XGBoost
- TensorFlow Keras (przy użyciu elementu
python_flavormlflow.keras)
- Niestandardowe modele Pyfunc platformy MLflow
Inżynieria funkcji w Katalogu Unity
# Train model
import mlflow
from sklearn import linear_model
feature_lookups = [
FeatureLookup(
table_name='ml.recommender_system.customer_features',
feature_names=['total_purchases_30d'],
lookup_key='customer_id',
),
FeatureLookup(
table_name='ml.recommender_system.product_features',
feature_names=['category'],
lookup_key='product_id'
)
]
fe = FeatureEngineeringClient()
with mlflow.start_run():
# df has columns ['customer_id', 'product_id', 'rating']
training_set = fe.create_training_set(
df=df,
feature_lookups=feature_lookups,
label='rating',
exclude_columns=['customer_id', 'product_id']
)
training_df = training_set.load_df().toPandas()
# "training_df" columns ['total_purchases_30d', 'category', 'rating']
X_train = training_df.drop(['rating'], axis=1)
y_train = training_df.rating
model = linear_model.LinearRegression().fit(X_train, y_train)
fe.log_model(
model=model,
artifact_path="recommendation_model",
flavor=mlflow.sklearn,
training_set=training_set,
registered_model_name="recommendation_model"
)
# Batch inference
# If the model at model_uri is packaged with the features, the FeatureStoreClient.score_batch()
# call automatically retrieves the required features from Feature Store before scoring the model.
# The DataFrame returned by score_batch() augments batch_df with
# columns containing the feature values and a column containing model predictions.
fe = FeatureEngineeringClient()
# batch_df has columns 'customer_id' and 'product_id'
predictions = fe.score_batch(
model_uri=model_uri,
df=batch_df
)
# The 'predictions' DataFrame has these columns:
# 'customer_id', 'product_id', 'total_purchases_30d', 'category', 'prediction'
Magazyn funkcji obszaru roboczego
# Train model
import mlflow
from sklearn import linear_model
feature_lookups = [
FeatureLookup(
table_name='recommender_system.customer_features',
feature_names=['total_purchases_30d'],
lookup_key='customer_id',
),
FeatureLookup(
table_name='recommender_system.product_features',
feature_names=['category'],
lookup_key='product_id'
)
]
fs = FeatureStoreClient()
with mlflow.start_run():
# df has columns ['customer_id', 'product_id', 'rating']
training_set = fs.create_training_set(
df=df,
feature_lookups=feature_lookups,
label='rating',
exclude_columns=['customer_id', 'product_id']
)
training_df = training_set.load_df().toPandas()
# "training_df" columns ['total_purchases_30d', 'category', 'rating']
X_train = training_df.drop(['rating'], axis=1)
y_train = training_df.rating
model = linear_model.LinearRegression().fit(X_train, y_train)
fs.log_model(
model=model,
artifact_path="recommendation_model",
flavor=mlflow.sklearn,
training_set=training_set,
registered_model_name="recommendation_model"
)
# Batch inference
# If the model at model_uri is packaged with the features, the FeatureStoreClient.score_batch()
# call automatically retrieves the required features from Feature Store before scoring the model.
# The DataFrame returned by score_batch() augments batch_df with
# columns containing the feature values and a column containing model predictions.
fs = FeatureStoreClient()
# batch_df has columns 'customer_id' and 'product_id'
predictions = fs.score_batch(
model_uri=model_uri,
df=batch_df
)
# The 'predictions' DataFrame has these columns:
# 'customer_id', 'product_id', 'total_purchases_30d', 'category', 'prediction'
Używanie niestandardowych wartości funkcji podczas oceniania modelu spakowanego za pomocą metadanych funkcji
Domyślnie model spakowany z metadanymi funkcji wyszukuje funkcje z tabel funkcji podczas wnioskowania. Aby użyć niestandardowych wartości cech do skoringu, uwzględnij je w ramce danych przesyłanej do FeatureEngineeringClient.score_batch (dla Feature Engineering w Unity Catalog) lub FeatureStoreClient.score_batch (dla Workspace Feature Store).
Załóżmy na przykład, że utworzysz pakiet modelu z następującymi dwiema funkcjami:
Inżynieria funkcji w Katalogu Unity
feature_lookups = [
FeatureLookup(
table_name='ml.recommender_system.customer_features',
feature_names=['account_creation_date', 'num_lifetime_purchases'],
lookup_key='customer_id',
),
]
Magazyn funkcji obszaru roboczego
feature_lookups = [
FeatureLookup(
table_name='recommender_system.customer_features',
feature_names=['account_creation_date', 'num_lifetime_purchases'],
lookup_key='customer_id',
),
]
Podczas wnioskowania można podać niestandardowe wartości dla funkcji account_creation_date, wywołując score_batch w DataFrame, który zawiera kolumnę o nazwie account_creation_date. W tym przypadku API wyszukuje tylko cechę num_lifetime_purchases z Feature Store i korzysta z podanych niestandardowych wartości kolumn account_creation_date dla oceny modelu.
Inżynieria funkcji w Katalogu Unity
# batch_df has columns ['customer_id', 'account_creation_date']
predictions = fe.score_batch(
model_uri='models:/ban_prediction_model/1',
df=batch_df
)
Magazyn funkcji obszaru roboczego
# batch_df has columns ['customer_id', 'account_creation_date']
predictions = fs.score_batch(
model_uri='models:/ban_prediction_model/1',
df=batch_df
)
Trenowanie i ocenianie modelu przy użyciu kombinacji funkcji sklepu Feature Store i danych znajdujących się poza magazynem funkcji
Model można wytrenować przy użyciu kombinacji funkcji i danych ze sklepu Feature Store spoza sklepu Feature Store. Podczas tworzenia pakietu modelu z metadanymi funkcji model pobiera wartości funkcji z magazynu funkcji w celu wnioskowania.
Aby wytrenować model, uwzględnij dodatkowe dane jako kolumny w ramce danych przekazanej do FeatureEngineeringClient.create_training_set (w przypadku Feature Engineering w Unity Catalog) lub FeatureStoreClient.create_training_set (w przypadku Workspace Feature Store). W tym przykładzie wykorzystano funkcję total_purchases_30d z Feature Store i zewnętrzną kolumnę browser.
Inżynieria funkcji w Katalogu Unity
feature_lookups = [
FeatureLookup(
table_name='ml.recommender_system.customer_features',
feature_names=['total_purchases_30d'],
lookup_key='customer_id',
),
]
fe = FeatureEngineeringClient()
# df has columns ['customer_id', 'browser', 'rating']
training_set = fe.create_training_set(
df=df,
feature_lookups=feature_lookups,
label='rating',
exclude_columns=['customer_id'] # 'browser' is not excluded
)
Magazyn funkcji obszaru roboczego
feature_lookups = [
FeatureLookup(
table_name='recommender_system.customer_features',
feature_names=['total_purchases_30d'],
lookup_key='customer_id',
),
]
fs = FeatureStoreClient()
# df has columns ['customer_id', 'browser', 'rating']
training_set = fs.create_training_set(
df=df,
feature_lookups=feature_lookups,
label='rating',
exclude_columns=['customer_id'] # 'browser' is not excluded
)
W wnioskowaniu ramka danych używana w FeatureStoreClient.score_batch musi zawierać kolumnę browser.
Inżynieria funkcji w Katalogu Unity
# At inference, 'browser' must be provided
# batch_df has columns ['customer_id', 'browser']
predictions = fe.score_batch(
model_uri=model_uri,
df=batch_df
)
Magazyn funkcji obszaru roboczego
# At inference, 'browser' must be provided
# batch_df has columns ['customer_id', 'browser']
predictions = fs.score_batch(
model_uri=model_uri,
df=batch_df
)
Ładowanie modeli i wykonywanie wnioskowania wsadowego przy użyciu biblioteki MLflow
Po zarejestrowaniu modelu przy użyciu metody log_modelFeatureEngineeringClient (w przypadku inżynierii cech w katalogu aparatu Unity) lub FeatureStoreClient (w przypadku magazynu funkcji obszaru roboczego) można użyć biblioteki MLflow podczas wnioskowania.
mlflow.pyfunc.predict pobiera wartości cech z Feature Store i łączy wszystkie wartości podane w trakcie wnioskowania. Musisz podać podstawowe klucze funkcji używanych w modelu.
Uwaga
Wnioskowanie wsadowe za pomocą biblioteki MLflow wymaga biblioteki MLflow w wersji 2.11 lub nowszej. Modele korzystające z tabel funkcji szeregów czasowych nie są obsługiwane. Aby przeprowadzić wnioskowanie wsadowe z tabelami cech szeregów czasowych, użyj score_batch. Zobacz Trenowanie modeli i przeprowadzanie wnioskowania wsadowego za pomocą tablic cech.
# Train model
import mlflow
from sklearn import linear_model
feature_lookups = [
FeatureLookup(
table_name='ml.recommender_system.customer_features',
feature_names=['total_purchases_30d'],
lookup_key='customer_id',
),
FeatureLookup(
table_name='ml.recommender_system.product_features',
feature_names=['category'],
lookup_key='product_id'
)
]
fe = FeatureEngineeringClient()
with mlflow.start_run():
# df has columns ['customer_id', 'product_id', 'rating']
training_set = fe.create_training_set(
df=df,
feature_lookups=feature_lookups,
label='rating',
exclude_columns=['customer_id', 'product_id']
)
training_df = training_set.load_df().toPandas()
# "training_df" columns ['total_purchases_30d', 'category', 'rating']
X_train = training_df.drop(['rating'], axis=1)
y_train = training_df.rating
model = linear_model.LinearRegression().fit(X_train, y_train)
fe.log_model(
model=model,
artifact_path="recommendation_model",
flavor=mlflow.sklearn,
training_set=training_set,
registered_model_name="recommendation_model",
#refers to the default value of "result_type" if not provided at inference
params={"result_type":"double"},
)
# Batch inference with MLflow
# NOTE: the result_type parameter can only be used if a default value
# is provided in log_model. This is automatically done for all models
# logged using Databricks Runtime for ML 15.0 or above.
# For earlier Databricks Runtime versions, use set_result as shown below.
# batch_df has columns 'customer_id' and 'product_id'
model = mlflow.pyfunc.load_model(model_version_uri)
# If result_type parameter is provided in log_model
predictions = model.predict(df, {"result_type":"double"})
# If result_type parameter is NOT provided in log_model
model._model_impl.set_result_type("double")
predictions = model.predict(df)
Obsługa brakujących wartości funkcji
Gdy klucz wyszukiwania nieistniejącego jest przekazywany do modelu na potrzeby przewidywania, wartość funkcji pobierana przez FeatureLookup element może być albo None , w NaNzależności od środowiska. Implementacja modelu powinna być w stanie obsłużyć obie wartości.
- W przypadku aplikacji w trybie offline przy użyciu metody
fe.score_batchzwracana wartość brakującej funkcji toNaN. - W przypadku aplikacji online korzystających z funkcji modelowania zwracana wartość może mieć wartość
NonelubNaN:- Jeśli żaden z podanych kluczy odnośników nie istnieje, wartość to
None. - Jeśli nie istnieje tylko podzbiór kluczy odnośników, wartość to
NaN.
- Jeśli żaden z podanych kluczy odnośników nie istnieje, wartość to
Aby obsłużyć brakujące wartości funkcji podczas korzystania z funkcji na żądanie, zobacz Jak obsługiwać brakujące wartości funkcji.
Przykładowe notatniki
W podstawowym notatniku pokazano sposób tworzenia tabeli cech, jej użycie do szkolenia modelu i uruchamianie ocen wsadowych przy użyciu automatycznego wyszukiwania cech. Przedstawia również interfejs użytkownika inżynierii funkcji, którego można użyć do wyszukiwania funkcji i zrozumienia sposobu tworzenia i używania funkcji.
Przykładowy notatnik podstawowej inżynierii cech w katalogu Unity
Przykładowy notatnik dotyczący taksówek ilustruje proces tworzenia cech, ich aktualizowania i wykorzystywania do trenowania modelu oraz wnioskowania zbiorczego.