Langkau ke kandungan utama

Singularity Machine Learning - Classification: Fungsi Qiskit oleh Multiverse Computing

Nota
  • Fungsi Qiskit ialah ciri eksperimental yang hanya tersedia untuk pengguna Pelan Premium IBM Quantum®, Pelan Flex, dan Pelan On-Prem (melalui API Platform IBM Quantum). Ia berada dalam status pratonton dan tertakluk kepada perubahan.

Gambaran keseluruhan​

Dengan fungsi "Singularity Machine Learning - Classification", anda boleh menyelesaikan masalah pembelajaran mesin dunia sebenar pada perkakasan kuantum tanpa memerlukan kepakaran kuantum. Fungsi Aplikasi ini, berasaskan kaedah ensemble, adalah pengelas hibrid. Ia memanfaatkan kaedah klasikal seperti boosting, bagging, dan stacking untuk latihan ensemble awal. Seterusnya, algoritma kuantum seperti variational quantum eigensolver (VQE) dan quantum approximate optimization algorithm (QAOA) digunakan untuk meningkatkan kepelbagaian, keupayaan generalisasi, dan kerumitan keseluruhan ensemble yang telah dilatih.

Tidak seperti penyelesaian pembelajaran mesin kuantum yang lain, fungsi ini mampu mengendalikan dataset berskala besar dengan jutaan contoh dan ciri tanpa terhad oleh bilangan Qubit dalam QPU sasaran. Bilangan Qubit hanya menentukan saiz ensemble yang boleh dilatih. Ia juga sangat fleksibel, dan boleh digunakan untuk menyelesaikan masalah klasifikasi merentasi pelbagai domain, termasuk kewangan, penjagaan kesihatan, dan keselamatan siber. Ia secara konsisten mencapai ketepatan tinggi pada masalah yang mencabar secara klasikal yang melibatkan dataset berdimensi tinggi, berderau, dan tidak seimbang. Cara ia berfungsi Ia dibina untuk:

  1. Jurutera dan saintis data di syarikat yang ingin meningkatkan tawaran teknologi mereka dengan mengintegrasikan pembelajaran mesin kuantum ke dalam produk dan perkhidmatan mereka,
  2. Penyelidik di makmal penyelidikan kuantum yang meneroka aplikasi pembelajaran mesin kuantum dan ingin memanfaatkan pengkomputeran kuantum untuk tugas klasifikasi, dan
  3. Pelajar dan guru di institusi pendidikan dalam kursus seperti pembelajaran mesin, yang ingin menunjukkan kelebihan pengkomputeran kuantum.

Contoh berikut memperlihatkan pelbagai fungsinya, termasuk create, list, fit, dan predict, serta menunjukkan penggunaannya dalam masalah sintetik yang terdiri daripada dua separuh bulatan yang saling bersilang, masalah yang terkenal mencabar kerana sempadan keputusannya yang tidak linear.

Penerangan fungsi​

Fungsi Qiskit ini membolehkan pengguna menyelesaikan masalah klasifikasi binari menggunakan pengelas ensemble yang dipertingkatkan dengan kuantum dari Singularity. Di sebalik tabir, ia menggunakan pendekatan hibrid untuk melatih ensemble pengelas secara klasikal pada dataset berlabel, kemudian mengoptimumkannya untuk kepelbagaian dan generalisasi maksimum menggunakan Quantum Approximate Optimization Algorithm (QAOA) pada QPU IBM®. Melalui antara muka yang mesra pengguna, pengguna boleh mengkonfigurasi pengelas mengikut keperluan mereka, melatihnya pada dataset pilihan mereka, dan menggunakannya untuk membuat ramalan pada dataset yang belum pernah dilihat sebelumnya.

Untuk menyelesaikan masalah klasifikasi umum:

  1. Pra-proses dataset, dan bahagikannya kepada set latihan dan set pengujian. Secara pilihan, anda boleh membahagikan lagi set latihan kepada set latihan dan pengesahan. Ini boleh dicapai menggunakan scikit-learn.
  2. Jika set latihan tidak seimbang, anda boleh mengambil semula sampel untuk mengimbangi kelas menggunakan imbalanced-learn.
  3. Muat naik set latihan, pengesahan, dan pengujian secara berasingan ke storan fungsi menggunakan kaedah file_upload katalog, dengan menghantar laluan yang berkaitan setiap kali.
  4. Mulakan pengelas kuantum menggunakan tindakan create fungsi, yang menerima hiperparameter seperti bilangan dan jenis pemelajar, penyelarasan (nilai lambda), dan pilihan pengoptimuman termasuk bilangan lapisan, jenis pengoptimum klasikal, Backend kuantum, dan sebagainya.
  5. Latih pengelas kuantum pada set latihan menggunakan tindakan fit fungsi, dengan menghantar set latihan berlabel, dan set pengesahan jika berkaitan.
  6. Buat ramalan pada set ujian yang belum pernah dilihat sebelumnya menggunakan tindakan predict fungsi.

