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

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

راجع مرجع API

إصدارات الحزم

تم تطوير الكود في هذه الصفحة باستخدام المتطلبات التالية. نوصي باستخدام هذه الإصدارات أو أحدث منها.

scikit-learn~=1.8.0
ملاحظة
  • دوال 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 الخاص بالدالة.

ابدأ الآن

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

# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit-ibm-catalog scikit-learn
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.84757037 -0.48831433]
[ 0.98132552 0.19235443]
[-0.71626723 0.6978261 ]
[ 1.18957848 -0.48186557]
[ 0.52118982 -0.37791846]
[ 0.81115408 0.58483251]
[ 0.48706462 0.87336593]
[-0.81880144 0.57407682]
[ 1.67335408 -0.23932015]
[ 0.50181306 0.8649761 ]]
Targets: [1 0 0 1 1 0 0 0 1 0]

الخطوة 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', 'my_classifier.pkl.tar', 'y_test.npy.tar', 'y_train.npy.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': 13.655871629714966}, 'RUNNING: WAITING_QPU': {'CPU_TIME': 54.688621282577515}, 'RUNNING: POST_PROCESSING': {'CPU_TIME': 56.92286920547485}, 'RUNNING: EXECUTING_QPU': {'QPU_TIME': 57.92738223075867}}}}

الخطوة 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, 0, 1, 0, 1]
Probabilities (first five results): [[1.0, 0.0], [1.0, 0.0], [0.0, 1.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)
'Requested file was deleted.'

مثال create_fit_predict

يوضح المثال التالي إجراء create_fit_predict.

# 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): [0, 0, 1, 0, 0]
Probabilities (first five results): [[0.87119766531518, 0.1288023346848197], [0.87119766531518, 0.1288023346848197], [0.24470328446479797, 0.7552967155352032], [0.820524432250189, 0.17947556774981072], [0.6847610293419495, 0.31523897065805173]]
Usage metadata: {'RUNNING: MAPPING': {'CPU_TIME': 10.967791318893433}, 'RUNNING: WAITING_QPU': {'CPU_TIME': 59.91712307929993}, 'RUNNING: POST_PROCESSING': {'CPU_TIME': 59.097386837005615}, 'RUNNING: EXECUTING_QPU': {'QPU_TIME': 56.93338203430176}}

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

تُظهر هذه المعايير القياسية أن المصنِّف قادر على تحقيق دقة عالية جدًا في المشكلات الصعبة. كما تُظهر أن زيادة عدد المتعلمين في المجموعة (عدد الـ 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)
  • وصف تفصيلي للمشكلة
  • أي رسائل أو رموز خطأ ذات صلة
  • خطوات إعادة إنتاج المشكلة

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