Singularity Machine Learning - Classification: A Qiskit Function by Multiverse Computing
- Funcțiile Qiskit sunt o funcționalitate experimentală disponibilă doar utilizatorilor IBM Quantum® Premium Plan, Flex Plan și On-Prem (prin IBM Quantum Platform API) Plan. Acestea se află în stare de previzualizare și pot suferi modificări.
Prezentare generală
Cu funcția „Singularity Machine Learning - Classification" poți rezolva probleme reale de machine learning pe hardware cuantic fără a necesita expertiză cuantică. Această funcție applicație, bazată pe metode ensemble, este un clasificator hibrid. Utilizează metode clasice precum boosting, bagging și stacking pentru antrenarea inițială a ensemble-ului. Ulterior, se folosesc algoritmi cuantici precum variational quantum eigensolver (VQE) și quantum approximate optimization algorithm (QAOA) pentru a îmbunătăți diversitatea, capacitățile de generalizare și complexitatea globală a ensemble-ului antrenat.
Spre deosebire de alte soluții de quantum machine learning, această funcție este capabilă să gestioneze seturi de date la scară largă cu milioane de exemple și caracteristici, fără a fi limitată de numărul de qubiți din QPU-ul țintă. Numărul de qubiți determină doar dimensiunea ensemble-ului care poate fi antrenat. De asemenea, este extrem de flexibilă și poate fi utilizată pentru a rezolva probleme de clasificare într-o gamă largă de domenii, inclusiv finanțe, sănătate și securitate cibernetică.
Obține în mod consistent acuratețe ridicată pe probleme clasic dificile, care implică seturi de date de înaltă dimensionalitate, zgomotoase și dezechilibrate.
Este construită pentru:
- Ingineri și oameni de știință din domeniul datelor din companii care caută să-și îmbunătățească oferta tehnologică integrând quantum machine learning în produsele și serviciile lor,
- Cercetători din laboratoare de cercetare cuantică care explorează aplicații de quantum machine learning și doresc să valorifice calculul cuantic pentru sarcini de clasificare, și
- Studenți și profesori din instituții de învățământ în cursuri precum machine learning, care caută să demonstreze avantajele calculului cuantic.
Următorul exemplu prezintă diversele funcționalități ale acesteia, inclusiv create, list, fit și predict, și demonstrează utilizarea sa într-o problemă sintetică ce cuprinde două semicercuri interconectate, o problemă notorie dificilă din cauza graniței sale de decizie neliniare.
Descrierea funcției
Această funcție Qiskit permite utilizatorilor să rezolve probleme de clasificare binară folosind clasificatorul ensemble îmbunătățit cuantic al Singularity. În spatele scenei, folosește o abordare hibridă pentru a antrena clasic un ensemble de clasificatoare pe setul de date etichetat, iar apoi îl optimizează pentru diversitate maximă și generalizare folosind Quantum Approximate Optimization Algorithm (QAOA) pe QPU-urile IBM®. Printr-o interfață prietenoasă cu utilizatorul, poți configura un clasificator conform cerințelor tale, îl antrenezi pe setul de date dorit și îl utilizezi pentru a face predicții pe un set de date nevăzut anterior.
Pentru a rezolva o problemă generică de clasificare:
- Preprocesează setul de date și împarte-l în seturi de antrenare și testare. Opțional, poți împărți în continuare setul de antrenare în seturi de antrenare și validare. Acest lucru poate fi realizat folosind scikit-learn.
- Dacă setul de antrenare este dezechilibrat, îl poți reeșantiona pentru a echilibra clasele folosind imbalanced-learn.
- Încarcă seturile de antrenare, validare și testare separat în stocarea funcției folosind metoda
file_uploada catalogului, pasând calea relevantă de fiecare dată. - Inițializează clasificatorul cuantic folosind acțiunea
createa funcției, care acceptă hiperparametri precum numărul și tipurile de algoritmi de învățare, regularizarea (valoarea lambda) și opțiunile de optimizare, inclusiv numărul de straturi, tipul de optimizer clasic, Backend-ul cuantic și altele. - Antrenează clasificatorul cuantic pe setul de antrenare folosind acțiunea
fita funcției, pasând setul de antrenare etichetat și setul de validare dacă este aplicabil. - Realizează predicții pe setul de testare nevăzut anterior folosind acțiunea
predicta funcției.
Abordare bazată pe acțiuni
Funcția folosește o abordare bazată pe acțiuni. O poți gândi ca un mediu virtual în care folosești acțiuni pentru a efectua sarcini sau a-i schimba starea. În prezent, oferă următoarele acțiuni: list, create, delete, fit, predict, fit_predict și create_fit_predict. Următorul exemplu demonstrează acțiunea 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
Acțiunea list recuperează toți clasificatorii stocați în format *.pkl.tar din directorul de date partajat. Poți accesa și conținutul acestui director folosind metoda catalog.files(). În general, acțiunea list caută fișiere cu extensia *.pkl.tar în directorul de date partajat și le returnează în format de listă.
Intrări
| Nume | Tip | Descriere | Obligatoriu |
|---|---|---|---|
action | str | Numele acțiunii dintre create, list, fit, predict, fit_predict, create_fit_predict și delete. | Da |
Utilizare
job = singularity.run(action="list")
2. Create
Acțiunea create creează un clasificator de tipul quantum_classifier specificat, folosind parametrii furnizați, și îl salvează în directorul de date partajate.
Funcția acceptă momentan doar QuantumEnhancedEnsembleClassifier.
Intrări
| Nume | Tip | Descriere | Obligatoriu | Implicit |
|---|---|---|---|---|
action | str | Numele acțiunii, dintre create, list, fit, predict, fit_predict, create_fit_predict și delete. | Da | - |
name | str | Numele clasificatorului quantum, de ex. spam_classifier. | Da | - |
instance | str | Instanța IBM. | Da | - |
backend_name | str | Resursa de calcul IBM. Implicit este None, ceea ce înseamnă că va fi folosit Backend-ul cu cele mai puține job-uri în așteptare. | Nu | None |
quantum_classifier | str | Tipul clasificatorului quantum, adică QuantumEnhancedEnsembleClassifier. | Nu | QuantumEnhancedEnsembleClassifier |
num_learners | integer | Numărul de learner-e din ansamblu. | Nu | 10 |
learners_types | list | Tipurile de learner-e. Printre tipurile acceptate se numără: DecisionTreeClassifier, GaussianNB, KNeighborsClassifier, MLPClassifier și LogisticRegression. Detalii suplimentare despre fiecare pot fi găsite în documentația scikit-learn. | Nu | [DecisionTreeClassifier] |
learners_proportions | list | Proporțiile fiecărui tip de learner în ansamblu. | Nu | [1.0] |
learners_options | list | Opțiuni pentru fiecare tip de learner din ansamblu. Pentru o listă completă a opțiunilor corespunzătoare tipului/tipurilor de learner ales/alese, consultă documentația scikit-learn. | Nu | [{"max_depth": 3, "splitter": "random", "class_weight": None}] |
regularization_type | str sau list | Tipul/tipurile de regularizare care vor fi utilizate: onsite sau alpha. onsite controlează termenul onsite, unde valori mai mari duc la ansambluri mai rare. alpha controlează echilibrul dintre termenii de interacțiune și cei onsite, unde valori mai mici duc la ansambluri mai rare. Dacă se furnizează o listă, modelele vor fi antrenate pentru fiecare tip, iar cel mai performant va fi selectat. | Nu | onsite |
regularization | str sau float sau list | Valoarea de regularizare. Cuprinsă între 0 și +inf dacă regularization_type este onsite. Cuprinsă între 0 și 1 dacă regularization_type este alpha. Dacă este setat la auto, se folosește auto-regularizarea — parametrul optim de regularizare este găsit prin căutare binară, cu raportul dorit de clasificatori selectați față de totalul clasificatorilor (regularization_desired_ratio) și limita superioară a parametrului de regularizare (regularization_upper_bound). Dacă se furnizează o listă, modelele vor fi antrenate pentru fiecare valoare, iar cel mai performant va fi selectat. | Nu | 0.01 |
regularization_desired_ratio | float sau list | Raportul/rapoartele dorite de clasificatori selectați față de totalul clasificatorilor pentru auto-regularizare. Dacă se furnizează o listă, modelele vor fi antrenate pentru fiecare raport, iar cel mai performant va fi selectat. | Nu | 0.75 |
regularization_upper_bound | float sau list | Limita/limitele superioare ale parametrului de regularizare când se folosește auto-regularizarea. Dacă se furnizează o listă, modelele vor fi antrenate pentru fiecare limită superioară, iar cel mai performant va fi selectat. | Nu | 200 |
weight_update_method | str | Metoda de actualizare a ponderilor eșantioanelor, dintre logarithmic și quadratic. | Nu | logarithmic |
sample_scaling | boolean | Dacă scalarea eșantioanelor trebuie aplicată. | Nu | False |
prediction_scaling | float | Factorul de scalare pentru predicții. | Nu | None |
optimizer_options | dictionary | Opțiunile optimizatorului QAOA. O listă cu opțiunile disponibile este prezentată mai jos în această documentație. | Nu | ... |
voting | str | Folosește votul majoritar (hard) sau media probabilităților (soft) pentru agregarea predicțiilor/probabilităților learner-elor. | Nu | hard |
prob_threshold | float | Pragul optim de probabilitate. | Nu | 0.5 |
random_state | integer | Controlează aleatorismul pentru reproductibilitate. | Nu | None |
- În plus,
optimizer_optionssunt enumerate după cum urmează:
| Nume | Tip | Descriere | Obligatoriu | Implicit |
|---|---|---|---|---|
num_solutions | integer | Numărul de soluții | Nu | 1024 |
reps | integer | Numărul de repetiții | Nu | 4 |
sparsify | float | Pragul de sparsificare | Nu | 0.001 |
theta | float | Valoarea inițială a lui theta, un parametru variațional al QAOA | Nu | None |
simulator | boolean | Dacă să fie folosit un simulator sau un QPU | Nu | False |
classical_optimizer | str | Numele optimizatorului clasic pentru QAOA. Toți solverii oferiți de SciPy, enumerați aici, pot fi utilizați. Va trebui să setezi classical_optimizer_options corespunzător | Nu | COBYLA |
classical_optimizer_options | dictionary | Opțiunile optimizatorului clasic. Pentru o listă completă a opțiunilor disponibile, consultă documentația SciPy | Nu | {"maxiter": 60} |
optimization_level | integer | Adâncimea Circuit-ului QAOA | Nu | 3 |
num_transpiler_runs | integer | Numărul de rulări ale Transpiler-ului | Nu | 30 |
pass_manager_options | dictionary | Opțiuni pentru generarea pass manager-ului preset | Nu | {"approximation_degree": 1.0} |
estimator_options | dictionary | Opțiunile Estimator-ului. Pentru o listă completă a opțiunilor disponibile, consultă documentația Qiskit Runtime Client | Nu | None |
sampler_options | dictionary | Opțiunile Sampler-ului. Pentru o listă completă a opțiunilor disponibile, consultă documentația Qiskit Runtime Client | Nu | None |
estimator_optionsimplicite sunt:
| Nume | Tip | Valoare |
|---|---|---|
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_optionsimplicite sunt:
| Nume | Tip | Valoare |
|---|---|---|
default_shots | integer | 1024 |
resilience_level | integer | 1 |
twirling | dictionary | {"enable_gates": True} |
dynamical_decoupling | dictionary | {"enable": True} |
Utilizare
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},
)
Validări
name:- Numele trebuie să fie unic, un șir de maximum 64 de caractere.
- Poate conține doar caractere alfanumerice și liniuțe de subliniere.
- Trebuie să înceapă cu o literă și nu poate să se termine cu o liniuță de subliniere.
- Niciun clasificator cu același nume nu ar trebui să existe deja în directorul de date partajate.
3. Delete
Acțiunea delete elimină un clasificator din directorul de date partajate.
Intrări
| Nume | Tip | Descriere | Obligatoriu |
|---|---|---|---|
action | str | Numele acțiunii. Trebuie să fie delete. | Da |
name | str | Numele clasificatorului de șters. | Da |
Utilizare
job = singularity.run(
action="delete",
name="classifier_name", # specify the name of the classifier to delete here
)
Validări
name:- Numele trebuie să fie unic, un șir de maximum 64 de caractere.
- Poate conține doar caractere alfanumerice și liniuțe de subliniere.
- Trebuie să înceapă cu o literă și nu poate să se termine cu o liniuță de subliniere.
- Un clasificator cu același nume trebuie să existe deja în directorul de date partajate.
4. Fit
Acțiunea fit antrenează un clasificator folosind datele de antrenament furnizate.
Intrări
| Nume | Tip | Descriere | Obligatoriu |
|---|---|---|---|
action | str | Numele acțiunii. Trebuie să fie fit. | Da |
name | str | Numele clasificatorului de antrenat. | Da |
X | array sau list sau str | Datele de antrenament. Poate fi un array NumPy, o listă sau un șir de caractere care referențiază un fișier din directorul de date partajate. | Da |
y | array sau list sau str | Valorile țintă pentru antrenament. Poate fi un array NumPy, o listă sau un șir de caractere care referențiază un fișier din directorul de date partajate. | Da |
fit_params | dictionary | Parametri suplimentari de transmis metodei fit a clasificatorului. | Nu |
fit_params
| Nume | Tip | Descriere | Obligatoriu | Implicit |
|---|---|---|---|---|
validation_data | tuple | Datele și etichetele de validare. | Nu | None |
pos_label | integer sau str | Eticheta de clasă care va fi mapată la 1. | Nu | None |
optimization_data | str | Setul de date pe care să fie optimizat ansamblul. Poate fi unul dintre: train, validation, both. | Nu | train |
Utilizare
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
)
Validări
name:- Numele trebuie să fie unic, un șir de caractere de până la 64 de caractere.
- Poate conține doar caractere alfanumerice și underscore-uri.
- Trebuie să înceapă cu o literă și nu poate să se termine cu un underscore.
- Un clasificator cu același nume trebuie să existe deja în directorul de date partajate.
5. Predict
Acțiunea predict este folosită pentru a obține predicții tari și moi (probabilități).
Intrări
| Nume | Tip | Descriere | Obligatoriu |
|---|---|---|---|
action | str | Numele acțiunii. Trebuie să fie predict. | Da |
name | str | Numele clasificatorului care va fi folosit. | Da |
X | array sau list sau str | Datele de test. Poate fi un array NumPy, o listă sau un șir de caractere care referențiază un nume de fișier din directorul de date partajate. | Da |
options["out"] | str | Numele fișierului JSON de ieșire în care să fie salvate predicțiile în directorul de date partajate. Dacă nu este furnizat, predicțiile sunt returnate în rezultatul job-ului. | Nu |
Utilizare
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",
},
)
Validări
name:- Numele trebuie să fie unic, un șir de caractere de până la 64 de caractere.
- Poate conține doar caractere alfanumerice și underscore-uri.
- Trebuie să înceapă cu o literă și nu poate să se termine cu un underscore.
- Un clasificator cu același nume trebuie să existe deja în directorul de date partajate.
options["out"]:- Numele fișierului trebuie să fie unic, un șir de caractere de până la 64 de caractere.
- Poate conține doar caractere alfanumerice și underscore-uri.
- Trebuie să înceapă cu o literă și nu poate să se termine cu un underscore.
- Trebuie să aibă extensia
.json.
6. Fit-predict
Acțiunea fit_predict antrenează un clasificator folosind datele de antrenament și apoi îl utilizează pentru a obține predicții tari și moi (probabilități).
Intrări
| Nume | Tip | Descriere | Obligatoriu |
|---|---|---|---|
action | str | Numele acțiunii. Trebuie să fie fit_predict. | Da |
name | str | Numele clasificatorului care va fi folosit. | Da |
X_train | array sau list sau str | Datele de antrenament. Poate fi un array NumPy, o listă sau un șir de caractere care referențiază un nume de fișier din directorul de date partajate. | Da |
y_train | array sau list sau str | Valorile țintă de antrenament. Poate fi un array NumPy, o listă sau un șir de caractere care referențiază un nume de fișier din directorul de date partajate. | Da |
X_test | array sau list sau str | Datele de test. Poate fi un array NumPy, o listă sau un șir de caractere care referențiază un nume de fișier din directorul de date partajate. | Da |
fit_params | dictionary | Parametri suplimentari care vor fi pasați metodei fit a clasificatorului. | Nu |
options["out"] | str | Numele fișierului JSON de ieșire în care să fie salvate predicțiile în directorul de date partajate. Dacă nu este furnizat, predicțiile sunt returnate în rezultatul job-ului. | Nu |
Utilizare
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",
},
)
Validări
-
name:- Numele trebuie să fie unic, un șir de caractere de până la 64 de caractere.
- Poate conține doar caractere alfanumerice și underscore-uri.
- Trebuie să înceapă cu o literă și nu poate să se termine cu un underscore.
- Un clasificator cu același nume trebuie să existe deja în directorul de date partajate.
-
options["out"]:- Numele fișierului trebuie să fie unic, un șir de caractere de până la 64 de caractere.
- Poate conține doar caractere alfanumerice și underscore-uri.
- Trebuie să înceapă cu o literă și nu poate să se termine cu un underscore.
- Trebuie să aibă extensia
.json.
7. Create-fit-predict
Acțiunea create_fit_predict creează un clasificator, îl antrenează folosind datele de antrenament furnizate și apoi îl utilizează pentru a obține predicții tari și moi (probabilități).
Intrări
| Nume | Tip | Descriere | Obligatoriu |
|---|---|---|---|
action | str | Numele acțiunii, dintre create, list, fit, predict, fit_predict, create_fit_predict și delete. | Da |
name | str | Numele clasificatorului care va fi folosit. | Da |
quantum_classifier | str | Tipul clasificatorului, adică QuantumEnhancedEnsembleClassifier. Implicit este QuantumEnhancedEnsembleClassifier. | Nu |
X_train | array sau list sau str | Datele de antrenament. Poate fi un array NumPy, o listă sau un șir de caractere care referențiază un nume de fișier din directorul de date partajate. | Da |
y_train | array sau list sau str | Valorile țintă de antrenament. Poate fi un array NumPy, o listă sau un șir de caractere care referențiază un nume de fișier din directorul de date partajate. | Da |
X_test | array sau list sau str | Datele de test. Poate fi un array NumPy, o listă sau un șir de caractere care referențiază un nume de fișier din directorul de date partajate. | Da |
fit_params | dictionary | Parametri suplimentari care vor fi pasați metodei fit a clasificatorului. | Nu |
options["save"] | boolean | Dacă clasificatorul antrenat să fie salvat în directorul de date partajate. Implicit este True. | Nu |
options["out"] | str | Numele fișierului JSON de ieșire în care să fie salvate predicțiile în directorul de date partajate. Dacă nu este furnizat, predicțiile sunt returnate în rezultatul job-ului. | Nu |
Utilizare
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",
},
)
Validări
-
name:- Dacă
options["save"]este setat laTrue:- Numele trebuie să fie unic, un șir de caractere de până la 64 de caractere.
- Poate conține doar caractere alfanumerice și underscore-uri.
- Trebuie să înceapă cu o literă și nu poate să se termine cu un underscore.
- Niciun clasificator cu același nume nu trebuie să existe deja în directorul de date partajate.
- Dacă
-
options["out"]:- Numele fișierului trebuie să fie unic, un șir de caractere de până la 64 de caractere.
- Poate conține doar caractere alfanumerice și underscore-uri.
- Trebuie să înceapă cu o literă și nu poate să se termine cu un underscore.
- Trebuie să aibă extensia
.json.
Primii pași
Autentifică-te folosind cheia ta de API IBM Quantum Platform și selectează Qiskit Function după cum urmează:
from qiskit_ibm_catalog import QiskitFunctionsCatalog
catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
# load function
singularity = catalog.load("multiverse/singularity")
Exemplu
În acest exemplu, vei folosi funcția „Singularity Machine Learning - Classification" pentru a clasifica un set de date format din două semicercuri interconectate în formă de lună. Setul de date este sintetic, bidimensional și etichetat cu etichete binare. Este creat pentru a fi dificil pentru algoritmi precum clustering bazat pe centroizi și clasificare liniară.
Prin acest proces, vei învăța cum să creezi clasificatorul, să îl antrenezi pe datele de antrenament, să îl folosești pentru a face predicții pe datele de test și să îl ștergi când ai terminat.
Înainte de a începe, trebuie să instalezi scikit-learn. Instalează-l folosind următoarea comandă:
python3 -m pip install scikit-learn
Efectuează pașii următori:
- Creează setul de date sintetic folosind funcția make_moons din scikit-learn.
- Încarcă setul de date sintetic generat în directorul de date partajate.
- Creează clasificatorul îmbunătățit cuantic folosind acțiunea create.
- Listează clasificatorii tăi folosind acțiunea list.
- Antrenează clasificatorul pe datele de antrenament folosind acțiunea fit.
- Folosește clasificatorul antrenat pentru a face predicții pe datele de test, utilizând acțiunea predict.
- Șterge clasificatorul folosind acțiunea delete.
- Fă curățenie după ce ai terminat. Pasul 1. Importă modulele necesare și generează setul de date sintetic, apoi împarte-l în seturi de antrenament și de test.
# 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]
Pasul 2. Salvează seturile de date de antrenament și testare etichetate pe discul local, apoi încarcă-le în directorul de date partajate.
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']
Pasul 3. Creează un clasificator îmbunătățit cuantic folosind acțiunea 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']
Pasul 4. Antrenează clasificatorul cu îmbunătățiri cuantice folosind acțiunea 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}}}}
Pasul 5. Obține predicții și probabilități de la clasificatorul cu îmbunătățiri cuantice folosind acțiunea 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]]
Pasul 6. Șterge clasificatorul cu îmbunătățiri cuantice folosind acțiunea 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': {}}}
Pasul 7. Curăță directoarele de date locale și partajate.
# 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)
Benchmark-uri
Aceste benchmark-uri arată că clasificatorul poate atinge acuratețe extrem de ridicată pe probleme dificile. De asemenea, demonstrează că mărirea numărului de learner-e din ansamblu (numărul de Qubiți) poate conduce la o acuratețe mai mare.
„Acuratețea clasică" se referă la acuratețea obținută folosind metoda clasică corespunzătoare de ultimă generație, care în acest caz este un clasificator AdaBoost bazat pe un ansamblu de dimensiune 75. „Acuratețea cuantică" se referă, pe de altă parte, la acuratețea obținută folosind „Singularity Machine Learning - Classification".
| Problemă | Dimensiunea setului de date | Dimensiunea ansamblului | Numărul de Qubiți | Acuratețe clasică | Acuratețe cuantică | Îmbunătățire |
|---|---|---|---|---|---|---|
| Stabilitate rețea | 5000 exemple, 12 caracteristici | 55 | 55 | 76% | 91% | 15% |
| Stabilitate rețea | 5000 exemple, 12 caracteristici | 65 | 65 | 76% | 92% | 16% |
| Stabilitate rețea | 5000 exemple, 12 caracteristici | 75 | 75 | 76% | 94% | 18% |
| Stabilitate rețea | 5000 exemple, 12 caracteristici | 85 | 85 | 76% | 94% | 18% |
| Stabilitate rețea | 5000 exemple, 12 caracteristici | 100 | 100 | 76% | 95% | 19% |
Pe măsură ce hardware-ul cuantic evoluează și se extinde, implicațiile pentru clasificatorul nostru cuantic devin din ce în ce mai semnificative. Deși numărul de Qubiți impune limitări asupra dimensiunii ansamblului care poate fi utilizat, acesta nu restricționează volumul de date ce pot fi procesate. Această capabilitate puternică permite clasificatorului să gestioneze eficient seturi de date ce conțin milioane de puncte de date și mii de caracteristici. Important de menționat este că limitările legate de dimensiunea ansamblului pot fi abordate prin implementarea unei versiuni la scară largă a clasificatorului. Prin valorificarea unei abordări iterative cu buclă exterioară, ansamblul poate fi extins dinamic, sporind flexibilitatea și performanța generală. Totuși, merită remarcat că această funcționalitate nu a fost încă implementată în versiunea actuală a clasificatorului.
Jurnal de modificări
4 iunie 2025
- Actualizat
QuantumEnhancedEnsembleClassifiercu următoarele modificări:- Adăugată regularizare onsite/alpha. Poți specifica
regularization_typecaonsitesaualpha - Adăugată auto-regularizare. Poți seta
regularizationlaautopentru a folosi auto-regularizarea - Adăugat parametrul
optimization_datala metodafitpentru a alege datele de optimizare pentru optimizarea cuantică. Poți folosi una dintre aceste opțiuni:train,validationsauboth - Îmbunătățită performanța generală
- Adăugată regularizare onsite/alpha. Poți specifica
- Adăugată urmărire detaliată a stării pentru job-urile în execuție
20 mai 2025
- Standardizată gestionarea erorilor
18 martie 2025
- Actualizat qiskit-serverless la 0.20.0 și imaginea de bază la 0.20.1
14 februarie 2025
- Actualizată imaginea de bază la 0.19.1
6 februarie 2025
- Actualizat qiskit-serverless la 0.19.0 și imaginea de bază la 0.19.0
13 noiembrie 2024
- Lansarea Singularity Machine Learning - Classification
Obține suport
Pentru orice întrebări, contactează Multiverse Computing.
Asigură-te că incluzi următoarele informații:
- ID-ul job-ului Qiskit Function (
job.job_id) - O descriere detaliată a problemei
- Orice mesaje de eroare sau coduri relevante
- Pașii pentru a reproduce problema