Pendekatan berasaskan tindakan​

Fungsi ini menggunakan pendekatan berasaskan tindakan. Anda boleh menganggapnya sebagai persekitaran maya di mana anda menggunakan tindakan untuk melaksanakan tugas atau mengubah keadaannya. Pada masa ini, ia menawarkan tindakan-tindakan berikut: list, create, delete, fit, predict, fit_predict, dan create_fit_predict. Contoh berikut menunjukkan tindakan 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​

Tindakan list mendapatkan semua pengelas yang tersimpan dalam format *.pkl.tar daripada direktori data bersama. Anda juga boleh mengakses kandungan direktori ini dengan menggunakan kaedah catalog.files(). Secara umum, tindakan list mencari fail dengan sambungan *.pkl.tar dalam direktori data bersama dan mengembalikannya dalam format senarai.

Input​

NamaJenisPeneranganDiperlukan
actionstrNama tindakan daripada antara create, list, fit, predict, fit_predict, create_fit_predict dan delete.Ya

Penggunaan​

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

2. Create​

Tindakan create mencipta pengelas jenis quantum_classifier yang ditentukan menggunakan parameter yang diberikan, dan menyimpannya dalam direktori data bersama.

nota

Fungsi ini pada masa ini hanya menyokong QuantumEnhancedEnsembleClassifier.

Input​

NamaJenisPeneranganDiperlukanLalai
actionstrNama tindakan daripada antara create, list, fit, predict, fit_predict, create_fit_predict dan delete.Ya-
namestrNama pengelas kuantum, cth., spam_classifier.Ya-
instancestrInstance IBM.Ya-
backend_namestrSumber pengiraan IBM. Lalainya ialah None, bermakna Backend dengan kerja tertunda paling sedikit akan digunakan.TidakNone
quantum_classifierstrJenis pengelas kuantum, iaitu, QuantumEnhancedEnsembleClassifier.TidakQuantumEnhancedEnsembleClassifier
num_learnersintegerBilangan pemelajar dalam ensemble.Tidak10
learners_typeslistJenis pemelajar. Antara jenis yang disokong ialah: DecisionTreeClassifier, GaussianNB, KNeighborsClassifier, MLPClassifier, dan LogisticRegression. Butiran lanjut berkaitan setiap satu boleh didapati dalam dokumentasi scikit-learn.Tidak[DecisionTreeClassifier]
learners_proportionslistPerkadaran setiap jenis pemelajar dalam ensemble.Tidak[1.0]
learners_optionslistPilihan untuk setiap jenis pemelajar dalam ensemble. Untuk senarai lengkap pilihan yang berkaitan dengan jenis pemelajar yang dipilih, rujuk dokumentasi scikit-learn.Tidak[{"max_depth": 3, "splitter": "random", "class_weight": None}]
regularization_typestr atau listJenis penyelarasan yang akan digunakan: onsite atau alpha. onsite mengawal penggal onsite di mana nilai yang lebih tinggi menghasilkan ensemble yang lebih jarang. alpha mengawal pertukaran antara penggal interaksi dan onsite di mana nilai yang lebih rendah menghasilkan ensemble yang lebih jarang. Jika senarai diberikan, model akan dilatih untuk setiap jenis dan yang berprestasi terbaik akan dipilih.Tidakonsite
regularizationstr atau float atau listNilai penyelarasan. Terhad antara 0 dan +inf jika regularization_type ialah onsite. Terhad antara 0 dan 1 jika regularization_type ialah alpha. Jika ditetapkan kepada auto, auto-regularization digunakan — parameter penyelarasan optimum dicari melalui carian binari dengan nisbah pengelas terpilih kepada jumlah pengelas yang dikehendaki (regularization_desired_ratio) dan had atas untuk parameter penyelarasan (regularization_upper_bound). Jika senarai diberikan, model akan dilatih untuk setiap nilai dan yang berprestasi terbaik akan dipilih.Tidak0.01
regularization_desired_ratiofloat atau listNisbah yang dikehendaki bagi pengelas terpilih kepada jumlah pengelas untuk auto-regularization. Jika senarai diberikan, model akan dilatih untuk setiap nisbah dan yang berprestasi terbaik akan dipilih.Tidak0.75
regularization_upper_boundfloat atau listHad atas untuk parameter penyelarasan apabila menggunakan auto-regularization. Jika senarai diberikan, model akan dilatih untuk setiap had atas dan yang berprestasi terbaik akan dipilih.Tidak200
weight_update_methodstrKaedah untuk mengemas kini pemberat sampel daripada antara logarithmic dan quadratic.Tidaklogarithmic
sample_scalingbooleanSama ada penskalaan sampel perlu digunakan.TidakFalse
prediction_scalingfloatFaktor penskalaan untuk ramalan.TidakNone
optimizer_optionsdictionaryPilihan pengoptimum QAOA. Senarai pilihan yang tersedia dibentangkan kemudian dalam dokumentasi ini.Tidak...
votingstrGunakan pengundian majoriti (hard) atau purata kebarangkalian (soft) untuk mengagregat ramalan/kebarangkalian pemelajar.Tidakhard
prob_thresholdfloatAmbang kebarangkalian optimum.Tidak0.5
random_stateintegerKawal kerawakan untuk kebolehulangan.TidakNone
  • Selain itu, optimizer_options disenaraikan seperti berikut:
