Lewati ke konten utama

Singularity Machine Learning - Klasifikasi: Sebuah Qiskit Function oleh Multiverse Computing

Catatan
  • 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. Cara kerjanya Fungsi ini dibuat untuk:

  1. Para engineer dan ilmuwan data di perusahaan yang ingin meningkatkan penawaran teknologi mereka dengan mengintegrasikan quantum machine learning ke dalam produk dan layanan mereka,
  2. Para peneliti di laboratorium riset kuantum yang mengeksplorasi aplikasi quantum machine learning dan ingin memanfaatkan komputasi kuantum untuk tugas klasifikasi, serta
  3. 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:

  1. 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.
  2. Jika set pelatihan tidak seimbang, kamu bisa melakukan resampling untuk menyeimbangkan kelas menggunakan imbalanced-learn.
  3. Unggah set pelatihan, validasi, dan pengujian secara terpisah ke penyimpanan fungsi menggunakan metode file_upload dari catalog, dengan meneruskan path yang relevan setiap kali.
  4. Inisialisasi classifier kuantum menggunakan aksi create dari 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.
  5. Latih classifier kuantum pada set pelatihan menggunakan aksi fit dari fungsi, dengan meneruskan set pelatihan berlabel, dan set validasi jika ada.
  6. Buat prediksi pada set pengujian yang belum pernah dilihat menggunakan aksi predict dari 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​

NamaTipeDeskripsiWajib
actionstrNama 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.

catatan

Fungsi ini saat ini hanya mendukung QuantumEnhancedEnsembleClassifier.

Masukan​

NamaTipeDeskripsiWajibDefault
actionstrNama aksi dari antara create, list, fit, predict, fit_predict, create_fit_predict, dan delete.Ya-
namestrNama classifier kuantum, misalnya spam_classifier.Ya-
instancestrInstance IBM.Ya-
backend_namestrSumber daya komputasi IBM. Default-nya adalah None, yang berarti Backend dengan pekerjaan pending paling sedikit yang akan digunakan.TidakNone
quantum_classifierstrTipe classifier kuantum, yaitu QuantumEnhancedEnsembleClassifier.TidakQuantumEnhancedEnsembleClassifier
num_learnersintegerJumlah learner dalam ensemble.Tidak10
learners_typeslistTipe-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_proportionslistProporsi setiap tipe learner dalam ensemble.Tidak[1.0]
learners_optionslistOpsi 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_typestr atau listTipe 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.Tidakonsite
regularizationstr atau float atau listNilai 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.Tidak0.01
regularization_desired_ratiofloat atau listRasio 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.Tidak0.75
regularization_upper_boundfloat atau listBatas atas parameter regularisasi saat menggunakan regularisasi otomatis. Jika list diberikan, model akan dilatih untuk setiap batas atas dan yang berkinerja terbaik akan dipilih.Tidak200
weight_update_methodstrMetode pembaruan bobot sampel dari antara logarithmic dan quadratic.Tidaklogarithmic
sample_scalingbooleanApakah penskalaan sampel harus diterapkan.TidakFalse
prediction_scalingfloatFaktor penskalaan untuk prediksi.TidakNone
optimizer_optionsdictionaryOpsi optimizer QAOA. Daftar opsi yang tersedia disajikan kemudian dalam dokumentasi ini.Tidak...
votingstrGunakan majority voting (hard) atau rata-rata probabilitas (soft) untuk mengagregasi prediksi/probabilitas learner.Tidakhard
prob_thresholdfloatAmbang batas probabilitas optimal.Tidak0.5
random_stateintegerKendalikan keacakan untuk keterproduksian.TidakNone
  • Selain itu, optimizer_options dirinci sebagai berikut:
NamaTipeDeskripsiWajibDefault
num_solutionsintegerJumlah solusiTidak1024
repsintegerJumlah pengulanganTidak4
sparsifyfloatAmbang batas sparsificationTidak0.001
thetafloatNilai awal theta, parameter variasional QAOATidakNone
simulatorbooleanApakah menggunakan simulator atau QPUTidakFalse
classical_optimizerstrNama classical optimizer untuk QAOA. Semua solver yang ditawarkan oleh SciPy, sebagaimana tercantum di sini, dapat digunakan. Kamu perlu mengatur classical_optimizer_options sesuai kebutuhanTidakCOBYLA
classical_optimizer_optionsdictionaryOpsi classical optimizer. Untuk daftar lengkap opsi yang tersedia, lihat dokumentasi SciPyTidak{"maxiter": 60}
optimization_levelintegerKedalaman Circuit QAOATidak3
num_transpiler_runsintegerJumlah jalankan TranspilerTidak30
pass_manager_optionsdictionaryOpsi untuk menghasilkan preset pass managerTidak{"approximation_degree": 1.0}
estimator_optionsdictionaryOpsi Estimator. Untuk daftar lengkap opsi yang tersedia, lihat dokumentasi Qiskit Runtime ClientTidakNone
sampler_optionsdictionaryOpsi Sampler. Untuk daftar lengkap opsi yang tersedia, lihat dokumentasi Qiskit Runtime ClientTidakNone
  • Default estimator_options adalah:
