انتقل إلى المحتوى الرئيسي

تعلم الآلة Singularity - التصنيف: دالة Qiskit من Multiverse Computing

ملاحظة
  • دوال Qiskit ميزة تجريبية متاحة فقط لمستخدمي خطة IBM Quantum® Premium Plan وFlex Plan وOn-Prem (عبر IBM Quantum Platform API) Plan. هي في مرحلة إصدار معاينة وقابلة للتغيير.

نظرة عامة

بفضل دالة "تعلم الآلة Singularity - التصنيف"، يمكنك حل مشكلات تعلم الآلة الواقعية على أجهزة الكم دون الحاجة إلى خبرة كمية. هذه الدالة التطبيقية، المستندة إلى طرق التجميع، هي مصنِّف هجيني. تستغل الأساليب الكلاسيكية مثل التعزيز والتكييس والتجميع لتدريب التجميع الأولي. ثم تُستخدم الخوارزميات الكمية مثل المحلل الذاتي الكمي التنويعي (VQE) وخوارزمية التحسين الكمية التقريبية (QAOA) لتعزيز تنوع التجميع المُدرَّب وقدراته على التعميم وتعقيده الكلي.

على عكس حلول تعلم الآلة الكمية الأخرى، هذه الدالة قادرة على التعامل مع مجموعات بيانات واسعة النطاق بملايين الأمثلة والميزات دون أن تتقيد بعدد Qubits في وحدة المعالجة الكمية المستهدفة. عدد Qubits يحدد فقط حجم التجميع الذي يمكن تدريبه. كما أنها مرنة للغاية، وتُستخدم لحل مشكلات التصنيف في مجالات واسعة، تشمل التمويل والرعاية الصحية والأمن السيبراني. وهي تحقق باستمرار دقة عالية في المشكلات الكلاسيكية الصعبة التي تتضمن مجموعات بيانات عالية الأبعاد وصاخبة وغير متوازنة. كيف يعمل وهي مصممة لـ:

  1. المهندسين وعلماء البيانات في الشركات الساعين إلى تعزيز منتجاتهم التقنية بدمج تعلم الآلة الكمي في منتجاتهم وخدماتهم،
  2. الباحثين في مختبرات البحث الكمي الذين يستكشفون تطبيقات تعلم الآلة الكمي ويتطلعون إلى الاستفادة من الحوسبة الكمية لمهام التصنيف، و
  3. الطلاب والمعلمين في المؤسسات التعليمية في مقررات مثل تعلم الآلة، ممن يسعون إلى إبراز مزايا الحوسبة الكمية.

يوضح المثال التالي وظائفها المختلفة، بما فيها create وlist وfit وpredict، ويبرهن على استخدامها في مشكلة اصطناعية تتكون من نصفَي دائرة متداخلَين، وهي مشكلة صعبة بطبيعتها بسبب حدودها القراري غير الخطي.

وصف الدالة

تتيح دالة Qiskit هذه للمستخدمين حل مشكلات التصنيف الثنائي باستخدام مصنِّف التجميع المعزَّز كمياً من Singularity. خلف الكواليس، تستخدم نهجاً هجينياً لتدريب مجموعة من المصنِّفات كلاسيكياً على مجموعة البيانات المُعلَّمة، ثم تُحسِّنها لتحقيق أقصى تنوع وتعميم باستخدام خوارزمية التحسين الكمية التقريبية (QAOA) على وحدات المعالجة الكمية IBM®. من خلال واجهة سهلة الاستخدام، يمكن للمستخدمين ضبط المصنِّف وفق متطلباتهم، وتدريبه على مجموعة البيانات التي يختارونها، وتوظيفه لعمل تنبؤات على مجموعة بيانات لم يسبق رؤيتها.

لحل مشكلة تصنيف عامة:

  1. قم بمعالجة مجموعة البيانات مسبقاً، وقسِّمها إلى مجموعات للتدريب والاختبار. يمكنك اختيارياً تقسيم مجموعة التدريب إلى مجموعتين للتدريب والتحقق. يمكن تحقيق ذلك باستخدام scikit-learn.
  2. إذا كانت مجموعة التدريب غير متوازنة، يمكنك إعادة أخذ عينات منها لتوازن الفئات باستخدام imbalanced-learn.
  3. قم برفع مجموعات التدريب والتحقق والاختبار بشكل منفصل إلى مساحة تخزين الدالة باستخدام أسلوب file_upload من الكتالوج، مع تمرير المسار المناسب في كل مرة.
  4. هيِّئ المصنِّف الكمي باستخدام إجراء create الخاص بالدالة، الذي يقبل المعاملات الفائقة مثل عدد وأنواع المتعلمين، والتنظيم (قيمة lambda)، وخيارات التحسين بما فيها عدد الطبقات ونوع المُحسِّن الكلاسيكي والنظيرة الكمية الخلفية وغيرها.
  5. دِرِّب المصنِّف الكمي على مجموعة التدريب باستخدام إجراء fit الخاص بالدالة، مع تمرير مجموعة التدريب المُعلَّمة، ومجموعة التحقق إن وجدت.
  6. اصنع تنبؤات على مجموعة الاختبار غير المسبوقة باستخدام إجراء predict الخاص بالدالة.

