Turkish
Diller
English
Bengali
French
Hindi
Italian
Japanese
Korean
Malayalam
Russian
Spanish
Tamil
Turkish
Vietnamese
Shortcuts

Not

Bu sayfa, docs/tutorials/03_quantum_kernel.ipynb sayfasından oluşturulmuştur.

Kuantum Çekirdek Makine Öğrenimi

Makine öğrenmesinin genel görevi, verilerdeki kalıpları bulmak ve incelemektir. Birçok veri kümesi için, veri noktaları daha yüksek boyutlu bir öznitelik uzayında, bir çekirdek fonksiyonu kullanılarak daha iyi anlaşılır: \(k(\vec{x}_i, \vec{x}_j) = \langle f(\ vec{x}_i), f(\vec{x}_j) \rangle\) burada \(k\) çekirdek fonksiyonudur, \(\vec{x}_i, \vec{x}_j\) \(n\) boyutlu girdiler, \(f\) \(n\)-boyutundan \(m\)-boyut uzayına ve \(\langle a,b \rangle\) arasındaki bir haritadır ve nokta çarpımını gösterir. Sonlu verileri dikkate alırken; bir çekirdek fonksiyonu, bir matris olarak temsil edilebilir: \(K_{ij} = k(\vec{x}_i,\vec{x}_j)\).

Kuantum çekirdek makine öğreniminde, bir kuantum öznitelik haritası \(\phi(\vec{x})\) klasik bir özellik vektörünü \(\vec{x}\) bir kuantum Hilbert uzayına eşlemek için kullanılır, \(| \phi(\vec{x})\rangle \langle \phi(\vec{x})|\), öyle ki \(K_{ij} = \left| \langle \phi^\dagger(\vec{x}_j)| \phi(\vec{x}_i) \rangle \right|^{2}\).Daha fazla ayrıntı için Supervised learning with quantum enhanced feature spaces bölümüne bakın.

Bu defterde, bir kuantum özellik haritası kullanarak bir çekirdek matrisini hesaplamak için qiskit kullanıyoruz, ardından bu çekirdek matrisini ``scikit-learn``de sınıflandırma ve kümeleme algoritmalarında kullanıyoruz.

[1]:
import matplotlib.pyplot as plt
import numpy as np

from sklearn.svm import SVC
from sklearn.cluster import SpectralClustering
from sklearn.metrics import normalized_mutual_info_score

from qiskit import BasicAer
from qiskit.circuit.library import ZZFeatureMap
from qiskit.utils import QuantumInstance, algorithm_globals
from qiskit_machine_learning.algorithms import QSVC
from qiskit_machine_learning.kernels import QuantumKernel
from qiskit_machine_learning.datasets import ad_hoc_data

seed = 12345
algorithm_globals.random_seed = seed

Sınıflandırma

Sınıflandırma örneğimiz için, Supervised learning with quantum enhanced feature spaces ve scikit-learn ile denetimli öğrenme’de açıklandığı gibi ad hoc veri kümesini kullanacağız. support vector machine sınıflandırma (svc) algoritması.

[2]:
adhoc_dimension = 2
train_features, train_labels, test_features, test_labels, adhoc_total = ad_hoc_data(
    training_size=20,
    test_size=5,
    n=adhoc_dimension,
    gap=0.3,
    plot_data=False, one_hot=False, include_sample_total=True
)

plt.figure(figsize=(5, 5))
plt.ylim(0, 2 * np.pi)
plt.xlim(0, 2 * np.pi)
plt.imshow(np.asmatrix(adhoc_total).T, interpolation='nearest',
           origin='lower', cmap='RdBu', extent=[0, 2 * np.pi, 0, 2 * np.pi])

plt.scatter(train_features[np.where(train_labels[:] == 0), 0], train_features[np.where(train_labels[:] == 0), 1],
            marker='s', facecolors='w', edgecolors='b', label="A train")
plt.scatter(train_features[np.where(train_labels[:] == 1), 0], train_features[np.where(train_labels[:] == 1), 1],
            marker='o', facecolors='w', edgecolors='r', label="B train")