NamaJenisPeneranganDiperlukanLalai
num_solutionsintegerBilangan penyelesaianTidak1024
repsintegerBilangan pengulanganTidak4
sparsifyfloatAmbang sparsifikasiTidak0.001
thetafloatNilai awal theta, parameter variatif QAOATidakNone
simulatorbooleanSama ada menggunakan simulator atau QPUTidakFalse
classical_optimizerstrNama pengoptimum klasikal untuk QAOA. Semua penyelesai yang ditawarkan oleh SciPy, seperti yang disenaraikan di sini, boleh digunakan. Anda perlu menetapkan classical_optimizer_options dengan sewajarnyaTidakCOBYLA
classical_optimizer_optionsdictionaryPilihan pengoptimum klasikal. Untuk senarai lengkap pilihan yang tersedia, rujuk dokumentasi SciPyTidak{"maxiter": 60}
optimization_levelintegerKedalaman Circuit QAOATidak3
num_transpiler_runsintegerBilangan jalan TranspilerTidak30
pass_manager_optionsdictionaryPilihan untuk menjana pengurus laluan pratetapTidak{"approximation_degree": 1.0}
estimator_optionsdictionaryPilihan Estimator. Untuk senarai lengkap pilihan yang tersedia, rujuk dokumentasi Qiskit Runtime ClientTidakNone
sampler_optionsdictionaryPilihan Sampler. Untuk senarai lengkap pilihan yang tersedia, rujuk dokumentasi Qiskit Runtime ClientTidakNone
  • estimator_options lalai adalah:
NamaJenisNilai
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 lalai adalah:
NamaJenisNilai
default_shotsinteger1024
resilience_levelinteger1
twirlingdictionary{"enable_gates": True}
dynamical_decouplingdictionary{"enable": True}

Penggunaan​

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},
)

Pengesahan​

  • name:
    • Nama mestilah unik, rentetan sehingga 64 aksara.
    • Ia hanya boleh mengandungi aksara alfanumerik dan garis bawah.
    • Ia mesti bermula dengan huruf dan tidak boleh berakhir dengan garis bawah.
    • Tiada pengelas dengan nama yang sama sepatutnya sudah wujud dalam direktori data bersama.

3. Delete​

Tindakan delete mengalih keluar pengelas daripada direktori data bersama.

Input​

NamaJenisPeneranganDiperlukan
actionstrNama tindakan. Mestilah delete.Ya
namestrNama pengelas yang hendak dihapuskan.Ya

Penggunaan​

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

Pengesahan​

  • name:
    • Nama mestilah unik, rentetan sehingga 64 aksara.
    • Ia hanya boleh mengandungi aksara alfanumerik dan garis bawah.
    • Ia mesti bermula dengan huruf dan tidak boleh berakhir dengan garis bawah.
    • Pengelas dengan nama yang sama sepatutnya sudah wujud dalam direktori data bersama.

4. Fit​

Tindakan fit melatih pengelas menggunakan data latihan yang diberikan.

Input​

