Перейти до основного вмісту

Singularity Machine Learning — Класифікація: функція Qiskit від Multiverse Computing

Примітка
  • Функції Qiskit — це експериментальна можливість, доступна лише користувачам IBM Quantum® Premium Plan, Flex Plan і On-Prem (через IBM Quantum Platform API) Plan. Вони перебувають у статусі попереднього випуску та можуть змінюватися.

Огляд

За допомогою функції "Singularity Machine Learning — Класифікація" ти можеш вирішувати реальні задачі машинного навчання на квантовому апаратному забезпеченні без необхідності мати квантову експертизу. Ця прикладна функція, заснована на методах ансамблів, є гібридним класифікатором. Вона використовує класичні методи, такі як бустинг, беґінг та стекінг, для початкового навчання ансамблю. Потім застосовуються квантові алгоритми — варіаційний квантовий власний розв'язувач (VQE) та квантовий апроксимаційний алгоритм оптимізації (QAOA) — щоб підвищити різноманітність навченого ансамблю, його здатність до узагальнення та загальну складність.

На відміну від інших рішень квантового машинного навчання, ця функція здатна обробляти великомасштабні датасети з мільйонами прикладів та ознак, не будучи обмеженою кількістю кубітів у цільовому QPU. Кількість кубітів визначає лише розмір ансамблю, який можна навчити. Функція також є надзвичайно гнучкою і може використовуватися для вирішення задач класифікації в найрізноманітніших галузях, зокрема у фінансах, охороні здоров'я та кібербезпеці. Вона стабільно досягає високої точності на класично складних задачах з висококимірними, зашумленими та незбалансованими датасетами. Як це працює Вона створена для:

  1. Інженерів і науковців з даних у компаніях, які прагнуть розширити свої технологічні пропозиції шляхом інтеграції квантового машинного навчання у свої продукти та послуги,
  2. Дослідників у квантових дослідницьких лабораторіях, які вивчають застосування квантового машинного навчання та хочуть використовувати квантові обчислення для задач класифікації, і
  3. Студентів та викладачів у навчальних закладах на курсах з машинного навчання, які прагнуть продемонструвати переваги квантових обчислень.

Наступний приклад демонструє різноманітні функціональні можливості, зокрема create, list, fit і predict, та показує їх використання на синтетичній задачі, яка складається з двох взаємопроникних напівкіл — задачі, відомо складної через нелінійну межу рішення.

Опис функції

Ця функція Qiskit дозволяє користувачам вирішувати задачі бінарної класифікації за допомогою квантово-покращеного ансамблевого класифікатора Singularity. За лаштунками вона використовує гібридний підхід для класичного навчання ансамблю класифікаторів на розміченому датасеті, а потім оптимізує його для максимальної різноманітності та узагальнення за допомогою Квантового апроксимаційного алгоритму оптимізації (QAOA) на QPU IBM®. Через зручний інтерфейс користувачі можуть налаштувати класифікатор відповідно до своїх вимог, навчити його на датасеті за власним вибором і використовувати для прогнозування на раніше невідомому датасеті.

Щоб вирішити загальну задачу класифікації:

  1. Попередньо обробити датасет і розділити його на навчальну та тестову вибірки. Необов'язково можна додатково розділити навчальну вибірку на навчальну та валідаційну. Це можна зробити за допомогою scikit-learn.
  2. Якщо навчальна вибірка незбалансована, ти можеш перевибрати її для балансування класів за допомогою imbalanced-learn.
  3. Завантажити навчальну, валідаційну та тестову вибірки окремо до сховища функції за допомогою методу file_upload каталогу, щоразу передаючи відповідний шлях.
  4. Ініціалізувати квантовий класифікатор за допомогою дії create функції, яка приймає гіперпараметри, такі як кількість та типи учнів, регуляризацію (значення лямбда), а також параметри оптимізації, включаючи кількість шарів, тип класичного оптимізатора, квантовий бекенд тощо.
  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Початкове значення тета — варіаційного параметра QAOAНіNone
simulatorbooleanЧи використовувати симулятор або QPUНіFalse
classical_optimizerstrНазва класичного оптимізатора для QAOA. Можна використовувати всі розв'язувачі, що пропонуються SciPy і перераховані тут. Потрібно відповідно налаштувати classical_optimizer_optionsНіCOBYLA
classical_optimizer_optionsdictionaryПараметри класичного оптимізатора. Для повного списку доступних параметрів зверніться до документації SciPyНі{"maxiter": 60}
optimization_levelintegerГлибина схеми QAOAНі3
num_transpiler_runsintegerКількість запусків транспілятораНі30
pass_manager_optionsdictionaryПараметри для генерації менеджера попередніх проходівНі{"approximation_degree": 1.0}
estimator_optionsdictionaryПараметри Estimator. Для повного списку доступних параметрів зверніться до документації Qiskit Runtime ClientНіNone
sampler_optionsdictionaryПараметри Sampler. Для повного списку доступних параметрів зверніться до документації Qiskit Runtime ClientНі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 Function таким чином:

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)

Бенчмарки

Ці бенчмарки показують, що класифікатор може досягати надзвичайно високої точності на складних задачах. Вони також демонструють, що збільшення кількості учнів в ансамблі (кількості кубітів) може призводити до підвищення точності.

"Класична точність" означає точність, отриману за допомогою відповідного класичного найкращого рішення, яким у цьому випадку є класифікатор AdaBoost на основі ансамблю розміром 75. "Квантова точність", натомість, означає точність, отриману за допомогою "Singularity Machine Learning - Classification".

ЗадачаРозмір набору данихРозмір ансамблюКількість кубітівКласична точністьКвантова точністьПокращення
Стабільність мережі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%

З розвитком і масштабуванням квантового апаратного забезпечення наслідки для нашого квантового класифікатора стають дедалі більш значущими. Хоча кількість кубітів справді накладає обмеження на розмір ансамблю, який можна використовувати, вона не обмежує обсяг даних, що можуть бути оброблені. Ця потужна можливість дозволяє класифікатору ефективно обробляти набори даних, що містять мільйони точок даних і тисячі ознак. Важливо зазначити, що обмеження, пов'язані з розміром ансамблю, можна вирішити шляхом реалізації великомасштабної версії класифікатора. Завдяки ітеративному підходу із зовнішнім циклом ансамбль можна динамічно розширювати, підвищуючи гнучкість і загальну продуктивність. Однак варто зауважити, що ця функція ще не реалізована в поточній версії класифікатора.

Журнал змін

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.

Обов'язково вкажи наступну інформацію:

  • ID задачі Qiskit Function (job.job_id)
  • Детальний опис проблеми
  • Будь-які відповідні повідомлення про помилки або коди
  • Кроки для відтворення проблеми

Наступні кроки