plt.scatter(test_features[np.where(test_labels[:] == 0), 0], test_features[np.where(test_labels[:] == 0), 1],
            marker='s', facecolors='b', edgecolors='w', label="A test")
plt.scatter(test_features[np.where(test_labels[:] == 1), 0], test_features[np.where(test_labels[:] == 1), 1],
            marker='o', facecolors='r', edgecolors='w', label="B test")

plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0.)
plt.title("Ad hoc dataset for classification")

plt.show()
../_images/tutorials_03_quantum_kernel_3_0.png

ZZFeatureMap kullanarak bir çekirdek matrisi hesaplamak için QuantumKernel sınıfını ve 1024 deneme kullanarak BasicAer ``qasm_simulator``ı yeniden çalıştırdık.

[3]:
adhoc_feature_map = ZZFeatureMap(feature_dimension=adhoc_dimension,
                                 reps=2, entanglement='linear')

adhoc_backend = QuantumInstance(BasicAer.get_backend('qasm_simulator'), shots=1024,
                                seed_simulator=seed, seed_transpiler=seed)

adhoc_kernel = QuantumKernel(feature_map=adhoc_feature_map, quantum_instance=adhoc_backend)

scikit-learn svc algoritması iki şekilde bir custom kernel tanımlamamıza olanak tanır: çekirdeği çağrılabilir bir fonksiyon olarak koşullayarak veya çekirdek matrisini önceden hesaplayarak.Bunlardan herhangi birini qiskit içindeki QuantumKernel sınıfını kullanarak yapabiliriz.

Takip eden kod, çekirdeği çağrılabilir bir fonksiyon olarak verir:

[4]:
adhoc_svc = SVC(kernel=adhoc_kernel.evaluate)
adhoc_svc.fit(train_features, train_labels)
adhoc_score = adhoc_svc.score(test_features, test_labels)

print(f'Callable kernel classification test score: {adhoc_score}')
Callable kernel classification test score: 1.0

Aşağıdaki kod, eğitim ve test çekirdek matrislerini scikit-learn svc algoritmasına sağlamadan evvel önceden hesaplar ve çizer:

[5]:
adhoc_matrix_train = adhoc_kernel.evaluate(x_vec=train_features)
adhoc_matrix_test = adhoc_kernel.evaluate(x_vec=test_features,
                                          y_vec=train_features)

fig, axs = plt.subplots(1, 2, figsize=(10, 5))
axs[0].imshow(np.asmatrix(adhoc_matrix_train),
              interpolation='nearest', origin='upper', cmap='Blues')
axs[0].set_title("Ad hoc training kernel matrix")
axs[1].imshow(np.asmatrix(adhoc_matrix_test),
              interpolation='nearest', origin='upper', cmap='Reds')
axs[1].set_title("Ad hoc testing kernel matrix")
plt.show()

adhoc_svc = SVC(kernel='precomputed')
adhoc_svc.fit(adhoc_matrix_train, train_labels)
adhoc_score = adhoc_svc.score(adhoc_matrix_test, test_labels)

print(f'Precomputed kernel classification test score: {adhoc_score}')
../_images/tutorials_03_quantum_kernel_9_0.png
Precomputed kernel classification test score: 1.0

qiskit ayrıca sklearn svc sınıfını genişleten qsvc sınıfını da içerir ve aşağıdaki gibi kullanılabilir:

[6]:
qsvc = QSVC(quantum_kernel=adhoc_kernel)
qsvc.fit(train_features, train_labels)
qsvc_score = qsvc.score(test_features, test_labels)

print(f'QSVC classification test score: {qsvc_score}')
QSVC classification test score: 1.0

Kümelemek

Kümeleme örneğimiz için, yine Supervised learning with quantum enhanced feature spaces bölümünde açıklandığı gibi ad hoc veri kümesini ve scikit-learn spectral kümeleme algoritmasını kullanacağız.

Veri kümesini iki sınıf arasında daha büyük bir boşlukla yeniden oluşturacağız ve kümeleme denetimsiz bir makine öğrenimi görevi olduğundan, bir test örneğine ihtiyacımız yok.