NamaJenisPeneranganDiperlukan
actionstrNama tindakan. Mestilah fit.Ya
namestrNama pengelas yang hendak dilatih.Ya
Xarray atau list atau strData latihan. Ini boleh berupa tatasusunan NumPy, senarai, atau rentetan yang merujuk nama fail dalam direktori data bersama.Ya
yarray atau list atau strNilai sasaran latihan. Ini boleh berupa tatasusunan NumPy, senarai, atau rentetan yang merujuk nama fail dalam direktori data bersama.Ya
fit_paramsdictionaryParameter tambahan untuk dihantar kepada kaedah fit pengelas.Tidak
fit_params​
NamaJenisPeneranganDiperlukanLalai
validation_datatupleData pengesahan dan label.TidakNone
pos_labelinteger atau strLabel kelas yang akan dipetakan kepada 1.TidakNone
optimization_datastrDataset untuk mengoptimumkan ensemble. Boleh salah satu daripada: train, validation, both.Tidaktrain

Penggunaan​

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
)

Pengesahan​

  • name:
    • Nama mestilah unik, rentetan sehingga 64 aksara.
    • Ia hanya boleh mengandungi aksara alfanumerik dan garis bawah.
    • Ia mesti bermula dengan huruf dan tidak boleh berakhir dengan garis bawah.
    • Pengelas dengan nama yang sama sepatutnya sudah wujud dalam direktori data bersama.

5. Predict​

Tindakan predict digunakan untuk mendapatkan ramalan keras dan lembut (kebarangkalian).

Input​

NamaJenisPeneranganDiperlukan
actionstrNama tindakan. Mestilah predict.Ya
namestrNama pengelas yang hendak digunakan.Ya
Xarray atau list atau strData ujian. Ini boleh berupa tatasusunan NumPy, senarai, atau rentetan yang merujuk nama fail dalam direktori data bersama.Ya
options["out"]strNama fail JSON output untuk menyimpan ramalan dalam direktori data bersama. Jika tidak diberikan, ramalan dikembalikan dalam hasil kerja.Tidak

Penggunaan​

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",
},
)

Pengesahan​

  • name:
    • Nama mestilah unik, rentetan sehingga 64 aksara.
    • Ia hanya boleh mengandungi aksara alfanumerik dan garis bawah.
    • Ia mesti bermula dengan huruf dan tidak boleh berakhir dengan garis bawah.
    • Pengelas dengan nama yang sama sepatutnya sudah wujud dalam direktori data bersama.
  • options["out"]:
    • Nama fail mestilah unik, rentetan sehingga 64 aksara.
    • Ia hanya boleh mengandungi aksara alfanumerik dan garis bawah.
    • Ia mesti bermula dengan huruf dan tidak boleh berakhir dengan garis bawah.
    • Ia mesti mempunyai sambungan .json.

6. Fit-predict​

Tindakan fit_predict melatih pengelas menggunakan data latihan kemudian menggunakannya untuk mendapatkan ramalan keras dan lembut (kebarangkalian).

Input​

NamaJenisPeneranganDiperlukan
actionstrNama tindakan. Mestilah fit_predict.Ya
namestrNama pengelas yang hendak digunakan.Ya
X_trainarray atau list atau strData latihan. Ini boleh berupa tatasusunan NumPy, senarai, atau rentetan yang merujuk nama fail dalam direktori data bersama.Ya
y_trainarray atau list atau strNilai sasaran latihan. Ini boleh berupa tatasusunan NumPy, senarai, atau rentetan yang merujuk nama fail dalam direktori data bersama.Ya
X_testarray atau list atau strData ujian. Ini boleh berupa tatasusunan NumPy, senarai, atau rentetan yang merujuk nama fail dalam direktori data bersama.Ya
fit_paramsdictionaryParameter tambahan untuk dihantar kepada kaedah fit pengelas.Tidak
options["out"]strNama fail JSON output untuk menyimpan ramalan dalam direktori data bersama. Jika tidak diberikan, ramalan dikembalikan dalam hasil kerja.Tidak

Penggunaan​

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",
},
)

Pengesahan​

  • name:

    • Nama mestilah unik, rentetan sehingga 64 aksara.
    • Ia hanya boleh mengandungi aksara alfanumerik dan garis bawah.
    • Ia mesti bermula dengan huruf dan tidak boleh berakhir dengan garis bawah.
    • Pengelas dengan nama yang sama sepatutnya sudah wujud dalam direktori data bersama.
  • options["out"]:

    • Nama fail mestilah unik, rentetan sehingga 64 aksara.
    • Ia hanya boleh mengandungi aksara alfanumerik dan garis bawah.
    • Ia mesti bermula dengan huruf dan tidak boleh berakhir dengan garis bawah.
    • Ia mesti mempunyai sambungan .json.