النهج القائم على الإجراءات

تستخدم الدالة نهجاً قائماً على الإجراءات. يمكنك التفكير فيها كبيئة افتراضية تستخدم فيها الإجراءات لتنفيذ المهام أو تغيير حالتها. حالياً، تقدم الإجراءات التالية: list، وcreate، وdelete، وfit، وpredict، وfit_predict، وcreate_fit_predict. يوضح المثال التالي إجراء create_fit_predict.

# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit-ibm-catalog scikit-learn
# Import QiskitFunctionsCatalog to load the
# "Singularity Machine Learning - Classification" function by Multiverse Computing
from qiskit_ibm_catalog import QiskitFunctionsCatalog

# Import the make_moons and the train_test_split functions from scikit-learn
# to create a synthetic dataset and split it into training and test datasets
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split

# authentication
# If you have not previously saved your credentials, follow instructions at
# /docs/guides/functions
# to authenticate with your API key.
catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")

# load "Singularity Machine Learning - Classification" function by Multiverse Computing
singularity = catalog.load("multiverse/singularity")

# generate the synthetic dataset
X, y = make_moons(n_samples=1000)

# split the data into training and test datasets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

job = singularity.run(
action="create_fit_predict",
num_learners=10,
regularization=0.01,
optimizer_options={"simulator": True},
X_train=X_train,
y_train=y_train,
X_test=X_test,
options={"save": False},
)

# get job status and result
status = job.status()
result = job.result()

print("Job status: ", status)
print("Action result status: ", result["status"])
print("Action result message: ", result["message"])
print("Predictions (first five results): ", result["data"]["predictions"][:5])
print(
"Probabilities (first five results): ",
result["data"]["probabilities"][:5],
)
print("Usage metadata: ", result["metadata"]["resource_usage"])
Job status:  QUEUED
Action result status: ok
Action result message: Classifier created, fitted, and predicted.
Predictions (first five results): [1, 0, 0, 1, 0]
Probabilities (first five results): [[0.16849563539001172, 0.8315043646099888], [0.8726393386620336, 0.12736066133796647], [0.795344837290717, 0.20465516270928288], [0.36822585748882725, 0.6317741425111725], [0.6656662698604361, 0.3343337301395641]]
Usage metadata: {'RUNNING: MAPPING': {'CPU_TIME': 7.945035696029663}, 'RUNNING: WAITING_QPU': {'CPU_TIME': 82.41029238700867}, 'RUNNING: POST_PROCESSING': {'CPU_TIME': 77.3459484577179}, 'RUNNING: EXECUTING_QPU': {'QPU_TIME': 71.27004957199097}}

1. List

يسترجع إجراء list جميع المصنِّفات المُخزَّنة بصيغة *.pkl.tar من مجلد البيانات المشترك. يمكنك أيضاً الوصول إلى محتويات هذا المجلد باستخدام أسلوب catalog.files(). بشكل عام، يبحث إجراء list عن ملفات بامتداد *.pkl.tar في مجلد البيانات المشترك ويعيدها بتنسيق قائمة.

المدخلات

الاسمالنوعالوصفمطلوب
actionstrاسم الإجراء من بين create وlist وfit وpredict وfit_predict وcreate_fit_predict وdelete.نعم

الاستخدام

job = singularity.run(action="list")

2. Create

يُنشئ إجراء create مصنِّفاً من النوع quantum_classifier المحدد باستخدام المعاملات المقدَّمة، ويحفظه في مجلد البيانات المشترك.

ملاحظة

تدعم الدالة حالياً فقط QuantumEnhancedEnsembleClassifier.

المدخلات

