Tamil
மொழிகள்
English
Bengali
French
Hindi
Italian
Japanese
Korean
Malayalam
Russian
Spanish
Tamil
Turkish
Vietnamese
Shortcuts

Note

இந்தப் பக்கம் docs/tutorials/03_quantum_kernel.ipynb இலிருந்து உருவாக்கப்பட்டது.

குவாண்டம் கர்னல் இயந்திர வழி கற்றல்

இயந்திர கற்றலின் பொதுவான பணி தரவுகளில் வடிவங்களைக் கண்டறிந்து படிப்பதாகும். பல தரவுத்தொகுப்புகளுக்கு, ஒரு கர்னல் செயல்பாட்டின் மூலம் தரவு புள்ளிகள் உயர் பரிமாண அம்ச இடத்தில் நன்கு புரிந்து கொள்ளப்படுகின்றன: \(k(\vec{x}_i, \vec{x}_j) = \langle f(\vec{x}_i), f(\vec{x}_j) \rangle\) where \(k\) என்பது கர்னல் செயல்பாடு ,:math:vec{x}_i, vec{x}_j are \(n\) பரிமாண உள்ளீடுகள் ,:math:f என்பது ஒரு வரைபடம் \(n\)- பரிமாணத்திலிருந்து \(m\) பரிமாண இடைவெளி மற்றும் \(\langle a,b \rangle\) புள்ளி தயாரிப்பு குறிக்கிறது. வரையறுக்கப்பட்ட தரவைக் கருத்தில் கொள்ளும்போது, ​​ஒரு கர்னல் செயல்பாட்டை மேட்ரிக்ஸாகக் குறிப்பிடலாம் : \(K_{ij} = k(\vec{x}_i,\vec{x}_j)\).

குவாண்டம் கர்னல் இயந்திர கற்றலில், ஒரு குவாண்டம் அம்ச வரைபடம் \(\phi(\vec{x})\) ஒரு கிளாசிக்கல் அம்ச திசையன் வரைபடத்தை பயன்படுத்தப்படுகிறது \(\vec{x}\) ஒரு குவாண்டம் ஹில்பர்ட் இடத்திற்கு ,:math:| phi(vec{x})rangle langle phi(vec{x})|, அதாவது \(K_{ij} = \left| \langle \phi^\dagger(\vec{x}_j)| \phi(\vec{x}_i) \rangle \right|^{2}\). மேலும் விவரங்களுக்கு குவாண்டம் மேம்படுத்தப்பட்ட அம்ச இடைவெளிகளுடன் மேற்பார்வையிடப்பட்ட கற்றல் ஐப் பார்க்கவும்.

இந்த நோட்புக்கில், ஒரு குவாண்டம் அம்ச வரைபடத்தைப் பயன்படுத்தி கர்னல் மேட்ரிக்ஸைக் கணக்கிட qiskit ஐப் பயன்படுத்துகிறோம், பின்னர் இந்த கர்னல் மேட்ரிக்ஸை scikit-learn வகைப்பாடு மற்றும் கிளஸ்டரிங் வழிமுறைகளில் பயன்படுத்துகிறோம்.

[3]:
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

வகைப்படுத்துதல்

எங்கள் வகைப்பாடு எடுத்துக்காட்டுக்கு, குவாண்டம் மேம்படுத்தப்பட்ட அம்ச இடைவெளிகளுடன் கற்றல் மேற்பார்வை, மற்றும் scikit-learn ஆதரவு திசையன் இயந்திரம் வகைப்பாடு (svc) வழிமுறை ஆகியவற்றைக் கொண்டு விவரிக்கப்பட்டுள்ளபடி ad hoc dataset ஐ பயன்படுத்துவோம்.

[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.0)
plt.title("Ad hoc dataset for classification")

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

எங்கள் பயிற்சி மற்றும் சோதனை தரவுத்தொகுப்புகள் தயாராக இருப்பதால், ZZFeatureMap ஐப் பயன்படுத்தி கர்னல் மேட்ரிக்ஸைக் கணக்கிட QuantumKernel வகுப்பை அமைத்துள்ளோம், மற்றும் 1024 காட்சிகளைப் பயன்படுத்தி BasicAer qasm_simulator.

