Skip to content

Commit b133822

Browse files
committed
coding
1 parent 302681e commit b133822

File tree

2 files changed

+101
-0
lines changed

2 files changed

+101
-0
lines changed

doc/src/week13/programs/qsvmq.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# Custom Kernel Function: The custom_kernel function uses the Radial
2+
# Basis Function (RBF) kernel to mimic the behavior of a quantum
3+
# feature map. In a real QSVM, this would be replaced by a quantum
4+
# kernel computed from a quantum circuit.
5+
6+
# Training and Evaluation: The SVM is trained using the custom kernel,
7+
# and its performance is evaluated on the test set. This approach
8+
# approximates the behavior of a QSVM using classical methods. It does
9+
# not provide the potential computational advantages that a true QSVM
10+
# might offer when run on quantum hardware.
11+
12+
from sklearn import datasets
13+
from sklearn.model_selection import train_test_split
14+
from sklearn.preprocessing import StandardScaler
15+
from sklearn.svm import SVC
16+
from sklearn.metrics import accuracy_score
17+
18+
# Load dataset
19+
iris = datasets.load_iris()
20+
X, y = iris.data, iris.target
21+
22+
# For simplicity, select only two classes
23+
X, y = X[y != 2], y[y != 2]
24+
25+
# Standardize features
26+
scaler = StandardScaler()
27+
X = scaler.fit_transform(X)
28+
29+
# Split into training and testing sets
30+
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
31+
32+
# Train classical SVM
33+
clf = SVC(kernel='linear')
34+
clf.fit(X_train, y_train)
35+
36+
# Predict and evaluate
37+
y_pred = clf.predict(X_test)
38+
accuracy = accuracy_score(y_test, y_pred)
39+
print(f'Classical SVM Accuracy: {accuracy * 100:.2f}%')
40+
41+
# Quantum kernels map input data into a higher-dimensional space using
42+
# quantum operations. While we can’t perform true quantum operations
43+
# without a quantum simulator or hardware, we can simulate the effect
44+
# of a quantum feature map using custom kernel functions.
45+
46+
import numpy as np
47+
from sklearn.metrics.pairwise import rbf_kernel
48+
from sklearn.svm import SVC
49+
50+
# Define a custom kernel function to simulate a quantum feature map
51+
def custom_kernel(X, Y):
52+
return rbf_kernel(X, Y, gamma=0.5) # Using RBF kernel as an example
53+
54+
# Train SVM with the custom kernel
55+
clf_qsvm = SVC(kernel=custom_kernel)
56+
clf_qsvm.fit(X_train, y_train)
57+
58+
# Predict and evaluate
59+
y_pred_qsvm = clf_qsvm.predict(X_test)
60+
accuracy_qsvm = accuracy_score(y_test, y_pred_qsvm)
61+
print(f'Simulated QSVM Accuracy: {accuracy_qsvm * 100:.2f}%')
62+
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from qiskit import BasicAer
2+
from qiskit.utils import QuantumInstance
3+
from qiskit.circuit.library import ZZFeatureMap
4+
from qiskit_machine_learning.algorithms import QSVC
5+
from sklearn.model_selection import train_test_split
6+
from sklearn.datasets import load_iris
7+
from sklearn.preprocessing import StandardScaler
8+
9+
# Load and preprocess dataset
10+
dataset = load_iris()
11+
X = dataset.data
12+
y = dataset.target
13+
14+
# For simplicity, we'll only classify between two classes
15+
X = X[y != 2]
16+
y = y[y != 2]
17+
18+
# Standardize features
19+
scaler = StandardScaler()
20+
X = scaler.fit_transform(X)
21+
22+
# Split into training and test sets
23+
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
24+
25+
# Define quantum feature map
26+
feature_map = ZZFeatureMap(feature_dimension=4, reps=2)
27+
28+
# Set up quantum instance
29+
quantum_instance = QuantumInstance(BasicAer.get_backend('qasm_simulator'), shots=1024)
30+
31+
# Initialize QSVC
32+
qsvc = QSVC(quantum_instance=quantum_instance, feature_map=feature_map)
33+
34+
# Train QSVC
35+
qsvc.fit(X_train, y_train)
36+
37+
# Evaluate QSVC
38+
accuracy = qsvc.score(X_test, y_test)
39+
print(f'QSVC accuracy: {accuracy * 100:.2f}%')

0 commit comments

Comments
 (0)