الاسمالنوعالوصفمطلوبالافتراضي
actionstrاسم الإجراء من بين create وlist وfit وpredict وfit_predict وcreate_fit_predict وdelete.نعم-
namestrاسم المصنِّف الكمي، مثل spam_classifier.نعم-
instancestrنسخة IBM.نعم-
backend_namestrمورد الحوسبة في IBM. الافتراضي هو None، مما يعني استخدام النظيرة الخلفية ذات أقل الوظائف المعلَّقة.لاNone
quantum_classifierstrنوع المصنِّف الكمي، أي QuantumEnhancedEnsembleClassifier.لاQuantumEnhancedEnsembleClassifier
num_learnersintegerعدد المتعلمين في التجميع.لا10
learners_typeslistأنواع المتعلمين. من الأنواع المدعومة: DecisionTreeClassifier وGaussianNB وKNeighborsClassifier وMLPClassifier وLogisticRegression. يمكن الاطلاع على مزيد من التفاصيل المتعلقة بكل منها في وثائق scikit-learn.لا[DecisionTreeClassifier]
learners_proportionslistنسب كل نوع متعلم في التجميع.لا[1.0]
learners_optionslistخيارات كل نوع متعلم في التجميع. للحصول على قائمة كاملة بالخيارات المتوافقة مع نوع/أنواع المتعلم المختارة، راجع وثائق scikit-learn.لا[{"max_depth": 3, "splitter": "random", "class_weight": None}]
regularization_typestr أو listنوع/أنواع التنظيم المستخدَمة: onsite أو alpha. يتحكم onsite في الحد الموضعي حيث تؤدي القيم الأعلى إلى تجميعات أكثر تناثراً. يتحكم alpha في التوازن بين حدَّي التفاعل والموضع حيث تؤدي القيم الأدنى إلى تجميعات أكثر تناثراً. إذا قُدِّمت قائمة، فسيُدرَّب نموذج لكل نوع ويُختار الأفضل أداءً.لاonsite
regularizationstr أو float أو listقيمة التنظيم. محدودة بين 0 و+inf إذا كان regularization_type هو onsite. محدودة بين 0 و1 إذا كان regularization_type هو alpha. إذا ضُبطت على auto، يُستخدم التنظيم التلقائي - يُجاد معامل التنظيم الأمثل بالبحث الثنائي بالنسبة المطلوبة من المصنِّفات المحددة إلى المصنِّفات الكلية (regularization_desired_ratio) والحد الأعلى لمعامل التنظيم (regularization_upper_bound). إذا قُدِّمت قائمة، فسيُدرَّب نموذج لكل قيمة ويُختار الأفضل أداءً.لا0.01
regularization_desired_ratiofloat أو listالنسبة/النسب المطلوبة من المصنِّفات المحددة إلى المصنِّفات الكلية للتنظيم التلقائي. إذا قُدِّمت قائمة، فسيُدرَّب نموذج لكل نسبة ويُختار الأفضل أداءً.لا0.75
regularization_upper_boundfloat أو listالحد/الحدود العليا لمعامل التنظيم عند استخدام التنظيم التلقائي. إذا قُدِّمت قائمة، فسيُدرَّب نموذج لكل حد أعلى ويُختار الأفضل أداءً.لا200
weight_update_methodstrطريقة تحديث أوزان العينات من بين logarithmic وquadratic.لاlogarithmic
sample_scalingbooleanهل ينبغي تطبيق مقياس العينة.لاFalse
prediction_scalingfloatمعامل المقياس للتنبؤات.لاNone
optimizer_optionsdictionaryخيارات مُحسِّن QAOA. قائمة بالخيارات المتاحة مُقدَّمة لاحقاً في هذه الوثائق.لا...
votingstrاستخدام التصويت بالأغلبية (hard) أو متوسط الاحتمالات (soft) لتجميع تنبؤات/احتمالات المتعلمين.لاhard
prob_thresholdfloatحد الاحتمال الأمثل.لا0.5
random_stateintegerالتحكم في العشوائية لإمكانية التكرار.لاNone
  • بالإضافة إلى ذلك، تُدرَج optimizer_options على النحو التالي:
الاسمالنوعالوصفمطلوبالافتراضي
num_solutionsintegerعدد الحلوللا1024
repsintegerعدد التكراراتلا4
sparsifyfloatحد التناثرلا0.001
thetafloatالقيمة الأولية لـ theta، وهو معامل تنويعي لـ QAOAلاNone
simulatorbooleanهل تُستخدم المحاكاة أم وحدة معالجة كميةلاFalse
classical_optimizerstrاسم المُحسِّن الكلاسيكي لـ QAOA. جميع المحلِّلات التي توفرها SciPy، كما هو مُدرَج هنا، قابلة للاستخدام. ستحتاج إلى ضبط classical_optimizer_options وفقاً لذلكلاCOBYLA
classical_optimizer_optionsdictionaryخيارات المُحسِّن الكلاسيكي. للحصول على قائمة كاملة بالخيارات المتاحة، راجع وثائق SciPyلا{"maxiter": 60}
optimization_levelintegerعمق دائرة QAOAلا3
num_transpiler_runsintegerعدد تشغيلات Transpilerلا30
pass_manager_optionsdictionaryخيارات لإنشاء مدير مرور مُعيَّن مسبقاًلا{"approximation_degree": 1.0}
estimator_optionsdictionaryخيارات المُقدِّر. للحصول على قائمة كاملة بالخيارات المتاحة، راجع وثائق عميل Qiskit RuntimeلاNone
sampler_optionsdictionaryخيارات أخذ العينات. للحصول على قائمة كاملة بالخيارات المتاحة، راجع وثائق عميل Qiskit RuntimeلاNone
  • القيم الافتراضية لـ estimator_options هي:
