استخدام الميزات لتدريب النماذج
توضح هذه المقالة كيفية تدريب النماذج باستخدام هندسة الميزات في كتالوج Unity أو مخزن ميزات مساحة العمل المحلي. يجب أولا إنشاء مجموعة بيانات تدريب، والتي تحدد الميزات التي يجب استخدامها وكيفية الانضمام إليها. بعد ذلك، عند تدريب نموذج، يحتفظ النموذج بالمراجع إلى الميزات.
عند تدريب نموذج باستخدام هندسة الميزات في كتالوج Unity، يمكنك عرض دورة حياة النموذج في مستكشف الكتالوج. يتم تعقب الجداول والوظائف التي تم استخدامها لإنشاء النموذج وعرضها تلقائيا. راجع عرض دورة حياة مخزن الميزات.
عند استخدام النموذج للاستدلال، يمكنك اختيار استرداد قيم الميزات من مخزن الميزات. يمكنك أيضا خدمة النموذج مع خدمة النموذج وسيبحث تلقائيا عن الميزات المنشورة على المتاجر عبر الإنترنت. تتوافق نماذج مخزن الميزات أيضا مع واجهة MLflow pyfunc، بحيث يمكنك استخدام MLflow لإجراء استدلال دفعي مع جداول الميزات.
إذا كان النموذج الخاص بك يستخدم متغيرات البيئة، فتعرف على المزيد حول كيفية استخدامها عند تقديم النموذج عبر الإنترنت في تكوين الوصول إلى الموارد من نقاط نهاية خدمة النموذج.
يمكن استخدام النموذج على الأكثر 50 جدولا و100 وظيفة للتدريب.
إنشاء مجموعة بيانات للتدريب
لتحديد ميزات محددة من جدول ميزات لتدريب النموذج، يمكنك إنشاء مجموعة بيانات تدريب باستخدام FeatureEngineeringClient.create_training_set
واجهة برمجة التطبيقات (لهندسة الميزات في كتالوج Unity) أو FeatureStoreClient.create_training_set
(لمخزن ميزات مساحة العمل) وعنصر يسمى FeatureLookup
. FeatureLookup
يحدد كل ميزة لاستخدامها في مجموعة التدريب، بما في ذلك اسم جدول الميزات واسم (أسماء) الميزات والمفتاح (المفاتيح) المراد استخدامها عند الانضمام إلى جدول الميزة مع DataFrame الذي تم تمريره إلى create_training_set
. راجع البحث عن الميزات للحصول على مزيد من المعلومات.
استخدم المعلمة feature_names
عند إنشاء FeatureLookup
.
feature_names
يأخذ اسم ميزة واحدة أو قائمة بأسماء الميزات أو بلا للبحث عن جميع الميزات (باستثناء المفاتيح الأساسية) في جدول الميزات في وقت إنشاء مجموعة التدريب.
إشعار
يجب أن يتطابق نوع الأعمدة lookup_key
وترتيبها في DataFrame مع نوع المفاتيح الأساسية وترتيبها (باستثناء مفاتيح الطابع الزمني) لجدول الميزات المرجعية.
تتضمن هذه المقالة أمثلة التعليمات البرمجية لكلا إصداري بناء الجملة.
في هذا المثال، يحتوي DataFrame الذي تم إرجاعه بواسطة trainingSet.load_df
على عمود لكل ميزة في feature_lookups
. يحافظ على جميع أعمدة DataFrame المقدمة إلى create_training_set
باستثناء تلك التي تم استبعادها باستخدام exclude_columns
.
هندسة الميزات في كتالوج 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()
مخزن ميزات مساحة العمل
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()
إنشاء TrainingSet عندما لا تتطابق مفاتيح البحث مع المفاتيح الأساسية
استخدم الوسيطة lookup_key
في FeatureLookup
لاسم العمود في مجموعة التدريب. create_training_set
ينفذ صلة مرتبة بين الأعمدة من مجموعة التدريب المحددة في الوسيطة lookup_key
باستخدام الترتيب الذي تم تحديد المفاتيح الأساسية به عند إنشاء جدول الميزات.
في هذا المثال، recommender_system.customer_features
يحتوي على المفاتيح الأساسية التالية: customer_id
، . dt
يحتوي جدول الميزات على recommender_system.product_features
مفتاح product_id
أساسي .
إذا كان يحتوي على training_df
الأعمدة التالية:
cid
transaction_dt
product_id
rating
ستقوم التعليمات البرمجية التالية بإنشاء عمليات البحث عن الميزات الصحيحة ل TrainingSet
:
هندسة الميزات في كتالوج 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'
)
]
مخزن ميزات مساحة العمل
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'
)
]
عند create_training_set
استدعاء، فإنه ينشئ مجموعة بيانات تدريب عن طريق تنفيذ صلة اليسرى، والانضمام training_df
إلى الجداول recommender_system.customer_features
واستخدام المفاتيح (customer_id
،dt
) المقابلة ل (cid
،transaction_dt
)، كما هو موضح في التعليمات البرمجية التالية:
هندسة الميزات في كتالوج 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"
)
مخزن ميزات مساحة العمل
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"
)
إنشاء TrainingSet تحتوي على ميزتين بنفس الاسم من جداول ميزات مختلفة
استخدم الوسيطة output_name
الاختيارية FeatureLookup
في . يتم استخدام الاسم المقدم بدلا من اسم الميزة في DataFrame الذي تم إرجاعه بواسطة TrainingSet.load_df
. على سبيل المثال، مع التعليمات البرمجية التالية، يتضمن DataFrame الذي تم إرجاعه بواسطة training_set.load_df
أعمدة customer_height
و product_height
.
هندسة الميزات في كتالوج 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()
مخزن ميزات مساحة العمل
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()
إنشاء TrainingSet باستخدام نفس الميزة عدة مرات
لإنشاء TrainingSet باستخدام نفس الميزة المرتبطة بمفاتيح بحث مختلفة، استخدم FeatureLookups متعددة.
استخدم فريدا output_name
لكل إخراج FeatureLookup.
هندسة الميزات في كتالوج 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'
)
]
مخزن ميزات مساحة العمل
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'
)
]
إنشاء TrainingSet لنماذج التعلم الآلي غير الخاضعة للإشراف
تعيين label=None
عند إنشاء TrainingSet لنماذج التعلم غير الخاضعة للإشراف. على سبيل المثال، يمكن استخدام TrainingSet التالية لدمج عملاء مختلفين في مجموعات بناء على اهتماماتهم:
هندسة الميزات في كتالوج 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()
مخزن ميزات مساحة العمل
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()
تدريب النماذج وتنفيذ الاستدلال الدفعي باستخدام جداول الميزات
عند تدريب نموذج باستخدام ميزات من 'متجر الميزات'، يحتفظ النموذج بالمراجع إلى الميزات. عند استخدام النموذج للاستدلال، يمكنك اختيار استرداد قيم الميزات من 'متجر الميزات'. يجب توفير المفتاح (المفاتيح) الأساسي للميزات المستخدمة في النموذج. يسترد النموذج الميزات التي يتطلبها من Feature Store في مساحة العمل الخاصة بك. ثم ينضم إلى قيم الميزة حسب الحاجة أثناء التسجيل.
لدعم البحث عن الميزة في وقت الاستدلال:
- يجب تسجيل النموذج باستخدام
log_model
أسلوبFeatureEngineeringClient
(لهندسة الميزات في كتالوج Unity) أوFeatureStoreClient
(لمخزن ميزات مساحة العمل). - يجب استخدام DataFrame الذي تم إرجاعه من أجل
TrainingSet.load_df
تدريب النموذج. إذا قمت بتعديل DataFrame هذا بأي طريقة قبل استخدامه لتدريب النموذج، فلن يتم تطبيق التعديلات عند استخدام النموذج للاستدلال. وهذا يقلل من أداء النموذج. - يجب أن يكون لنوع النموذج مقابل
python_flavor
في MLflow. يدعم MLflow معظم أطر تدريب نموذج Python، بما في ذلك:- scikit-learn
- keras
- PyTorch
- SparkML
- LightGBM
- XGBoost
- TensorFlow Keras (باستخدام
python_flavor
mlflow.keras
)
- نماذج MLflow pyfunc المخصصة
هندسة الميزات في كتالوج 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’
مخزن ميزات مساحة العمل
# 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’
استخدام قيم الميزة المخصصة عند تسجيل نموذج مع حزمة بيانات تعريف الميزة
بشكل افتراضي، يبحث النموذج المحزم مع بيانات تعريف الميزة عن الميزات من جداول الميزات عند الاستدلال. لاستخدام قيم الميزات المخصصة لتسجيل النقاط، قم بتضمينها في DataFrame الذي تم تمريره إلى FeatureEngineeringClient.score_batch
(لهندسة الميزات في كتالوج Unity) أو FeatureStoreClient.score_batch
(لمخزن ميزات مساحة العمل).
على سبيل المثال، افترض أنك قمت بحزم نموذج بهذين الميزتين:
هندسة الميزات في كتالوج Unity
feature_lookups = [
FeatureLookup(
table_name='ml.recommender_system.customer_features',
feature_names=['account_creation_date', 'num_lifetime_purchases'],
lookup_key='customer_id',
),
]
مخزن ميزات مساحة العمل
feature_lookups = [
FeatureLookup(
table_name='recommender_system.customer_features',
feature_names=['account_creation_date', 'num_lifetime_purchases'],
lookup_key='customer_id',
),
]
عند الاستدلال، يمكنك توفير قيم مخصصة للميزة account_creation_date
عن طريق استدعاء score_batch
DataFrame الذي يتضمن عمودا يسمى account_creation_date
. في هذه الحالة، تبحث واجهة برمجة التطبيقات عن الميزة num_lifetime_purchases
فقط من 'متجر الميزات' وتستخدم قيم الأعمدة المخصصة account_creation_date
المتوفرة لتسجيل النماذج.
هندسة الميزات في كتالوج Unity
# batch_df has columns ['customer_id', 'account_creation_date']
predictions = fe.score_batch(
model_uri='models:/ban_prediction_model/1',
df=batch_df
)
مخزن ميزات مساحة العمل
# batch_df has columns ['customer_id', 'account_creation_date']
predictions = fs.score_batch(
model_uri='models:/ban_prediction_model/1',
df=batch_df
)
تدريب نموذج وتسجيله باستخدام مجموعة من ميزات 'متجر الميزات' والبيانات الموجودة خارج 'متجر الميزات'
يمكنك تدريب نموذج باستخدام مجموعة من ميزات 'متجر الميزات' وبياناته من خارج 'متجر الميزات'. عند حزم النموذج مع بيانات تعريف الميزة، يسترد النموذج قيم الميزات من مخزن الميزات للاستدلال.
لتدريب نموذج، قم بتضمين البيانات الإضافية كأعمدة في DataFrame التي تم تمريرها إلى FeatureEngineeringClient.create_training_set
(لهندسة الميزات في كتالوج Unity) أو FeatureStoreClient.create_training_set
(لمخزن ميزات مساحة العمل). يستخدم هذا المثال الميزة total_purchases_30d
من مخزن الميزات والعمود browser
الخارجي .
هندسة الميزات في كتالوج 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
)
مخزن ميزات مساحة العمل
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
)
عند الاستدلال، يجب أن يتضمن browser
DataFrame المستخدم في FeatureStoreClient.score_batch
العمود.
هندسة الميزات في كتالوج 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
)
مخزن ميزات مساحة العمل
# At inference, 'browser' must be provided
# batch_df has columns ['customer_id', 'browser']
predictions = fs.score_batch(
model_uri=model_uri,
df=batch_df
)
تحميل النماذج وتنفيذ الاستدلال الدفعي باستخدام MLflow
بعد تسجيل نموذج باستخدام log_model
أسلوب FeatureEngineeringClient
(لهندسة الميزات في كتالوج Unity) أو FeatureStoreClient
(لمخزن ميزات مساحة العمل)، يمكن استخدام MLflow للاستدلال. MLflow.pyfunc.predict
يسترد قيم الميزات من 'متجر الميزات' وينضم أيضا إلى أي قيم يتم توفيرها في وقت الاستدلال. يجب توفير المفتاح (المفاتيح) الأساسي للميزات المستخدمة في النموذج.
إشعار
يتطلب الاستدلال الدفعي مع MLflow إصدار MLflow 2.11 وما فوق. النماذج التي تستخدم جداول ميزات السلاسل الزمنية غير مدعومة. للقيام بالاستدلال الدفعي باستخدام جداول ميزات السلسلة الزمنية، استخدم score_batch
. راجع تدريب النماذج وتنفيذ الاستدلال الدفعي باستخدام جداول الميزات.
# 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)
معالجة قيم الميزات المفقودة
عند تمرير مفتاح بحث غير موجود إلى النموذج للتنبؤ، يمكن أن تكون قيمة الميزة التي تم جلبها إما FeatureLookup
None
أو NaN
، اعتمادا على البيئة. يجب أن يكون تنفيذ النموذج الخاص بك قادرا على التعامل مع كلتا القيمتين.
- بالنسبة للتطبيقات غير المتصلة باستخدام
fe.score_batch
، القيمة التي تم إرجاعها لميزة مفقودة هيNaN
. - بالنسبة للتطبيقات عبر الإنترنت التي تستخدم خدمة النموذج، قد تكون القيمة التي تم إرجاعها إما
None
أوNaN
:- إذا لم يكن أي من مفاتيح البحث المتوفرة موجودا، تكون القيمة هي
None
. - إذا لم تكن هناك سوى مجموعة فرعية من مفاتيح البحث، تكون القيمة هي
NaN
.
- إذا لم يكن أي من مفاتيح البحث المتوفرة موجودا، تكون القيمة هي
لمعالجة قيم الميزات المفقودة عند استخدام الميزات عند الطلب، راجع كيفية معالجة قيم الميزات المفقودة.