Singularity Machine Learning - Classification: פונקציית Qiskit מאת Multiverse Computing
- פונקציות Qiskit הן פיצ'ר ניסיוני הזמין רק למשתמשי IBM Quantum® Premium Plan, Flex Plan, ו-On-Prem (דרך IBM Quantum Platform API) Plan. הן בסטטוס גרסת תצוגה מקדימה וכפופות לשינויים.
סקירה כללית
עם פונקציית "Singularity Machine Learning - Classification", אתה יכול לפתור בעיות למידת מכונה מהעולם האמיתי על חומרה קוונטית מבלי שתידרש מומחיות קוונטית. פונקציית Application זו, המבוססת על שיטות אנסמבל, היא מסווג היברידי. היא מנצלת שיטות קלאסיות כמו boosting, bagging ו-stacking לאימון אנסמבל ראשוני. לאחר מכן, אלגוריתמים קוונטיים כגון variational quantum eigensolver (VQE) ו-quantum approximate optimization algorithm (QAOA) מוחלים כדי לשפר את הגיוון, יכולות ההכללה, והמורכבות הכוללת של האנסמבל המאומן.
שלא כמו פתרונות קוונטיים אחרים ללמידת מכונה, פונקציה זו מסוגלת לטפל בסטי נתונים בקנה מידה גדול עם מיליוני דוגמאות ותכונות, מבלי שתהיה מוגבלת על ידי מספר ה-Qubits ב-QPU המטרה. מספר ה-Qubits קובע רק את גודל האנסמבל שניתן לאמן. בנוסף, הפונקציה גמישה מאוד, וניתן להשתמש בה לפתרון בעיות סיווג במגוון רחב של תחומים, כולל פיננסים, בריאות וסייבר.
היא משיגה באופן עקבי דיוקים גבוהים בבעיות מאתגרות קלאסית הכוללות סטי נתונים בממד גבוה, רועשים וחסרי איזון.
היא נבנתה עבור:
- מהנדסים ומדעני נתונים בחברות המבקשים לשפר את ההצעות הטכנולוגיות שלהם על ידי שילוב למידת מכונה קוונטית במוצרים ובשירותים שלהם,
- חוקרים במעבדות מחקר קוונטי החוקרים יישומי למידת מכונה קוונטית ומבקשים לנצל את המחשוב הקוונטי למשימות סיווג, ו-
- סטודנטים ומורים במוסדות חינוך בקורסים כמו למידת מכונה, המבקשים להדגים את יתרונות המחשוב הקוונטי.
הדוגמה הבאה מציגה את הפונקציונליות השונות שלה, כולל create, list, fit ו-predict, ומדגימה את השימוש בה בבעיה סינתטית המורכבת משני חצאי עיגולים משתלבים — בעיה ידועה לשמצה בגלל הגבול ההחלטה הלא-לינארי שלה.
תיאור הפונקציה
פונקציית Qiskit זו מאפשרת למשתמשים לפתור בעיות סיווג בינארי באמצעות מסווג האנסמבל המשופר קוונטית של Singularity. מאחורי הקלעים, היא משתמשת בגישה היברידית לאימון קלאסי של אנסמבל מסווגים על סט הנתונים המתויג, ולאחר מכן לאופטימיזציה שלו לגיוון מרבי והכללה באמצעות Quantum Approximate Optimization Algorithm (QAOA) על IBM® QPUs. דרך ממשק ידידותי למשתמש, ניתן להגדיר מסווג בהתאם לדרישות שלך, לאמן אותו על סט הנתונים שתבחר, ולהשתמש בו לביצוע תחזיות על סט נתונים שלא נראה בעבר.
לפתרון בעיית סיווג גנרית:
- עבד מראש את סט הנתונים, וחלק אותו לסטי אימון ובדיקה. באופן אופציונלי, ניתן לחלק עוד יותר את סט האימון לסטי אימון ואימות. ניתן להשיג זאת באמצעות scikit-learn.
- אם סט האימון אינו מאוזן, ניתן לדגום אותו מחדש כדי לאזן את המחלקות באמצעות imbalanced-learn.
- העלה את סטי האימון, האימות והבדיקה בנפרד לאחסון הפונקציה באמצעות שיטת
file_uploadשל הקטלוג, תוך העברת הנתיב הרלוונטי בכל פעם. - אתחל את המסווג הקוונטי באמצעות פעולת
createשל הפונקציה, המקבלת hyperparameters כגון מספר סוגי הלומדים, הרגולריזציה (ערך lambda), ואפשרויות אופטימיזציה כולל מספר שכבות, סוג האופטימייזר הקלאסי, ה-Backend הקוונטי, וכן הלאה. - אמן את המסווג הקוונטי על סט האימון באמצעות פעולת
fitשל הפונקציה, תוך העברת סט האימון המתויג, וסט האימות אם רלוונטי. - בצע תחזיות על סט הבדיקה שלא נראה בעבר באמצעות פעולת
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 בספריית הנתונים המשותפת ומחזירה אותם בפורמט רשימה.
קלט
| שם | סוג | תיאור | חובה |
|---|---|---|---|
action | str | שם הפעולה מבין create, list, fit, predict, fit_predict, create_fit_predict ו-delete. | כן |
שימוש
job = singularity.run(action="list")
2. Create
פעולת create יוצרת מסווג מסוג quantum_classifier שצוין באמצעות הפרמטרים שסופקו, ושומרת אותו בספריית הנתונים המשותפת.
הפונקציה תומכת כרגע רק ב-QuantumEnhancedEnsembleClassifier.
קלט
| שם | סוג | תיאור | חובה | ברירת מחדל |
|---|---|---|---|---|
action | str | שם הפעולה מבין create, list, fit, predict, fit_predict, create_fit_predict ו-delete. | כן | - |
name | str | שם המסווג הקוונטי, למשל spam_classifier. | כן | - |
instance | str | מופע IBM. | כן | - |
backend_name | str | משאב מחשוב IBM. ברירת המחדל היא None, כלומר ה-Backend עם הכי מעט משימות ממתינות ייבחר. | לא | None |
quantum_classifier | str | סוג המסווג הקוונטי, כלומר QuantumEnhancedEnsembleClassifier. | לא | QuantumEnhancedEnsembleClassifier |
num_learners | integer | מספר הלומדים באנסמבל. | לא | 10 |
learners_types | list | סוגי הלומדים. בין הסוגים הנתמכים: DecisionTreeClassifier, GaussianNB, KNeighborsClassifier, MLPClassifier ו-LogisticRegression. פרטים נוספים על כל אחד ניתן למצוא בתיעוד scikit-learn. | לא | [DecisionTreeClassifier] |
learners_proportions | list | יחסי כל סוג לומד באנסמבל. | לא | [1.0] |
learners_options | list | אפשרויות לכל סוג לומד באנסמבל. לרשימה מלאה של האפשרויות המתאימות לסוג הלומד שנבחר, עיין בתיעוד scikit-learn. | לא | [{"max_depth": 3, "splitter": "random", "class_weight": None}] |
regularization_type | str או list | סוג/ים של רגולריזציה לשימוש: onsite או alpha. onsite שולט בגורם ה-onsite כאשר ערכים גבוהים יותר מובילים לאנסמבלים דלילים יותר. alpha שולט בפשרה בין גורמי האינטראקציה וה-onsite כאשר ערכים נמוכים יותר מובילי ם לאנסמבלים דלילים יותר. אם מסופקת רשימה, מודלים יאומנו לכל סוג והמוצלח ביותר ייבחר. | לא | onsite |
regularization | str או float או list | ערך הרגולריזציה. מוגבל בין 0 ל-+inf אם regularization_type הוא onsite. מוגבל בין 0 ל-1 אם regularization_type הוא alpha. אם מוגדר ל-auto, נעשה שימוש ברגולריזציה אוטומטית — פרמטר הרגולריזציה האופטימלי נמצא בחיפוש בינארי עם יחס הסיווגים הנבחרים לסיווגים הכולל הרצוי (regularization_desired_ratio) והגבול העליון לפרמטר הרגולריזציה (regularization_upper_bound). אם מסופקת רשימה, מודלים יאומנו לכל ערך והמוצלח ביותר ייבחר. | לא | 0.01 |
regularization_desired_ratio | float או list | יחס/ים רצויים של סיווגים נבחרים לסיווגים כולל לרגולריזציה אוטומטית. אם מסופקת רשימה, מודלים יאומנו לכל יחס והמוצלח ביותר ייבחר. | לא | 0.75 |
regularization_upper_bound | float או list | גבול/ות עליון/ים לפרמטר הרגולריזציה בעת שימוש ברגולריזציה אוטומטית. אם מסופקת רשימה, מודלים יאומנו לכל גבול עליון והמוצלח ביותר ייבחר. | לא | 200 |
weight_update_method | str | שיטה לעדכון משקלי דגימה מ בין logarithmic ו-quadratic. | לא | logarithmic |
sample_scaling | boolean | האם להחיל קנה מידה על הדגימות. | לא | False |
prediction_scaling | float | גורם קנה מידה לתחזיות. | לא | None |
optimizer_options | dictionary | אפשרויות האופטימייזר של QAOA. רשימת האפשרויות הזמינות מוצגת בהמשך התיעוד. | לא | ... |
voting | str | השתמש בהצבעת רוב (hard) או ממוצע הסתברויות (soft) לאגרגציה של תחזיות/הסתברויות הלומדים. | לא | hard |
prob_threshold | float | סף הסתברות אופטימלי. | לא | 0.5 |
random_state | integer | שליטה באקראיות לצורך ניתן לחזרה. | לא | None |
- בנוסף,
optimizer_optionsמפורטות כדלקמן:
| שם | סוג | תיאור | חובה | ברירת מחדל |
|---|---|---|---|---|
num_solutions | integer | מספר הפתרונות | לא | 1024 |
reps | integer | מספר החזרות | לא | 4 |
sparsify | float | סף הדילול | לא | 0.001 |
theta | float |