الاسمالنوعالقيمة
default_shotsinteger1024
resilience_levelinteger2
twirlingdictionary{"enable_gates": True}
dynamical_decouplingdictionary{"enable": True}
resilience_optionsdictionary{"zne_mitigation": False, "zne": {"amplifier": "pea", "noise_factors": [1.0, 1.3, 1.6], "extrapolator": ["linear", "polynomial_degree_2", "exponential"],}}
  • القيم الافتراضية لـ sampler_options هي:
الاسمالنوعالقيمة
default_shotsinteger1024
resilience_levelinteger1
twirlingdictionary{"enable_gates": True}
dynamical_decouplingdictionary{"enable": True}

الاستخدام

job = singularity.run(
action="create",
name="classifier_name", # specify your custom name for the classifier here
num_learners=10,
regularization=0.01,
optimizer_options={"simulator": True},
)

التحقق من الصحة

  • name:
    • يجب أن يكون الاسم فريداً، وسلسلة نصية لا تتجاوز 64 حرفاً.
    • يمكن أن يحتوي فقط على أحرف أبجدية رقمية وشرطات سفلية.
    • يجب أن يبدأ بحرف ولا ينتهي بشرطة سفلية.
    • يجب ألا يوجد مصنِّف بنفس الاسم في مجلد البيانات المشترك.

3. Delete

يزيل إجراء delete مصنِّفاً من مجلد البيانات المشترك.

المدخلات

الاسمالنوعالوصفمطلوب
actionstrاسم الإجراء. يجب أن يكون delete.نعم
namestrاسم المصنِّف المراد حذفه.نعم

الاستخدام

job = singularity.run(
action="delete",
name="classifier_name", # specify the name of the classifier to delete here
)

التحقق من الصحة

  • name:
    • يجب أن يكون الاسم فريداً، وسلسلة نصية لا تتجاوز 64 حرفاً.
    • يمكن أن يحتوي فقط على أحرف أبجدية رقمية وشرطات سفلية.
    • يجب أن يبدأ بحرف ولا ينتهي بشرطة سفلية.
    • يجب أن يوجد مصنِّف بنفس الاسم في مجلد البيانات المشترك.

4. Fit

يُدرِّب إجراء fit مصنِّفاً باستخدام بيانات التدريب المقدَّمة.

المدخلات

الاسمالنوعالوصفمطلوب
actionstrاسم الإجراء. يجب أن يكون fit.نعم
namestrاسم المصنِّف المراد تدريبه.نعم
Xarray أو list أو strبيانات التدريب. يمكن أن تكون مصفوفة NumPy أو قائمة أو سلسلة نصية تُشير إلى اسم ملف في مجلد البيانات المشترك.نعم
yarray أو list أو strقيم الهدف للتدريب. يمكن أن تكون مصفوفة NumPy أو قائمة أو سلسلة نصية تُشير إلى اسم ملف في مجلد البيانات المشترك.نعم
fit_paramsdictionaryمعاملات إضافية لتمريرها إلى أسلوب fit الخاص بالمصنِّف.لا
fit_params
الاسمالنوعالوصفمطلوبالافتراضي
validation_datatupleبيانات التحقق والتسميات.لاNone
pos_labelinteger أو strتسمية الفئة المراد تعيينها إلى 1.لاNone
optimization_datastrمجموعة البيانات لتحسين التجميع عليها. يمكن أن تكون إحدى: train أو validation أو both.لاtrain

الاستخدام

job = singularity.run(
action="fit",
name="classifier_name", # specify the name of the classifier to train here
X=X_train, # or "X_train.npy" if you uploaded it in the shared data directory
y=y_train, # or "y_train.npy" if you uploaded it in the shared data directory
fit_params={}, # define the fit parameters here
)

التحقق من الصحة

  • name:
    • يجب أن يكون الاسم فريداً، وسلسلة نصية لا تتجاوز 64 حرفاً.
    • يمكن أن يحتوي فقط على أحرف أبجدية رقمية وشرطات سفلية.
    • يجب أن يبدأ بحرف ولا ينتهي بشرطة سفلية.
    • يجب أن يوجد مصنِّف بنفس الاسم في مجلد البيانات المشترك.

5. Predict

يُستخدم إجراء predict للحصول على التنبؤات الصارمة والمرنة (الاحتمالات).

المدخلات

الاسمالنوعالوصفمطلوب
actionstrاسم الإجراء. يجب أن يكون predict.نعم
namestrاسم المصنِّف المراد استخدامه.نعم
Xarray أو list أو strبيانات الاختبار. يمكن أن تكون مصفوفة NumPy أو قائمة أو سلسلة نصية تُشير إلى اسم ملف في مجلد البيانات المشترك.نعم
options["out"]strاسم ملف JSON الناتج لحفظ التنبؤات في مجلد البيانات المشترك. إذا لم يُقدَّم، تُعاد التنبؤات في نتيجة الوظيفة.لا

