Singularity Machine Learning - Klasifikasi: Sebuah Qiskit Function oleh Multiverse Computing
- Qiskit Functions adalah fitur eksperimental yang hanya tersedia untuk pengguna IBM Quantum® Premium Plan, Flex Plan, dan On-Prem (melalui IBM Quantum Platform API) Plan. Fitur ini masih dalam status rilis pratinjau dan dapat berubah sewaktu-waktu.
Ikhtisar​
Dengan fungsi "Singularity Machine Learning - Klasifikasi", kamu bisa memecahkan masalah machine learning di dunia nyata menggunakan hardware kuantum tanpa perlu keahlian kuantum. Application function ini, yang didasarkan pada metode ensemble, adalah classifier hybrid. Fungsi ini memanfaatkan metode klasik seperti boosting, bagging, dan stacking untuk pelatihan ensemble awal. Selanjutnya, algoritma kuantum seperti variational quantum eigensolver (VQE) dan quantum approximate optimization algorithm (QAOA) digunakan untuk meningkatkan keberagaman, kemampuan generalisasi, dan kompleksitas keseluruhan ensemble yang telah dilatih.
Tidak seperti solusi quantum machine learning lainnya, fungsi ini mampu menangani dataset berskala besar dengan jutaan contoh dan fitur tanpa dibatasi oleh jumlah qubit pada QPU target. Jumlah qubit hanya menentukan ukuran ensemble yang dapat dilatih. Fungsi ini juga sangat fleksibel dan dapat digunakan untuk memecahkan masalah klasifikasi di berbagai domain, termasuk keuangan, kesehatan, dan keamanan siber.
Fungsi ini secara konsisten mencapai akurasi tinggi pada masalah yang sulit secara klasik, melibatkan dataset berdimensi tinggi, berisik, dan tidak seimbang.
Fungsi ini dibuat untuk:
- Para engineer dan ilmuwan data di perusahaan yang ingin meningkatkan penawaran teknologi mereka dengan mengintegrasikan quantum machine learning ke dalam produk dan layanan mereka,
- Para peneliti di laboratorium riset kuantum yang mengeksplorasi aplikasi quantum machine learning dan ingin memanfaatkan komputasi kuantum untuk tugas klasifikasi, serta
- Mahasiswa dan pengajar di institusi pendidikan dalam mata kuliah seperti machine learning, yang ingin mendemonstrasikan keunggulan komputasi kuantum.
Contoh berikut menampilkan berbagai fungsinya, termasuk create, list, fit, dan predict, serta mendemonstrasikan penggunaannya pada masalah sintetis yang terdiri dari dua setengah lingkaran yang saling bersilangan — sebuah masalah yang terkenal sulit karena batas keputusannya yang nonlinier.
Deskripsi fungsi​
Qiskit Function ini memungkinkan pengguna memecahkan masalah klasifikasi biner menggunakan classifier ensemble yang ditingkatkan kuantum dari Singularity. Di balik layar, fungsi ini menggunakan pendekatan hybrid untuk melatih ensemble classifier secara klasik pada dataset berlabel, lalu mengoptimalkannya untuk keberagaman dan generalisasi maksimal menggunakan Quantum Approximate Optimization Algorithm (QAOA) pada QPU IBM®. Melalui antarmuka yang ramah pengguna, pengguna dapat mengonfigurasi classifier sesuai kebutuhan mereka, melatihnya pada dataset pilihan, dan menggunakannya untuk membuat prediksi pada dataset yang belum pernah dilihat sebelumnya.
Untuk memecahkan masalah klasifikasi umum:
- Praproses dataset, lalu bagi menjadi set pelatihan dan pengujian. Secara opsional, kamu bisa membagi lebih lanjut set pelatihan menjadi set pelatihan dan validasi. Hal ini dapat dilakukan menggunakan scikit-learn.
- Jika set pelatihan tidak seimbang, kamu bisa melakukan resampling untuk menyeimbangkan kelas menggunakan imbalanced-learn.
- Unggah set pelatihan, validasi, dan pengujian secara terpisah ke penyimpanan fungsi menggunakan metode
file_uploaddari catalog, dengan meneruskan path yang relevan setiap kali. - Inisialisasi classifier kuantum menggunakan aksi
createdari fungsi, yang menerima hyperparameter seperti jumlah dan jenis learner, regularisasi (nilai lambda), serta opsi optimasi termasuk jumlah lapisan, jenis classical optimizer, quantum Backend, dan sebagainya. - Latih classifier kuantum pada set pelatihan menggunakan aksi
fitdari fungsi, dengan meneruskan set pelatihan berlabel, dan set validasi jika ada. - Buat prediksi pada set pengujian yang belum pernah dilihat menggunakan aksi
predictdari fungsi.
Pendekatan berbasis aksi​
Fungsi ini menggunakan pendekatan berbasis aksi. Kamu bisa membayangkannya sebagai lingkungan virtual di mana kamu menggunakan aksi untuk melakukan tugas atau mengubah statusnya. Saat ini, fungsi ini menawarkan aksi-aksi berikut: list, create, delete, fit, predict, fit_predict, dan create_fit_predict. Contoh berikut mendemonstrasikan aksi 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​
Aksi list mengambil semua classifier yang tersimpan dalam format *.pkl.tar dari direktori data bersama. Kamu juga bisa mengakses isi direktori ini menggunakan metode catalog.files(). Secara umum, aksi list mencari file dengan ekstensi *.pkl.tar di direktori data bersama dan mengembalikannya dalam format list.
Masukan​
| Nama | Tipe | Deskripsi | Wajib |
|---|---|---|---|
action | str | Nama aksi dari antara create, list, fit, predict, fit_predict, create_fit_predict, dan delete. | Ya |
Penggunaan​
job = singularity.run(action="list")
2. Create​
Aksi create membuat classifier dengan tipe quantum_classifier yang ditentukan menggunakan parameter yang diberikan, dan menyimpannya di direktori data bersama.
Fungsi ini saat ini hanya mendukung QuantumEnhancedEnsembleClassifier.
Masukan​
| Nama | Tipe | Deskripsi | Wajib | Default |
|---|---|---|---|---|
action | str | Nama aksi dari antara create, list, fit, predict, fit_predict, create_fit_predict, dan delete. | Ya | - |
name | str | Nama classifier kuantum, misalnya spam_classifier. | Ya | - |
instance | str | Instance IBM. | Ya | - |
backend_name | str | Sumber daya komputasi IBM. Default-nya adalah None, yang berarti Backend dengan pekerjaan pending paling sedikit yang akan digunakan. | Tidak | None |
quantum_classifier | str | Tipe classifier kuantum, yaitu QuantumEnhancedEnsembleClassifier. | Tidak | QuantumEnhancedEnsembleClassifier |
num_learners | integer | Jumlah learner dalam ensemble. | Tidak | 10 |
learners_types | list | Tipe-tipe learner. Di antara tipe yang didukung: DecisionTreeClassifier, GaussianNB, KNeighborsClassifier, MLPClassifier, dan LogisticRegression. Detail lebih lanjut terkait masing-masing dapat ditemukan di dokumentasi scikit-learn. | Tidak | [DecisionTreeClassifier] |
learners_proportions | list | Proporsi setiap tipe learner dalam ensemble. | Tidak | [1.0] |
learners_options | list | Opsi untuk setiap tipe learner dalam ensemble. Untuk daftar lengkap opsi yang sesuai dengan tipe learner yang dipilih, lihat dokumentasi scikit-learn. | Tidak | [{"max_depth": 3, "splitter": "random", "class_weight": None}] |
regularization_type | str atau list | Tipe regularisasi yang digunakan: onsite atau alpha. onsite mengontrol suku onsite di mana nilai yang lebih tinggi menghasilkan ensemble yang lebih sparse. alpha mengontrol trade-off antara suku interaksi dan onsite di mana nilai yang lebih rendah menghasilkan ensemble yang lebih sparse. Jika list diberikan, model akan dilatih untuk setiap tipe dan yang berkinerja terbaik akan dipilih. | Tidak | onsite |
regularization | str atau float atau list | Nilai regularisasi. Dibatasi antara 0 dan +inf jika regularization_type adalah onsite. Dibatasi antara 0 dan 1 jika regularization_type adalah alpha. Jika diatur ke auto, regularisasi otomatis digunakan — parameter regularisasi optimal ditemukan melalui binary search dengan rasio classifier yang dipilih terhadap total classifier yang diinginkan (regularization_desired_ratio) dan batas atas parameter regularisasi (regularization_upper_bound). Jika list diberikan, model akan dilatih untuk setiap nilai dan yang berkinerja terbaik akan dipilih. | Tidak | 0.01 |
regularization_desired_ratio | float atau list | Rasio yang diinginkan dari classifier yang dipilih terhadap total classifier untuk regularisasi otomatis. Jika list diberikan, model akan dilatih untuk setiap rasio dan yang berkinerja terbaik akan dipilih. | Tidak | 0.75 |
regularization_upper_bound | float atau list | Batas atas parameter regularisasi saat menggunakan regularisasi otomatis. Jika list diberikan, model akan dilatih untuk setiap batas atas dan yang berkinerja terbaik akan dipilih. | Tidak | 200 |
weight_update_method | str | Metode pembaruan bobot sampel dari antara logarithmic dan quadratic. | Tidak | logarithmic |
sample_scaling | boolean | Apakah penskalaan sampel harus diterapkan. | Tidak | False |
prediction_scaling | float | Faktor penskalaan untuk prediksi. | Tidak | None |
optimizer_options | dictionary | Opsi optimizer QAOA. Daftar opsi yang tersedia disajikan kemudian dalam dokumentasi ini. | Tidak | ... |
voting | str | Gunakan majority voting (hard) atau rata-rata probabilitas (soft) untuk mengagregasi prediksi/probabilitas learner. | Tidak | hard |
prob_threshold | float | Ambang batas probabilitas optimal. | Tidak | 0.5 |
random_state | integer | Kendalikan keacakan untuk keterproduksian. | Tidak | None |
- Selain itu,
optimizer_optionsdirinci sebagai berikut:
| Nama | Tipe | Deskripsi | Wajib | Default |
|---|---|---|---|---|
num_solutions | integer | Jumlah solusi | Tidak | 1024 |
reps | integer | Jumlah pengulangan | Tidak | 4 |
sparsify | float | Ambang batas sparsification | Tidak | 0.001 |
theta | float | Nilai awal theta, parameter variasional QAOA | Tidak | None |
simulator | boolean | Apakah menggunakan simulator atau QPU | Tidak | False |
classical_optimizer | str | Nama classical optimizer untuk QAOA. Semua solver yang ditawarkan oleh SciPy, sebagaimana tercantum di sini, dapat digunakan. Kamu perlu mengatur classical_optimizer_options sesuai kebutuhan | Tidak | COBYLA |
classical_optimizer_options | dictionary | Opsi classical optimizer. Untuk daftar lengkap opsi yang tersedia, lihat dokumentasi SciPy | Tidak | {"maxiter": 60} |
optimization_level | integer | Kedalaman Circuit QAOA | Tidak | 3 |
num_transpiler_runs | integer | Jumlah jalankan Transpiler | Tidak | 30 |
pass_manager_options | dictionary | Opsi untuk menghasilkan preset pass manager | Tidak | {"approximation_degree": 1.0} |
estimator_options | dictionary | Opsi Estimator. Untuk daftar lengkap opsi yang tersedia, lihat dokumentasi Qiskit Runtime Client | Tidak | None |
sampler_options | dictionary | Opsi Sampler. Untuk daftar lengkap opsi yang tersedia, lihat dokumentasi Qiskit Runtime Client | Tidak | None |
- Default
estimator_optionsadalah:
| Nama | Tipe | 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"],}} |
- Default
sampler_optionsadalah:
| Nama | Tipe | 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},
)
Validasi​
name:- Nama harus unik, berupa string hingga 64 karakter.
- Hanya boleh mengandung karakter alfanumerik dan garis bawah.
- Harus dimulai dengan huruf dan tidak boleh diakhiri dengan garis bawah.
- Tidak boleh ada classifier dengan nama yang sama yang sudah ada di direktori data bersama.
3. Delete​
Aksi delete menghapus classifier dari direktori data bersama.
Masukan​
| Nama | Tipe | Deskripsi | Wajib |
|---|---|---|---|
action | str | Nama aksi. Harus delete. | Ya |
name | str | Nama classifier yang akan dihapus. | Ya |
Penggunaan​
job = singularity.run(
action="delete",
name="classifier_name", # specify the name of the classifier to delete here
)
Validasi​
name:- Nama harus unik, berupa string hingga 64 karakter.
- Hanya boleh mengandung karakter alfanumerik dan garis bawah.
- Harus dimulai dengan huruf dan tidak boleh diakhiri dengan garis bawah.
- Classifier dengan nama yang sama harus sudah ada di direktori data bersama.
4. Fit​
Aksi fit melatih classifier menggunakan data pelatihan yang diberikan.
Masukan​
| Nama | Tipe | Deskripsi | Wajib |
|---|---|---|---|
action | str | Nama aksi. Harus fit. | Ya |
name | str | Nama classifier yang akan dilatih. | Ya |
X | array atau list atau str | Data pelatihan. Bisa berupa array NumPy, list, atau string yang merujuk nama file di direktori data bersama. | Ya |
y | array atau list atau str | Nilai target pelatihan. Bisa berupa array NumPy, list, atau string yang merujuk nama file di direktori data bersama. | Ya |
fit_params | dictionary | Parameter tambahan untuk diteruskan ke metode fit dari classifier. | Tidak |
fit_params​
| Nama | Tipe | Deskripsi | Wajib | Default |
|---|---|---|---|---|
validation_data | tuple | Data validasi dan labelnya. | Tidak | None |
pos_label | integer atau str | Label kelas yang dipetakan ke 1. | Tidak | None |
optimization_data | str | Dataset untuk mengoptimalkan ensemble. Bisa salah satu dari: 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
)
Validasi​
name:- Nama harus unik, berupa string hingga 64 karakter.
- Hanya boleh mengandung karakter alfanumerik dan garis bawah.
- Harus dimulai dengan huruf dan tidak boleh diakhiri dengan garis bawah.
- Classifier dengan nama yang sama harus sudah ada di direktori data bersama.
5. Predict​
Aksi predict digunakan untuk mendapatkan prediksi keras dan lunak (probabilitas).
Input​
| Nama | Tipe | Deskripsi | Wajib |
|---|---|---|---|
action | str | Nama aksi. Harus berupa predict. | Ya |
name | str | Nama classifier yang akan digunakan. | Ya |
X | array atau list atau str | Data uji. Bisa berupa NumPy array, list, atau string yang merujuk pada nama file di direktori data bersama. | Ya |
options["out"] | str | Nama file JSON keluaran untuk menyimpan prediksi di direktori data bersama. Jika tidak disediakan, prediksi dikembalikan dalam hasil job. | 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",
},
)
Validasi​
name:- Nama harus unik, berupa string hingga 64 karakter.
- Hanya boleh berisi karakter alfanumerik dan garis bawah.
- Harus diawali dengan huruf dan tidak boleh diakhiri dengan garis bawah.
- Classifier dengan nama yang sama harus sudah ada di direktori data bersama.
options["out"]:- Nama file harus unik, berupa string hingga 64 karakter.
- Hanya boleh berisi karakter alfanumerik dan garis bawah.
- Harus diawali dengan huruf dan tidak boleh diakhiri dengan garis bawah.
- Harus memiliki ekstensi
.json.
6. Fit-predict​
Aksi fit_predict melatih classifier menggunakan data pelatihan, lalu menggunakannya untuk mendapatkan prediksi keras dan lunak (probabilitas).
Input​
| Nama | Tipe | Deskripsi | Wajib |
|---|---|---|---|
action | str | Nama aksi. Harus berupa fit_predict. | Ya |
name | str | Nama classifier yang akan digunakan. | Ya |
X_train | array atau list atau str | Data pelatihan. Bisa berupa NumPy array, list, atau string yang merujuk pada nama file di direktori data bersama. | Ya |
y_train | array atau list atau str | Nilai target pelatihan. Bisa berupa NumPy array, list, atau string yang merujuk pada nama file di direktori data bersama. | Ya |
X_test | array atau list atau str | Data uji. Bisa berupa NumPy array, list, atau string yang merujuk pada nama file di direktori data bersama. | Ya |
fit_params | dictionary | Parameter tambahan yang diteruskan ke metode fit classifier. | Tidak |
options["out"] | str | Nama file JSON keluaran untuk menyimpan prediksi di direktori data bersama. Jika tidak disediakan, prediksi dikembalikan dalam hasil job. | 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",
},
)
Validasi​
-
name:- Nama harus unik, berupa string hingga 64 karakter.
- Hanya boleh berisi karakter alfanumerik dan garis bawah.
- Harus diawali dengan huruf dan tidak boleh diakhiri dengan garis bawah.
- Classifier dengan nama yang sama harus sudah ada di direktori data bersama.
-
options["out"]:- Nama file harus unik, berupa string hingga 64 karakter.
- Hanya boleh berisi karakter alfanumerik dan garis bawah.
- Harus diawali dengan huruf dan tidak boleh diakhiri dengan garis bawah.
- Harus memiliki ekstensi
.json.
7. Create-fit-predict​
Aksi create_fit_predict membuat classifier, melatihnya menggunakan data pelatihan yang diberikan, lalu menggunakannya untuk mendapatkan prediksi keras dan lunak (probabilitas).
Input​
| Nama | Tipe | Deskripsi | Wajib |
|---|---|---|---|
action | str | Nama aksi dari antara create, list, fit, predict, fit_predict, create_fit_predict, dan delete. | Ya |
name | str | Nama classifier yang akan digunakan. | Ya |
quantum_classifier | str | Tipe classifier, yaitu QuantumEnhancedEnsembleClassifier. Default-nya adalah QuantumEnhancedEnsembleClassifier. | Tidak |
X_train | array atau list atau str | Data pelatihan. Bisa berupa NumPy array, list, atau string yang merujuk pada nama file di direktori data bersama. | Ya |
y_train | array atau list atau str | Nilai target pelatihan. Bisa berupa NumPy array, list, atau string yang merujuk pada nama file di direktori data bersama. | Ya |
X_test | array atau list atau str | Data uji. Bisa berupa NumPy array, list, atau string yang merujuk pada nama file di direktori data bersama. | Ya |
fit_params | dictionary | Parameter tambahan yang diteruskan ke metode fit classifier. | Tidak |
options["save"] | boolean | Apakah classifier yang sudah dilatih akan disimpan di direktori data bersama. Default-nya adalah True. | Tidak |
options["out"] | str | Nama file JSON keluaran untuk menyimpan prediksi di direktori data bersama. Jika tidak disediakan, prediksi dikembalikan dalam hasil job. | 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",
},
)
Validasi​
-
name:- Jika
options["save"]diatur keTrue:- Nama harus unik, berupa string hingga 64 karakter.
- Hanya boleh berisi karakter alfanumerik dan garis bawah.
- Harus diawali dengan huruf dan tidak boleh diakhiri dengan garis bawah.
- Tidak boleh ada classifier dengan nama yang sama di direktori data bersama.
- Jika
-
options["out"]:- Nama file harus unik, berupa string hingga 64 karakter.
- Hanya boleh berisi karakter alfanumerik dan garis bawah.
- Harus diawali dengan huruf dan tidak boleh diakhiri dengan garis bawah.
- Harus memiliki ekstensi
.json.
Mulai​
Autentikasi menggunakan kunci API IBM Quantum Platform kamu, lalu pilih Qiskit Function 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, kamu akan menggunakan fungsi "Singularity Machine Learning - Classification" untuk mengklasifikasi dataset yang terdiri dari dua setengah lingkaran berbentuk bulan yang saling terkait. Dataset ini bersifat sintetis, dua dimensi, dan diberi label biner. Dataset ini dirancang agar menantang bagi algoritma seperti clustering berbasis centroid dan klasifikasi linear.
Melalui proses ini, kamu akan belajar cara membuat classifier, melatihnya pada data pelatihan, menggunakannya untuk memprediksi data uji, dan menghapus classifier setelah selesai.
Sebelum mulai, kamu perlu menginstal scikit-learn. Instal menggunakan perintah berikut:
python3 -m pip install scikit-learn
Lakukan langkah-langkah berikut:
- Buat dataset sintetis menggunakan fungsi make_moons dari scikit-learn.
- Unggah dataset sintetis yang dihasilkan ke direktori data bersama.
- Buat classifier yang ditingkatkan secara kuantum menggunakan aksi create.
- Daftarkan classifier kamu menggunakan aksi list.
- Latih classifier pada data pelatihan menggunakan aksi fit.
- Gunakan classifier yang sudah dilatih untuk memprediksi data uji menggunakan aksi predict.
- Hapus classifier menggunakan aksi delete.
- Bersihkan setelah selesai. Langkah 1. Import modul yang diperlukan dan buat dataset sintetis, lalu bagi menjadi dataset pelatihan dan uji.
# 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 pelatihan dan uji yang sudah diberi label ke disk lokal kamu, lalu unggah 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. Buat classifier yang ditingkatkan secara kuantum menggunakan aksi 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 classifier yang ditingkatkan secara kuantum menggunakan aksi 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 prediksi dan probabilitas dari classifier yang ditingkatkan secara kuantum menggunakan aksi 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. Hapus classifier yang ditingkatkan secara kuantum menggunakan aksi 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 lokal 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)
Tolok Ukur​
Tolok ukur ini menunjukkan bahwa classifier mampu mencapai akurasi yang sangat tinggi pada masalah-masalah yang menantang. Tolok ukur ini juga menunjukkan bahwa menambah jumlah learner dalam ensemble (jumlah Qubit) dapat meningkatkan akurasi.
"Akurasi klasik" merujuk pada akurasi yang diperoleh menggunakan metode klasik terkini yang setara, yaitu classifier AdaBoost berbasis ensemble berukuran 75. Sementara itu, "akurasi kuantum" merujuk pada akurasi yang diperoleh menggunakan "Singularity Machine Learning - Classification".
| Masalah | Ukuran Dataset | Ukuran Ensemble | Jumlah Qubit | Akurasi Klasik | Akurasi Kuantum | Peningkatan |
|---|---|---|---|---|---|---|
| Stabilitas jaringan | 5000 contoh, 12 fitur | 55 | 55 | 76% | 91% | 15% |
| Stabilitas jaringan | 5000 contoh, 12 fitur | 65 | 65 | 76% | 92% | 16% |
| Stabilitas jaringan | 5000 contoh, 12 fitur | 75 | 75 | 76% | 94% | 18% |
| Stabilitas jaringan | 5000 contoh, 12 fitur | 85 | 85 | 76% | 94% | 18% |
| Stabilitas jaringan | 5000 contoh, 12 fitur | 100 | 100 | 76% | 95% | 19% |
Seiring dengan berkembang dan meningkatnya perangkat keras kuantum, implikasinya bagi classifier kuantum kita menjadi semakin signifikan. Meskipun jumlah Qubit memang membatasi ukuran ensemble yang dapat digunakan, hal ini tidak membatasi volume data yang dapat diproses. Kemampuan yang hebat ini memungkinkan classifier menangani dataset yang berisi jutaan titik data dan ribuan fitur secara efisien. Yang penting, kendala terkait ukuran ensemble dapat diatasi melalui implementasi versi skala besar dari classifier. Dengan memanfaatkan pendekatan outer-loop iteratif, ensemble dapat diperluas secara dinamis, meningkatkan fleksibilitas dan kinerja secara keseluruhan. Namun, perlu dicatat bahwa fitur ini belum diimplementasikan dalam versi classifier saat ini.
Catatan Perubahan​
4 Juni 2025​
- Meningkatkan
QuantumEnhancedEnsembleClassifierdengan pembaruan berikut:- Menambahkan regularisasi onsite/alpha. Kamu bisa menentukan
regularization_typesebagaionsiteataualpha - Menambahkan auto-regularisasi. Kamu bisa mengatur
regularizationkeautountuk menggunakan auto-regularisasi - Menambahkan parameter
optimization_datake metodefituntuk memilih data optimasi pada optimasi kuantum. Kamu bisa menggunakan salah satu opsi berikut:train,validation, atauboth - Peningkatan kinerja secara keseluruhan
- Menambahkan regularisasi onsite/alpha. Kamu bisa menentukan
- Menambahkan pelacakan status detail untuk job yang sedang berjalan
20 Mei 2025​
- Standarisasi penanganan error
18 Maret 2025​
- Meningkatkan qiskit-serverless ke 0.20.0 dan base image ke 0.20.1
14 Februari 2025​
- Meningkatkan base image ke 0.19.1
6 Februari 2025​
- Meningkatkan qiskit-serverless ke 0.19.0 dan base image ke 0.19.0
13 November 2024​
- Rilis Singularity Machine Learning - Classification
Dapatkan dukungan​
Untuk pertanyaan apa pun, hubungi Multiverse Computing.
Pastikan untuk menyertakan informasi berikut:
- ID Job Qiskit Function (
job.job_id) - Deskripsi masalah yang mendetail
- Pesan atau kode error yang relevan
- Langkah-langkah untuk mereproduksi masalah