NamaTipeNilai
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"],}}
  • Default sampler_options adalah:
NamaTipeNilai
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},
)

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​

NamaTipeDeskripsiWajib
actionstrNama aksi. Harus delete.Ya
namestrNama 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​

NamaTipeDeskripsiWajib
actionstrNama aksi. Harus fit.Ya
namestrNama classifier yang akan dilatih.Ya
Xarray atau list atau strData pelatihan. Bisa berupa array NumPy, list, atau string yang merujuk nama file di direktori data bersama.Ya
yarray atau list atau strNilai target pelatihan. Bisa berupa array NumPy, list, atau string yang merujuk nama file di direktori data bersama.Ya
fit_paramsdictionaryParameter tambahan untuk diteruskan ke metode fit dari classifier.Tidak
fit_params​
NamaTipeDeskripsiWajibDefault
validation_datatupleData validasi dan labelnya.TidakNone
pos_labelinteger atau strLabel kelas yang dipetakan ke 1.TidakNone
optimization_datastrDataset untuk mengoptimalkan ensemble. Bisa salah satu dari: 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
)

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​

NamaTipeDeskripsiWajib
actionstrNama aksi. Harus berupa predict.Ya
namestrNama classifier yang akan digunakan.Ya
Xarray atau list atau strData uji. Bisa berupa NumPy array, list, atau string yang merujuk pada nama file di direktori data bersama.Ya
options["out"]strNama 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​

NamaTipeDeskripsiWajib
actionstrNama aksi. Harus berupa fit_predict.Ya
namestrNama classifier yang akan digunakan.Ya
X_trainarray atau list atau strData pelatihan. Bisa berupa NumPy array, list, atau string yang merujuk pada nama file di direktori data bersama.Ya
y_trainarray atau list atau strNilai target pelatihan. Bisa berupa NumPy array, list, atau string yang merujuk pada nama file di direktori data bersama.Ya
X_testarray atau list atau strData uji. Bisa berupa NumPy array, list, atau string yang merujuk pada nama file di direktori data bersama.Ya
fit_paramsdictionaryParameter tambahan yang diteruskan ke metode fit classifier.Tidak
options["out"]strNama 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​

NamaTipeDeskripsiWajib
actionstrNama aksi dari antara create, list, fit, predict, fit_predict, create_fit_predict, dan delete.Ya
namestrNama classifier yang akan digunakan.Ya
quantum_classifierstrTipe classifier, yaitu QuantumEnhancedEnsembleClassifier. Default-nya adalah QuantumEnhancedEnsembleClassifier.Tidak
X_trainarray atau list atau strData pelatihan. Bisa berupa NumPy array, list, atau string yang merujuk pada nama file di direktori data bersama.Ya
y_trainarray atau list atau strNilai target pelatihan. Bisa berupa NumPy array, list, atau string yang merujuk pada nama file di direktori data bersama.Ya
X_testarray atau list atau strData uji. Bisa berupa NumPy array, list, atau string yang merujuk pada nama file di direktori data bersama.Ya
fit_paramsdictionaryParameter tambahan yang diteruskan ke metode fit classifier.Tidak
options["save"]booleanApakah classifier yang sudah dilatih akan disimpan di direktori data bersama. Default-nya adalah True.Tidak
options["out"]strNama 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 ke True:
      • 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.
  • 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. Dataset moons 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:

  1. Buat dataset sintetis menggunakan fungsi make_moons dari scikit-learn.
  2. Unggah dataset sintetis yang dihasilkan ke direktori data bersama.
  3. Buat classifier yang ditingkatkan secara kuantum menggunakan aksi create.
  4. Daftarkan classifier kamu menggunakan aksi list.
  5. Latih classifier pada data pelatihan menggunakan aksi fit.
  6. Gunakan classifier yang sudah dilatih untuk memprediksi data uji menggunakan aksi predict.
  7. Hapus classifier menggunakan aksi delete.
  8. 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".

MasalahUkuran DatasetUkuran EnsembleJumlah QubitAkurasi KlasikAkurasi KuantumPeningkatan
Stabilitas jaringan5000 contoh, 12 fitur555576%91%15%
Stabilitas jaringan5000 contoh, 12 fitur656576%92%16%
Stabilitas jaringan5000 contoh, 12 fitur757576%94%18%
Stabilitas jaringan5000 contoh, 12 fitur858576%94%18%
Stabilitas jaringan5000 contoh, 12 fitur10010076%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 QuantumEnhancedEnsembleClassifier dengan pembaruan berikut:
    • Menambahkan regularisasi onsite/alpha. Kamu bisa menentukan regularization_type sebagai onsite atau alpha
    • Menambahkan auto-regularisasi. Kamu bisa mengatur regularization ke auto untuk menggunakan auto-regularisasi
    • Menambahkan parameter optimization_data ke metode fit untuk memilih data optimasi pada optimasi kuantum. Kamu bisa menggunakan salah satu opsi berikut: train, validation, atau both
    • Peningkatan kinerja secara keseluruhan
  • 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

Langkah selanjutnya​

Source: IBM Quantum docs — updated 5 Mei 2026
English version on doQumentation — updated 7 Mei 2026
This translation based on the English version of 11 Mar 2026