الاستخدام

job = singularity.run(
action="predict",
name="classifier_name", # specify the name of the classifier to use here
X=X_test, # or "X_test.npy" if you uploaded it to the shared data directory
options={
"out": "output.json",
},
)

التحقق من الصحة

  • name:
    • يجب أن يكون الاسم فريداً، وسلسلة نصية لا تتجاوز 64 حرفاً.
    • يمكن أن يحتوي فقط على أحرف أبجدية رقمية وشرطات سفلية.
    • يجب أن يبدأ بحرف ولا ينتهي بشرطة سفلية.
    • يجب أن يوجد مصنِّف بنفس الاسم في مجلد البيانات المشترك.
  • options["out"]:
    • يجب أن يكون اسم الملف فريداً، وسلسلة نصية لا تتجاوز 64 حرفاً.
    • يمكن أن يحتوي فقط على أحرف أبجدية رقمية وشرطات سفلية.
    • يجب أن يبدأ بحرف ولا ينتهي بشرطة سفلية.
    • يجب أن يحمل الامتداد .json.

6. Fit-predict

يُدرِّب إجراء fit_predict مصنِّفاً باستخدام بيانات التدريب ثم يستخدمه للحصول على التنبؤات الصارمة والمرنة (الاحتمالات).

المدخلات

الاسمالنوعالوصفمطلوب
actionstrاسم الإجراء. يجب أن يكون fit_predict.نعم
namestrاسم المصنِّف المراد استخدامه.نعم
X_trainarray أو list أو strبيانات التدريب. يمكن أن تكون مصفوفة NumPy أو قائمة أو سلسلة نصية تُشير إلى اسم ملف في مجلد البيانات المشترك.نعم
y_trainarray أو list أو strقيم الهدف للتدريب. يمكن أن تكون مصفوفة NumPy أو قائمة أو سلسلة نصية تُشير إلى اسم ملف في مجلد البيانات المشترك.نعم
X_testarray أو list أو strبيانات الاختبار. يمكن أن تكون مصفوفة NumPy أو قائمة أو سلسلة نصية تُشير إلى اسم ملف في مجلد البيانات المشترك.نعم
fit_paramsdictionaryمعاملات إضافية لتمريرها إلى أسلوب fit الخاص بالمصنِّف.لا
options["out"]strاسم ملف JSON الناتج لحفظ التنبؤات في مجلد البيانات المشترك. إذا لم يُقدَّم، تُعاد التنبؤات في نتيجة الوظيفة.لا

الاستخدام

job = singularity.run(
action="fit_predict",
name="classifier_name", # specify the name of the classifier to use here
X_train=X_train, # or "X_train.npy" if you uploaded it in the shared data directory
y_train=y_train, # or "y_train.npy" if you uploaded it in the shared data directory
X_test=X_test, # or "X_test.npy" if you uploaded it in the shared data directory
fit_params={}, # define the fit parameters here
options={
"out": "output.json",
},
)

التحقق من الصحة

  • name:

    • يجب أن يكون الاسم فريداً، وسلسلة نصية لا تتجاوز 64 حرفاً.
    • يمكن أن يحتوي فقط على أحرف أبجدية رقمية وشرطات سفلية.
    • يجب أن يبدأ بحرف ولا ينتهي بشرطة سفلية.
    • يجب أن يوجد مصنِّف بنفس الاسم في مجلد البيانات المشترك.
  • options["out"]:

    • يجب أن يكون اسم الملف فريداً، وسلسلة نصية لا تتجاوز 64 حرفاً.
    • يمكن أن يحتوي فقط على أحرف أبجدية رقمية وشرطات سفلية.
    • يجب أن يبدأ بحرف ولا ينتهي بشرطة سفلية.
    • يجب أن يحمل الامتداد .json.

7. Create-fit-predict

ينشئ إجراء create_fit_predict مصنِّفاً، ويُدرِّبه باستخدام بيانات التدريب المقدَّمة، ثم يستخدمه للحصول على التنبؤات الصارمة والمرنة (الاحتمالات).

المدخلات

