Skip to content

Commit f52008c

Browse files
committed
adding code on qsvm
1 parent e40cbb7 commit f52008c

File tree

2 files changed

+977
-0
lines changed

2 files changed

+977
-0
lines changed

doc/src/week14/programs/qsvm1.py

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import pennylane as qml
2+
from pennylane import numpy as np
3+
4+
from sklearn.model_selection import train_test_split
5+
import pandas as pd
6+
7+
from sklearn.metrics import accuracy_score
8+
from sklearn.metrics import f1_score, precision_score, recall_score
9+
10+
from sklearn.svm import SVC
11+
12+
num_qubits = 4
13+
14+
def layer(x):
15+
16+
qml.BasisEmbedding(x, wires=range(num_qubits))
17+
18+
for j, wire in enumerate(wires):
19+
qml.Hadamard(wires=[wire])
20+
if j != num_qubits-1:
21+
qml.CNOT(wires=[j, j+1])
22+
else:
23+
qml.CNOT(wires=[j, 0])
24+
25+
def ansatz(x, wires):
26+
layer(x)
27+
28+
adjoint_ansatz = qml.adjoint(ansatz)
29+
30+
dev = qml.device("default.qubit", wires=num_qubits, shots=None)
31+
wires = dev.wires.tolist()
32+
33+
@qml.qnode(dev, interface="autograd")
34+
def kernel_circuit(x1, x2):
35+
ansatz(x1, wires=wires)
36+
adjoint_ansatz(x2, wires=wires)
37+
return qml.probs(wires=wires)
38+
39+
def kernel(x1, x2):
40+
return kernel_circuit(x1, x2)[0]
41+
42+
df_train = pd.read_csv('titanic.csv')
43+
44+
df_train['Pclass'] = df_train['Pclass'].astype(str)
45+
46+
df_train = pd.concat([df_train, pd.get_dummies(df_train[['Pclass', 'Sex', 'Embarked']])], axis=1)
47+
48+
X_train, X_test, y_train, y_test = train_test_split(df_train.drop(columns=['Survived']), df_train['Survived'], test_size=0.10, random_state=42, stratify=df_train['Survived'])
49+
50+
X_train['Age'] = X_train['Age'].fillna(X_train['Age'].median())
51+
X_test['Age'] = X_test['Age'].fillna(X_test['Age'].median())
52+
53+
X_train['is_child'] = X_train['Age'].map(lambda x: 1 if x < 12 else 0)
54+
X_test['is_child'] = X_test['Age'].map(lambda x: 1 if x < 12 else 0)
55+
56+
cols_model = ['is_child', 'Pclass_1', 'Pclass_2', 'Sex_female']
57+
58+
X_train = X_train[cols_model]
59+
X_test = X_test[cols_model]
60+
61+
X_train = np.array(X_train.values, requires_grad=False)
62+
63+
init_kernel = lambda x1, x2: kernel(x1, x2)
64+
K = qml.kernels.square_kernel_matrix(X_train, init_kernel, assume_normalized_kernel=True)
65+
66+
svm = SVC(kernel=lambda X1, X2: qml.kernels.kernel_matrix(X1, X2, init_kernel)).fit(X_train, y_train)
67+
68+
X_test = np.array(X_test.values, requires_grad=False)
69+
70+
predictions = svm.predict(X_test)
71+
72+
accuracy_score(y_test, predictions)
73+
precision_score(y_test, predictions)
74+
recall_score(y_test, predictions)
75+
f1_score(y_test, predictions, average='macro')
76+
77+
svm1 = SVC(gamma='auto', kernel='rbf')
78+
svm1.fit(X_train, y_train)
79+
80+
y_pred = svm1.predict(X_test)
81+
82+
accuracy_score(y_test, y_pred)
83+
precision_score(y_test, y_pred)
84+
recall_score(y_test, y_pred)
85+
f1_score(y_test, y_pred, average='macro')

0 commit comments

Comments
 (0)