7. Create-fit-predict​

Tindakan create_fit_predict mencipta pengelas, melatihnya menggunakan data latihan yang diberikan, kemudian menggunakannya untuk mendapatkan ramalan keras dan lembut (kebarangkalian).

Input​

NamaJenisPeneranganDiperlukan
actionstrNama tindakan daripada antara create, list, fit, predict, fit_predict, create_fit_predict dan delete.Ya
namestrNama pengelas yang hendak digunakan.Ya
quantum_classifierstrJenis pengelas, iaitu, QuantumEnhancedEnsembleClassifier. Lalainya ialah QuantumEnhancedEnsembleClassifier.Tidak
X_trainarray atau list atau strData latihan. Ini boleh berupa tatasusunan NumPy, senarai, atau rentetan yang merujuk nama fail dalam direktori data bersama.Ya
y_trainarray atau list atau strNilai sasaran latihan. Ini boleh berupa tatasusunan NumPy, senarai, atau rentetan yang merujuk nama fail dalam direktori data bersama.Ya
X_testarray atau list atau strData ujian. Ini boleh berupa tatasusunan NumPy, senarai, atau rentetan yang merujuk nama fail dalam direktori data bersama.Ya
fit_paramsdictionaryParameter tambahan untuk dihantar kepada kaedah fit pengelas.Tidak
options["save"]booleanSama ada menyimpan pengelas yang telah dilatih dalam direktori data bersama. Lalainya ialah True.Tidak
options["out"]strNama fail JSON output untuk menyimpan ramalan dalam direktori data bersama. Jika tidak diberikan, ramalan dikembalikan dalam hasil kerja.Tidak

Penggunaan​

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",
},
)

Pengesahan​

  • name:

    • Jika options["save"] ditetapkan kepada True:
      • Nama mestilah unik, rentetan sehingga 64 aksara.
      • Ia hanya boleh mengandungi aksara alfanumerik dan garis bawah.
      • Ia mesti bermula dengan huruf dan tidak boleh berakhir dengan garis bawah.
      • Tiada pengelas dengan nama yang sama sepatutnya sudah wujud dalam direktori data bersama.
  • options["out"]:

    • Nama fail mestilah unik, rentetan sehingga 64 aksara.
    • Ia hanya boleh mengandungi aksara alfanumerik dan garis bawah.
    • Ia mesti bermula dengan huruf dan tidak boleh berakhir dengan garis bawah.
    • Ia mesti mempunyai sambungan .json.

Mulakan​

Sahkan diri menggunakan kunci API Platform IBM Quantum anda, dan pilih Fungsi Qiskit seperti berikut:

from qiskit_ibm_catalog import QiskitFunctionsCatalog

catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")

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

Contoh​

Dalam contoh ini, anda akan menggunakan fungsi "Singularity Machine Learning - Classification" untuk mengklasifikasikan dataset yang terdiri daripada dua separuh bulatan berbentuk bulan yang saling bersilang. Dataset ini adalah sintetik, dua dimensi, dan dilabelkan dengan label binari. Ia dicipta untuk mencabar algoritma seperti pengelompokan berasaskan centroid dan klasifikasi linear. Dataset Moons Melalui proses ini, anda akan belajar cara mencipta pengelas, memasangkannya pada data latihan, menggunakannya untuk membuat ramalan pada data ujian, dan menghapus pengelas apabila selesai. Sebelum memulakan, anda perlu memasang scikit-learn. Pasangnya menggunakan arahan berikut:

python3 -m pip install scikit-learn

Laksanakan langkah-langkah berikut:

  1. Cipta dataset sintetik menggunakan fungsi make_moons daripada scikit-learn.
  2. Muat naik dataset sintetik yang dijana ke direktori data bersama.
  3. Cipta pengelas yang dipertingkatkan kuantum menggunakan tindakan create.
  4. Senaraikan pengelas anda menggunakan tindakan list.
  5. Latih pengelas pada data latihan menggunakan tindakan fit.
  6. Gunakan pengelas yang telah dilatih untuk membuat ramalan pada data ujian menggunakan tindakan predict.
  7. Hapuskan pengelas menggunakan tindakan delete.
  8. Bersihkan setelah selesai. Langkah 1. Import modul yang diperlukan dan jana dataset sintetik, kemudian bahagikannya kepada dataset latihan dan ujian.
# 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]