الاسمالنوعالوصفمطلوب
actionstrاسم الإجراء من بين create وlist وfit وpredict وfit_predict وcreate_fit_predict وdelete.نعم
namestrاسم المصنِّف المراد استخدامه.نعم
quantum_classifierstrنوع المصنِّف، أي QuantumEnhancedEnsembleClassifier. الافتراضي هو QuantumEnhancedEnsembleClassifier.لا
X_trainarray أو list أو strبيانات التدريب. يمكن أن تكون مصفوفة NumPy أو قائمة أو سلسلة نصية تُشير إلى اسم ملف في مجلد البيانات المشترك.نعم
y_trainarray أو list أو strقيم الهدف للتدريب. يمكن أن تكون مصفوفة NumPy أو قائمة أو سلسلة نصية تُشير إلى اسم ملف في مجلد البيانات المشترك.نعم
X_testarray أو list أو strبيانات الاختبار. يمكن أن تكون مصفوفة NumPy أو قائمة أو سلسلة نصية تُشير إلى اسم ملف في مجلد البيانات المشترك.نعم
fit_paramsdictionaryمعاملات إضافية لتمريرها إلى أسلوب fit الخاص بالمصنِّف.لا
options["save"]booleanهل يُحفظ المصنِّف المُدرَّب في مجلد البيانات المشترك. الافتراضي هو True.لا
options["out"]strاسم ملف JSON الناتج لحفظ التنبؤات في مجلد البيانات المشترك. إذا لم يُقدَّم، تُعاد التنبؤات في نتيجة الوظيفة.لا

الاستخدام

job = singularity.run(
action="create_fit_predict",
name="classifier_name", # specify your custom name for the classifier here
num_learners=10,
regularization=0.01,
optimizer_options={"simulator": True},
X_train=X_train, # or "X_train.npy" if you uploaded it in the shared data directory
y_train=y_train, # or "y_train.npy" if you uploaded it in the shared data directory
X_test=X_test, # or "X_test.npy" if you uploaded it in the shared data directory
fit_params={}, # define the fit parameters here
options={
"save": True,
"out": "output.json",
},
)

التحقق من الصحة

  • name:

    • إذا كان options["save"] مضبوطاً على True:
      • يجب أن يكون الاسم فريداً، وسلسلة نصية لا تتجاوز 64 حرفاً.
      • يمكن أن يحتوي فقط على أحرف أبجدية رقمية وشرطات سفلية.
      • يجب أن يبدأ بحرف ولا ينتهي بشرطة سفلية.
      • يجب ألا يوجد مصنِّف بنفس الاسم في مجلد البيانات المشترك.
  • options["out"]:

    • يجب أن يكون اسم الملف فريداً، وسلسلة نصية لا تتجاوز 64 حرفاً.
    • يمكن أن يحتوي فقط على أحرف أبجدية رقمية وشرطات سفلية.
    • يجب أن يبدأ بحرف ولا ينتهي بشرطة سفلية.
    • يجب أن يحمل الامتداد .json.

ابدأ الآن

سجّل الدخول باستخدام مفتاح API الخاص بك على IBM Quantum Platform، ثم اختر دالة Qiskit على النحو التالي:

from qiskit_ibm_catalog import QiskitFunctionsCatalog

catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")

# load function
singularity = catalog.load("multiverse/singularity")

مثال

في هذا المثال، ستستخدم دالة "Singularity Machine Learning - Classification" لتصنيف مجموعة بيانات تتكون من نصفَي دائرة متشابكَين على شكل قمر. مجموعة البيانات هذه اصطناعية وثنائية الأبعاد، ومُصنَّفة بتسميات ثنائية. صُمِّمت لتكون تحديًا حقيقيًا لخوارزميات مثل التجميع القائم على النقاط المرجعية والتصنيف الخطي. مجموعة بيانات القمر من خلال هذه العملية، ستتعلم كيفية إنشاء المصنِّف وضبطه على بيانات التدريب، ثم استخدامه للتنبؤ على بيانات الاختبار، وأخيرًا حذفه عند الانتهاء. قبل البدء، تحتاج إلى تثبيت scikit-learn. ثبِّته باستخدام الأمر التالي:

python3 -m pip install scikit-learn

اتبع الخطوات التالية:

  1. أنشئ مجموعة البيانات الاصطناعية باستخدام دالة make_moons من scikit-learn.
  2. ارفع مجموعة البيانات الاصطناعية التي أنشأتها إلى دليل البيانات المشتركة.
  3. أنشئ المصنِّف المُعزَّز كميًا باستخدام إجراء create.
  4. اعرض قائمة بمصنِّفاتك باستخدام إجراء list.
  5. درِّب المصنِّف على بيانات التدريب باستخدام إجراء fit.
  6. استخدم المصنِّف المدرَّب للتنبؤ على بيانات الاختبار باستخدام إجراء predict.
  7. احذف المصنِّف باستخدام إجراء delete.
  8. نظِّف البيانات بعد الانتهاء.

الخطوة 1. استورد الوحدات الضرورية وأنشئ مجموعة البيانات الاصطناعية، ثم قسِّمها إلى مجموعتَي تدريب واختبار.

# import the necessary modules for this example
import os
import tarfile
import numpy as np

# Import the make_moons and the train_test_split functions from scikit-learn
# to create a synthetic dataset and split it into training and test datasets
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split

# generate the synthetic dataset
X, y = make_moons(n_samples=10000)

