Singularity Machine Learning - Classification: Fungsi Qiskit oleh Multiverse Computing
- 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.
Ia dibina untuk:
- Jurutera dan saintis data di syarikat yang ingin meningkatkan tawaran teknologi mereka dengan mengintegrasikan pembelajaran mesin kuantum ke dalam produk dan perkhidmatan mereka,
- Penyelidik di makmal penyelidikan kuantum yang meneroka aplikasi pembelajaran mesin kuantum dan ingin memanfaatkan pengkomputeran kuantum untuk tugas klasifikasi, dan
- 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:
- 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.
- Jika set latihan tidak seimbang, anda boleh mengambil semula sampel untuk mengimbangi kelas menggunakan imbalanced-learn.
- Muat naik set latihan, pengesahan, dan pengujian secara berasingan ke storan fungsi menggunakan kaedah
file_uploadkatalog, dengan menghantar laluan yang berkaitan setiap kali. - Mulakan pengelas kuantum menggunakan tindakan
createfungsi, yang menerima hiperparameter seperti bilangan dan jenis pemelajar, penyelarasan (nilai lambda), dan pilihan pengoptimuman termasuk bilangan lapisan, jenis pengoptimum klasikal, Backend kuantum, dan sebagainya. - Latih pengelas kuantum pada set latihan menggunakan tindakan
fitfungsi, dengan menghantar set latihan berlabel, dan set pengesahan jika berkaitan. - Buat ramalan pada set ujian yang belum pernah dilihat sebelumnya menggunakan tindakan
predictfungsi.
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​
| Nama | Jenis | Penerangan | Diperlukan |
|---|---|---|---|
action | str | Nama 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.
Fungsi ini pada masa ini hanya menyokong QuantumEnhancedEnsembleClassifier.
Input​
| Nama | Jenis | Penerangan | Diperlukan | Lalai |
|---|---|---|---|---|
action | str | Nama tindakan daripada antara create, list, fit, predict, fit_predict, create_fit_predict dan delete. | Ya | - |
name | str | Nama pengelas kuantum, cth., spam_classifier. | Ya | - |
instance | str | Instance IBM. | Ya | - |
backend_name | str | Sumber pengiraan IBM. Lalainya ialah None, bermakna Backend dengan kerja tertunda paling sedikit akan digunakan. | Tidak | None |
quantum_classifier | str | Jenis pengelas kuantum, iaitu, QuantumEnhancedEnsembleClassifier. | Tidak | QuantumEnhancedEnsembleClassifier |
num_learners | integer | Bilangan pemelajar dalam ensemble. | Tidak | 10 |
learners_types | list | Jenis 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_proportions | list | Perkadaran setiap jenis pemelajar dalam ensemble. | Tidak | [1.0] |
learners_options | list | Pilihan 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_type | str atau list | Jenis 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. | Tidak | onsite |
regularization | str atau float atau list | Nilai 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. | Tidak | 0.01 |
regularization_desired_ratio | float atau list | Nisbah 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. | Tidak | 0.75 |
regularization_upper_bound | float atau list | Had atas untuk parameter penyelarasan apabila menggunakan auto-regularization. Jika senarai diberikan, model akan dilatih untuk setiap had atas dan yang berprestasi terbaik akan dipilih. | Tidak | 200 |
weight_update_method | str | Kaedah untuk mengemas kini pemberat sampel daripada antara logarithmic dan quadratic. | Tidak | logarithmic |
sample_scaling | boolean | Sama ada penskalaan sampel perlu digunakan. | Tidak | False |
prediction_scaling | float | Faktor penskalaan untuk ramalan. | Tidak | None |
optimizer_options | dictionary | Pilihan pengoptimum QAOA. Senarai pilihan yang tersedia dibentangkan kemudian dalam dokumentasi ini. | Tidak | ... |
voting | str | Gunakan pengundian majoriti (hard) atau purata kebarangkalian (soft) untuk mengagregat ramalan/kebarangkalian pemelajar. | Tidak | hard |
prob_threshold | float | Ambang kebarangkalian optimum. | Tidak | 0.5 |
random_state | integer | Kawal kerawakan untuk kebolehulangan. | Tidak | None |
- Selain itu,
optimizer_optionsdisenaraikan seperti berikut:
| Nama | Jenis | Penerangan | Diperlukan | Lalai |
|---|---|---|---|---|
num_solutions | integer | Bilangan penyelesaian | Tidak | 1024 |
reps | integer | Bilangan pengulangan | Tidak | 4 |
sparsify | float | Ambang sparsifikasi | Tidak | 0.001 |
theta | float | Nilai awal theta, parameter variatif QAOA | Tidak | None |
simulator | boolean | Sama ada menggunakan simulator atau QPU | Tidak | False |
classical_optimizer | str | Nama pengoptimum klasikal untuk QAOA. Semua penyelesai yang ditawarkan oleh SciPy, seperti yang disenaraikan di sini, boleh digunakan. Anda perlu menetapkan classical_optimizer_options dengan sewajarnya | Tidak | COBYLA |
classical_optimizer_options | dictionary | Pilihan pengoptimum klasikal. Untuk senarai lengkap pilihan yang tersedia, rujuk dokumentasi SciPy | Tidak | {"maxiter": 60} |
optimization_level | integer | Kedalaman Circuit QAOA | Tidak | 3 |
num_transpiler_runs | integer | Bilangan jalan Transpiler | Tidak | 30 |
pass_manager_options | dictionary | Pilihan untuk menjana pengurus laluan pratetap | Tidak | {"approximation_degree": 1.0} |
estimator_options | dictionary | Pilihan Estimator. Untuk senarai lengkap pilihan yang tersedia, rujuk dokumentasi Qiskit Runtime Client | Tidak | None |
sampler_options | dictionary | Pilihan Sampler. Untuk senarai lengkap pilihan yang tersedia, rujuk dokumentasi Qiskit Runtime Client | Tidak | None |
estimator_optionslalai adalah:
| Nama | Jenis | Nilai |
|---|---|---|
default_shots | integer | 1024 |
resilience_level | integer | 2 |
twirling | dictionary | {"enable_gates": True} |
dynamical_decoupling | dictionary | {"enable": True} |
resilience_options | dictionary | {"zne_mitigation": False, "zne": {"amplifier": "pea", "noise_factors": [1.0, 1.3, 1.6], "extrapolator": ["linear", "polynomial_degree_2", "exponential"],}} |
sampler_optionslalai adalah:
| Nama | Jenis | Nilai |
|---|---|---|
default_shots | integer | 1024 |
resilience_level | integer | 1 |
twirling | dictionary | {"enable_gates": True} |
dynamical_decoupling | dictionary | {"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​
| Nama | Jenis | Penerangan | Diperlukan |
|---|---|---|---|
action | str | Nama tindakan. Mestilah delete. | Ya |
name | str | Nama 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​
| Nama | Jenis | Penerangan | Diperlukan |
|---|---|---|---|
action | str | Nama tindakan. Mestilah fit. | Ya |
name | str | Nama pengelas yang hendak dilatih. | Ya |
X | array atau list atau str | Data latihan. Ini boleh berupa tatasusunan NumPy, senarai, atau rentetan yang merujuk nama fail dalam direktori data bersama. | Ya |
y | array atau list atau str | Nilai sasaran latihan. Ini boleh berupa tatasusunan NumPy, senarai, atau rentetan yang merujuk nama fail dalam direktori data bersama. | Ya |
fit_params | dictionary | Parameter tambahan untuk dihantar kepada kaedah fit pengelas. | Tidak |
fit_params​
| Nama | Jenis | Penerangan | Diperlukan | Lalai |
|---|---|---|---|---|
validation_data | tuple | Data pengesahan dan label. | Tidak | None |
pos_label | integer atau str | Label kelas yang akan dipetakan kepada 1. | Tidak | None |
optimization_data | str | Dataset untuk mengoptimumkan ensemble. Boleh salah satu daripada: train, validation, both. | Tidak | train |
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​
| Nama | Jenis | Penerangan | Diperlukan |
|---|---|---|---|
action | str | Nama tindakan. Mestilah predict. | Ya |
name | str | Nama pengelas yang hendak digunakan. | Ya |
X | array atau list atau str | Data ujian. Ini boleh berupa tatasusunan NumPy, senarai, atau rentetan yang merujuk nama fail dalam direktori data bersama. | Ya |
options["out"] | str | Nama 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​
| Nama | Jenis | Penerangan | Diperlukan |
|---|---|---|---|
action | str | Nama tindakan. Mestilah fit_predict. | Ya |
name | str | Nama pengelas yang hendak digunakan. | Ya |
X_train | array atau list atau str | Data latihan. Ini boleh berupa tatasusunan NumPy, senarai, atau rentetan yang merujuk nama fail dalam direktori data bersama. | Ya |
y_train | array atau list atau str | Nilai sasaran latihan. Ini boleh berupa tatasusunan NumPy, senarai, atau rentetan yang merujuk nama fail dalam direktori data bersama. | Ya |
X_test | array atau list atau str | Data ujian. Ini boleh berupa tatasusunan NumPy, senarai, atau rentetan yang merujuk nama fail dalam direktori data bersama. | Ya |
fit_params | dictionary | Parameter tambahan untuk dihantar kepada kaedah fit pengelas. | Tidak |
options["out"] | str | Nama 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​
| Nama | Jenis | Penerangan | Diperlukan |
|---|---|---|---|
action | str | Nama tindakan daripada antara create, list, fit, predict, fit_predict, create_fit_predict dan delete. | Ya |
name | str | Nama pengelas yang hendak digunakan. | Ya |
quantum_classifier | str | Jenis pengelas, iaitu, QuantumEnhancedEnsembleClassifier. Lalainya ialah QuantumEnhancedEnsembleClassifier. | Tidak |
X_train | array atau list atau str | Data latihan. Ini boleh berupa tatasusunan NumPy, senarai, atau rentetan yang merujuk nama fail dalam direktori data bersama. | Ya |
y_train | array atau list atau str | Nilai sasaran latihan. Ini boleh berupa tatasusunan NumPy, senarai, atau rentetan yang merujuk nama fail dalam direktori data bersama. | Ya |
X_test | array atau list atau str | Data ujian. Ini boleh berupa tatasusunan NumPy, senarai, atau rentetan yang merujuk nama fail dalam direktori data bersama. | Ya |
fit_params | dictionary | Parameter tambahan untuk dihantar kepada kaedah fit pengelas. | Tidak |
options["save"] | boolean | Sama ada menyimpan pengelas yang telah dilatih dalam direktori data bersama. Lalainya ialah True. | Tidak |
options["out"] | str | Nama 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 kepadaTrue:- 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.
- Jika
-
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.
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:
- Cipta dataset sintetik menggunakan fungsi make_moons daripada scikit-learn.
- Muat naik dataset sintetik yang dijana ke direktori data bersama.
- Cipta pengelas yang dipertingkatkan kuantum menggunakan tindakan create.
- Senaraikan pengelas anda menggunakan tindakan list.
- Latih pengelas pada data latihan menggunakan tindakan fit.
- Gunakan pengelas yang telah dilatih untuk membuat ramalan pada data ujian menggunakan tindakan predict.
- Hapuskan pengelas menggunakan tindakan delete.
- 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".
| Masalah | Saiz Dataset | Saiz Ensemble | Bilangan Qubit | Ketepatan Klasikal | Ketepatan Kuantum | Peningkatan |
|---|---|---|---|---|---|---|
| Kestabilan grid | 5000 contoh, 12 ciri | 55 | 55 | 76% | 91% | 15% |
| Kestabilan grid | 5000 contoh, 12 ciri | 65 | 65 | 76% | 92% | 16% |
| Kestabilan grid | 5000 contoh, 12 ciri | 75 | 75 | 76% | 94% | 18% |
| Kestabilan grid | 5000 contoh, 12 ciri | 85 | 85 | 76% | 94% | 18% |
| Kestabilan grid | 5000 contoh, 12 ciri | 100 | 100 | 76% | 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
QuantumEnhancedEnsembleClassifierdengan kemas kini berikut:- Menambah regularisasi onsite/alpha. Anda boleh menentukan
regularization_typesebagaionsiteataualpha - Menambah auto-regularization. Anda boleh menetapkan
regularizationkepadaautountuk menggunakan auto-regularization - Menambah parameter
optimization_datakepada kaedahfituntuk memilih data pengoptimuman untuk pengoptimuman kuantum. Anda boleh menggunakan salah satu daripada pilihan ini:train,validation, atauboth - Meningkatkan prestasi keseluruhan
- Menambah regularisasi onsite/alpha. Anda boleh menentukan
- 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