[7]:
adhoc_dimension = 2
train_features, train_labels, test_features, test_labels, adhoc_total = ad_hoc_data(
    training_size=25,
    test_size=0,
    n=adhoc_dimension,
    gap=0.6,
    plot_data=False, one_hot=False, include_sample_total=True
)

plt.figure(figsize=(5, 5))
plt.ylim(0, 2 * np.pi)
plt.xlim(0, 2 * np.pi)
plt.imshow(np.asmatrix(adhoc_total).T, interpolation='nearest',
           origin='lower', cmap='RdBu', extent=[0, 2 * np.pi, 0, 2 * np.pi])
plt.scatter(train_features[np.where(train_labels[:] == 0), 0], train_features[np.where(train_labels[:] == 0), 1],
            marker='s', facecolors='w', edgecolors='b', label="A")
plt.scatter(train_features[np.where(train_labels[:] == 1), 0], train_features[np.where(train_labels[:] == 1), 1],
            marker='o', facecolors='w', edgecolors='r', label="B")

plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0.)
plt.title("Ad hoc dataset for clustering")

plt.show()
../_images/tutorials_03_quantum_kernel_13_0.png

ZZFeatureMap kullanarak bir çekirdek matrisi hesaplamak için QuantumKernel sınıfını ve 1024 deneme kullanarak BasicAer ``qasm_simulator``ı yeniden çalıştırdık.

[8]:
adhoc_feature_map = ZZFeatureMap(feature_dimension=adhoc_dimension,
                                 reps=2, entanglement='linear')

adhoc_backend = QuantumInstance(BasicAer.get_backend('qasm_simulator'), shots=1024,
                                seed_simulator=seed, seed_transpiler=seed)

adhoc_kernel = QuantumKernel(feature_map=adhoc_feature_map, quantum_instance=adhoc_backend)

Scikit-learn spektral kümeleme algoritması, bir [özel çekirdek] tanımlamamızı iki şekilde sağlamaktadır: Çekirdeği çağrılabilir bir fonksiyon olarak temin ederek veya çekirdek matrisini önceden hesaplayarak sağlayabilir. Qiskit’te QuantumKernel sınıfını kullanarak, yalnızca ikincisini kullanabilmekteyiz.

The following code precomputes and plots the kernel matrices before providing it to the scikit-learn spectral clustering algorithm, and scoring the labels using normalized mutual information, since we a priori know the class labels.

[9]:
adhoc_matrix = adhoc_kernel.evaluate(x_vec=train_features)

plt.figure(figsize=(5, 5))
plt.imshow(np.asmatrix(adhoc_matrix), interpolation='nearest', origin='upper', cmap='Greens')
plt.title("Ad hoc clustering kernel matrix")
plt.show()

adhoc_spectral = SpectralClustering(2, affinity="precomputed")
cluster_labels = adhoc_spectral.fit_predict(adhoc_matrix)
cluster_score = normalized_mutual_info_score(cluster_labels, train_labels)

print(f'Clustering score: {cluster_score}')
../_images/tutorials_03_quantum_kernel_17_0.png
Clustering score: 0.7287008798015754

scikit-learn önceden hesaplanmış bir çekirdek matrisi kullanabilen başka algoritmalara sahiptir, işte birkaçı:

[10]:
import qiskit.tools.jupyter
%qiskit_version_table
%qiskit_copyright

Version Information

Qiskit SoftwareVersion
QiskitNone
Terra0.17.0
Aer0.8.0
Ignis0.5.2
AquaNone
IBM Q ProviderNone
System information
Python3.7.9 (default, Aug 31 2020, 17:10:11) [MSC v.1916 64 bit (AMD64)]
OSWindows
CPUs4
Memory (Gb)31.837730407714844
Thu Apr 01 00:57:12 2021 GMT Daylight Time

This code is a part of Qiskit

© Copyright IBM 2017, 2021.

This code is licensed under the Apache License, Version 2.0. You may
obtain a copy of this license in the LICENSE.txt file in the root directory
of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.

Any modifications or derivative works of this code must retain this
copyright notice, and modified files need to carry a notice indicating
that they have been altered from the originals.