# split the data into training and test datasets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# print the first 10 samples of the training dataset
print("Features:", X_train[:10, :])
print("Targets:", y_train[:10])
Features: [[-0.99958218  0.02890441]
[ 0.03285169 0.24578719]
[ 1.13127903 -0.49134546]
[ 1.86951286 0.00608971]
[ 0.20190413 0.97940529]
[ 0.8831311 0.46912627]
[-0.10819442 0.99412975]
[-0.20005727 0.97978421]
[-0.78775705 0.61598607]
[ 1.82453236 -0.0658148 ]]
Targets: [0 1 1 1 0 0 0 0 0 1]

الخطوة 2. احفظ مجموعتَي بيانات التدريب والاختبار المُصنَّفتَين على قرصك المحلي، ثم ارفعهما إلى دليل البيانات المشتركة.

def make_tarfile(file_path, tar_file_name):
with tarfile.open(tar_file_name, "w") as tar:
tar.add(file_path, arcname=os.path.basename(file_path))

# save the training and test datasets on your local disk
np.save("X_train.npy", X_train)
np.save("y_train.npy", y_train)
np.save("X_test.npy", X_test)
np.save("y_test.npy", y_test)

# create tar files for the datasets
make_tarfile("X_train.npy", "X_train.npy.tar")
make_tarfile("y_train.npy", "y_train.npy.tar")
make_tarfile("X_test.npy", "X_test.npy.tar")
make_tarfile("y_test.npy", "y_test.npy.tar")

# upload the datasets to the shared data directory
catalog.file_upload("X_train.npy.tar", singularity)
catalog.file_upload("y_train.npy.tar", singularity)
catalog.file_upload("X_test.npy.tar", singularity)
catalog.file_upload("y_test.npy.tar", singularity)

# view/enlist the uploaded files in the shared data directory
print(catalog.files(singularity))
['X_test.npy.tar', 'X_train.npy.tar', 'y_test.npy.tar', 'y_train.npy.tar']

الخطوة 3. أنشئ مصنِّفًا مُعزَّزًا كميًا باستخدام إجراء create.

job = singularity.run(
action="create",
name="my_classifier",
num_learners=10,
learners_types=[
"DecisionTreeClassifier",
"KNeighborsClassifier",
],
learners_proportions=[0.5, 0.5],
learners_options=[{}, {}],
regularization=0.01,
weight_update_method="logarithmic",
sample_scaling=True,
optimizer_options={"simulator": True},
voting="soft",
prob_threshold=0.5,
)

print(job.result())
{'status': 'ok', 'message': 'Classifier created.', 'data': {}, 'metadata': {'resource_usage': {}}}
# list available classifiers using the list action
job = singularity.run(action="list")

print(job.result())

# you can also find your classifiers in the shared data directory with a *.pkl.tar extension
print(catalog.files(singularity))
{'status': 'ok', 'message': 'Classifiers listed.', 'data': {'classifiers': ['my_classifier']}, 'metadata': {'resource_usage': {}}}
['X_test.npy.tar', 'X_train.npy.tar', 'y_test.npy.tar', 'y_train.npy.tar', 'my_classifier.pkl.tar']

الخطوة 4. درِّب المصنِّف المُعزَّز كميًا باستخدام إجراء fit.

job = singularity.run(
action="fit",
name="my_classifier",
X="X_train.npy", # you do not need to specify the tar extension
y="y_train.npy", # you do not need to specify the tar extension
)

print(job.result())
{'status': 'ok', 'message': 'Classifier fitted.', 'data': {}, 'metadata': {'resource_usage': {'RUNNING: MAPPING': {'CPU_TIME': 8.45469617843628}, 'RUNNING: WAITING_QPU': {'CPU_TIME': 69.4949426651001}, 'RUNNING: POST_PROCESSING': {'CPU_TIME': 73.01881957054138}, 'RUNNING: EXECUTING_QPU': {'QPU_TIME': 75.4787163734436}}}}

الخطوة 5. احصل على التنبؤات والاحتمالات من المصنِّف المُعزَّز كميًا باستخدام إجراء predict.

job = singularity.run(
action="predict",
name="my_classifier",
X="X_test.npy", # you do not need to specify the tar extension
)

result = job.result()

print("Action result status: ", result["status"])
print("Action result message: ", result["message"])
print("Predictions (first five results):", result["data"]["predictions"][:5])
print(
"Probabilities (first five results):", result["data"]["probabilities"][:5]
)
Action result status:  ok
Action result message: Classifier predicted.
Predictions (first five results): [0, 1, 0, 0, 1]
Probabilities (first five results): [[1.0, 0.0], [0.0, 1.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0]]

الخطوة 6. احذف المصنِّف المُعزَّز كميًا باستخدام إجراء delete.

job = singularity.run(
action="delete",
name="my_classifier",
)