[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 வழிமுறை ஒரு custom kernel ஐ இரண்டு வழிகளில் வரையறுக்க அனுமதிக்கிறது: கர்னலை அழைக்கக்கூடிய செயல்பாடாக வழங்குவதன் மூலம் அல்லது கர்னல் மேட்ரிக்ஸை முன்கூட்டியே கணக்கிடுவதன் மூலம். Qiskit இல் QuantumKernel வகுப்பைப் பயன்படுத்தி இவற்றில் ஒன்றை நாம் செய்யலாம்.

பின்வரும் குறியீடு கர்னலை அழைக்கக்கூடிய செயல்பாடாக வழங்குகிறது:

[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

பின்வரும் குறியீடு பயிற்சி மற்றும் சோதனை கர்னல் மெட்ரிக்குகளை scikit-learn svc அல்காரிதத்திற்கு வழங்குவதற்கு முன் முன்வைத்து திட்டமிடுகிறது:

[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 இல் sklearn svc வகுப்பை நீட்டிக்கும் qsvc வகுப்பும் உள்ளது, அவை பின்வருமாறு பயன்படுத்தப்படலாம்:

[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

கிளஸ்டரிங்

எங்கள் கிளஸ்டரிங் எடுத்துக்காட்டுக்கு, குவாண்டம் மேம்படுத்தப்பட்ட அம்ச இடைவெளிகளுடன் <https://arxiv.org/pdf/1804.11326.pdf>`__, மற்றும் scikit-learn- spectral க்ளஸ்டரிங் அல்காரிதம் கற்றுக்கொள்ளுங்கள்.

தரவுத்தொகுப்பை இரண்டு வகுப்புகளுக்கு இடையில் ஒரு பெரிய இடைவெளியுடன் மீண்டும் உருவாக்குவோம், மேலும் க்ளஸ்டரிங் ஒரு மேற்பார்வை செய்யப்படாத இயந்திர கற்றல் பணியாக இருப்பதால், எங்களுக்கு ஒரு சோதனை மாதிரி தேவையில்லை.

[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.0)
plt.title("Ad hoc dataset for clustering")

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

ZZFeatureMap, மற்றும் BasicAer ஐப் பயன்படுத்தி கர்னல் மேட்ரிக்ஸைக் கணக்கிட QuantumKernel வகுப்பை மீண்டும் அமைத்தோம். 1024 காட்சிகளைப் பயன்படுத்தி qasm_simulator.

[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)

ஸ்கிக்கிட்-லர் ஸ்பெக்ட்ரல் க்ளஸ்டரிங் அல்காரிதம் ஒரு [தனிப்பயன் கர்னலை] இரண்டு வழிகளில் வரையறுக்க அனுமதிக்கிறது: கர்னலை அழைக்கக்கூடிய செயல்பாடாக வழங்குவதன் மூலம் அல்லது கர்னல் மேட்ரிக்ஸை முன்கூட்டியே கணக்கிடுவதன் மூலம். Qiskit-டில் குவாண்டம் கர்னல் வகுப்பைப் பயன்படுத்தி, பிந்தையதை மட்டுமே பயன்படுத்த முடியும்.

பின்வரும் குறியீடு கர்னல் மெட்ரிக்ஸை சிக்ஸ்கிட்-லர்ன் ஸ்பெக்ட்ரல் clustering வழிமுறைகளுக்கு வழங்குவதற்கு முன் அளிக்கிறது, மற்றும் இயல்பான பரஸ்பர தகவலைப் பயன்படுத்தி அடையாளக் குறியீட்டுகளை அடித்தல்.

[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 க்கு முன்பே வடிவமைக்கப்பட்ட கர்னல் மேட்ரிக்ஸைப் பயன்படுத்தக்கூடிய பிற வழிமுறைகள் உள்ளன, இங்கே சில:

[1]:
import qiskit.tools.jupyter

%qiskit_version_table
%qiskit_copyright

Version Information

Qiskit SoftwareVersion
qiskit-terra0.19.0
qiskit-aer0.8.2
qiskit-ignis0.6.0
qiskit-aqua0.9.2
qiskit0.27.0
qiskit-machine-learning0.3.0
System information
Python3.7.9 (default, Aug 31 2020, 17:10:11) [MSC v.1916 64 bit (AMD64)]
OSWindows
CPUs4
Memory (Gb)31.837730407714844
Fri Dec 03 15:08:20 2021 GMT Standard 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.