Langkah 2. Simpan dataset latihan dan ujian berlabel pada cakera tempatan anda, kemudian muat naiknya ke direktori data bersama.

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']

Langkah 3. Cipta pengelas yang dipertingkatkan kuantum menggunakan tindakan 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']

Langkah 4. Latih pengelas yang dipertingkatkan kuantum menggunakan tindakan 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}}}}

Langkah 5. Dapatkan ramalan dan kebarangkalian daripada pengelas yang dipertingkatkan kuantum menggunakan tindakan 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]]

Langkah 6. Hapuskan pengelas yang dipertingkatkan kuantum menggunakan tindakan 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': {}}}

Langkah 7. Bersihkan direktori data tempatan dan bersama.

# 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)

Penanda aras​

Penanda aras ini menunjukkan bahawa pengelas boleh mencapai ketepatan yang sangat tinggi pada masalah yang mencabar. Ia juga menunjukkan bahawa meningkatkan bilangan pemelajar dalam ensemble (bilangan Qubit) boleh membawa kepada peningkatan ketepatan.

"Ketepatan klasikal" merujuk kepada ketepatan yang diperoleh menggunakan keadaan seni klasikal yang berkaitan yang, dalam kes ini, adalah pengelas AdaBoost berasaskan ensemble bersaiz 75. "Ketepatan kuantum", sebaliknya, merujuk kepada ketepatan yang diperoleh menggunakan "Singularity Machine Learning - Classification".

MasalahSaiz DatasetSaiz EnsembleBilangan QubitKetepatan KlasikalKetepatan KuantumPeningkatan
Kestabilan grid5000 contoh, 12 ciri555576%91%15%
Kestabilan grid5000 contoh, 12 ciri656576%92%16%
Kestabilan grid5000 contoh, 12 ciri757576%94%18%
Kestabilan grid5000 contoh, 12 ciri858576%94%18%
Kestabilan grid5000 contoh, 12 ciri10010076%95%19%

Apabila perkakasan kuantum berkembang dan berskala, implikasinya terhadap pengelas kuantum kami menjadi semakin ketara. Walaupun bilangan Qubit memang mengenakan had pada saiz ensemble yang boleh digunakan, ia tidak menyekat jumlah data yang boleh diproses. Keupayaan yang hebat ini membolehkan pengelas mengendalikan dataset yang mengandungi jutaan titik data dan ribuan ciri dengan cekap. Yang penting, kekangan berkaitan saiz ensemble boleh diatasi melalui pelaksanaan versi berskala besar pengelas. Dengan memanfaatkan pendekatan gelung luar berulang, ensemble boleh dikembangkan secara dinamik, meningkatkan fleksibiliti dan prestasi keseluruhan. Walau bagaimanapun, perlu diambil perhatian bahawa ciri ini belum lagi dilaksanakan dalam versi pengelas semasa.

Log perubahan​

4 Jun 2025​

  • Menaik taraf QuantumEnhancedEnsembleClassifier dengan kemas kini berikut:
    • Menambah regularisasi onsite/alpha. Anda boleh menentukan regularization_type sebagai onsite atau alpha
    • Menambah auto-regularization. Anda boleh menetapkan regularization kepada auto untuk menggunakan auto-regularization
    • Menambah parameter optimization_data kepada kaedah fit untuk memilih data pengoptimuman untuk pengoptimuman kuantum. Anda boleh menggunakan salah satu daripada pilihan ini: train, validation, atau both
    • Meningkatkan prestasi keseluruhan
  • Menambah penjejakan status terperinci untuk kerja yang sedang berjalan

20 Mei 2025​

  • Menstandarkan pengendalian ralat

18 Mac 2025​

  • Menaik taraf qiskit-serverless kepada 0.20.0 dan imej asas kepada 0.20.1

14 Februari 2025​

  • Menaik taraf imej asas kepada 0.19.1

6 Februari 2025​

  • Menaik taraf qiskit-serverless kepada 0.19.0 dan imej asas kepada 0.19.0

13 November 2024​

  • Pelancaran Singularity Machine Learning - Classification

Dapatkan sokongan​

Untuk sebarang pertanyaan, hubungi Multiverse Computing.

Pastikan anda menyertakan maklumat berikut:

  • ID Kerja Fungsi Qiskit (job.job_id)
  • Penerangan terperinci tentang isu tersebut
  • Sebarang mesej atau kod ralat yang berkaitan
  • Langkah-langkah untuk menghasilkan semula isu

Langkah seterusnya​