# or you can delete from the shared data directory
# catalog.file_delete("my_classifier.pkl.tar", singularity)

print(job.result())
{'status': 'ok', 'message': 'Classifier deleted.', 'data': {}, 'metadata': {'resource_usage': {}}}

الخطوة 7. نظِّف الأدلة المحلية ودليل البيانات المشتركة.

# delete the numpy files from your local disk
os.remove("X_train.npy")
os.remove("y_train.npy")
os.remove("X_test.npy")
os.remove("y_test.npy")

# delete the tar files from your local disk
os.remove("X_train.npy.tar")
os.remove("y_train.npy.tar")
os.remove("X_test.npy.tar")
os.remove("y_test.npy.tar")

# delete the tar files from the shared data
catalog.file_delete("X_train.npy.tar", singularity)
catalog.file_delete("y_train.npy.tar", singularity)
catalog.file_delete("X_test.npy.tar", singularity)
catalog.file_delete("y_test.npy.tar", singularity)

المعايير القياسية

تُظهر هذه المعايير القياسية أن المصنِّف قادر على تحقيق دقة عالية جدًا في المشكلات الصعبة. كما تُظهر أن زيادة عدد المتعلمين في المجموعة (عدد الـ Qubit) يمكن أن تؤدي إلى رفع مستوى الدقة.

"الدقة الكلاسيكية" تشير إلى الدقة المُحققة باستخدام أفضل الأساليب الكلاسيكية المناظرة، والتي تعتمد في هذه الحالة على مصنِّف AdaBoost مبني على مجموعة حجمها 75. أما "الدقة الكمومية"، فتشير إلى الدقة المُحققة باستخدام "Singularity Machine Learning - Classification".

المشكلةحجم مجموعة البياناتحجم المجموعةعدد الـ Qubitالدقة الكلاسيكيةالدقة الكموميةالتحسُّن
استقرار الشبكة الكهربائية5000 مثال، 12 ميزة555576%91%15%
استقرار الشبكة الكهربائية5000 مثال، 12 ميزة656576%92%16%
استقرار الشبكة الكهربائية5000 مثال، 12 ميزة757576%94%18%
استقرار الشبكة الكهربائية5000 مثال، 12 ميزة858576%94%18%
استقرار الشبكة الكهربائية5000 مثال، 12 ميزة10010076%95%19%

مع تطور الأجهزة الكمومية وتوسُّع نطاقها، تزداد أهمية المصنِّف الكمومي بشكل ملحوظ. وبينما يُقيِّد عدد الـ Qubit حجم المجموعة التي يمكن استخدامها، فإنه لا يُقيِّد حجم البيانات التي يمكن معالجتها. هذه القدرة الفائقة تُتيح للمصنِّف التعامل بكفاءة مع مجموعات بيانات تحتوي على ملايين من نقاط البيانات وآلاف الميزات. والجدير بالذكر أن القيود المتعلقة بحجم المجموعة يمكن التغلب عليها من خلال تطبيق نسخة موسَّعة من المصنِّف. إذ يمكن، عبر نهج تكراري خارجي، توسيع المجموعة بشكل ديناميكي، مما يُعزِّز المرونة ويرفع الأداء العام. غير أن هذه الميزة لم يتم تطبيقها بعد في الإصدار الحالي من المصنِّف.

سجل التغييرات

4 يونيو 2025

  • ترقية QuantumEnhancedEnsembleClassifier بالتحديثات التالية:
    • إضافة تنظيم onsite/alpha. يمكنك تحديد regularization_type بقيمة onsite أو alpha
    • إضافة التنظيم التلقائي. يمكنك ضبط regularization على auto لاستخدام التنظيم التلقائي
    • إضافة معامل optimization_data إلى دالة fit لاختيار بيانات التحسين في عملية التحسين الكمومي. يمكنك استخدام إحدى هذه الخيارات: train أو validation أو both
    • تحسين الأداء العام
  • إضافة تتبع تفصيلي لحالة المهام الجارية

20 مايو 2025

  • توحيد آلية معالجة الأخطاء

18 مارس 2025

  • ترقية qiskit-serverless إلى الإصدار 0.20.0 والصورة الأساسية إلى 0.20.1

14 فبراير 2025

  • ترقية الصورة الأساسية إلى 0.19.1

6 فبراير 2025

  • ترقية qiskit-serverless إلى الإصدار 0.19.0 والصورة الأساسية إلى 0.19.0

13 نوفمبر 2024

  • إطلاق Singularity Machine Learning - Classification

احصل على الدعم

لأي استفسارات، تواصل مع Multiverse Computing.

احرص على تضمين المعلومات التالية:

  • معرِّف مهمة Qiskit Function (job.job_id)
  • وصف تفصيلي للمشكلة
  • أي رسائل أو رموز خطأ ذات صلة
  • خطوات إعادة إنتاج المشكلة

الخطوات التالية