This link https://qiskit.org/documentation/machine-learning/stubs/qiskit_machine_learning.kernels.QuantumKernel.construct_circuit.html#qiskit_machine_learning.kernels.QuantumKernel.construct_circuit tells us that the circuit can be built automatically, but an error was found after using it, how can I solve it?
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
seed = 12345
X_data = np.array([[1,2,7,12],[3,7,7,11],[12,18,7,90]])
Y_data = np.array([[1,12,7,22],[3,71,7,111],[12,118,7,90]])
y_train = np.array([12,5,9])
print(X_data.shape[0],X_data.shape[1])
qbits = X_data.shape[0]
ansatz0 = ZZFeatureMap(feature_dimension=qbits, insert_barriers = True, name = 'Quantum Kernel',reps=1, parameter_prefix='x')
ansatz1 = ZZFeatureMap(feature_dimension=qbits, insert_barriers = True, name = 'Quantum Kernel',reps=1, parameter_prefix='y').inverse()
qc = ansatz0.compose(ansatz1)
qc.draw('mpl')
QI = QuantumInstance(BasicAer.get_backend("qasm_simulator"), shots=1024, seed_simulator=seed, seed_transpiler=seed)
qk = QuantumKernel(feature_map=ansatz0, quantum_instance=QI)
qc = qk.construct_circuit(x=X_data, y=Y_data, is_statevector_sim = False)
qc.draw('mpl')
OUT:
3 4
---------------------------------------------------------------------------
CircuitError Traceback (most recent call last)
Input In [323], in <cell line: 18>()
16 QI = QuantumInstance(BasicAer.get_backend("qasm_simulator"), shots=1024, seed_simulator=seed, seed_transpiler=seed)
17 qk = QuantumKernel(feature_map=ansatz0, quantum_instance=QI)
---> 18 qc = qk.construct_circuit(x=X_data, y=Y_data, is_statevector_sim = False)
19 qc.draw('mpl')
File d:\miniconda3\lib\site-packages\qiskit_machine_learning\kernels\quantum_kernel.py:317, in QuantumKernel.construct_circuit(self, x, y, measurement, is_statevector_sim)
314 qc = QuantumCircuit(q, c)
316 x_dict = dict(zip(self._feature_map.parameters, x))
--> 317 psi_x = self._feature_map.assign_parameters(x_dict)
318 qc.append(psi_x.to_instruction(), qc.qubits)
320 if not is_statevector_sim:
File d:\miniconda3\lib\site-packages\qiskit\circuit\library\n_local\n_local.py:810, in NLocal.assign_parameters(self, parameters, inplace)
807 if not self._is_built:
808 self._build()
--> 810 return super().assign_parameters(parameters, inplace=inplace)
File d:\miniconda3\lib\site-packages\qiskit\circuit\quantumcircuit.py:2663, in QuantumCircuit.assign_parameters(self, parameters, inplace)
2661 # replace the parameters with a new Parameter ("substitute") or numeric value ("bind")
2662 for parameter, value in unrolled_param_dict.items():
-> 2663 bound_circuit._assign_parameter(parameter, value)
2664 else:
2665 if len(parameters) != self.num_parameters:
File d:\miniconda3\lib\site-packages\qiskit\circuit\quantumcircuit.py:2749, in QuantumCircuit._assign_parameter(self, parameter, value)
2747 # Normal ParameterExpression.
2748 if isinstance(assignee, ParameterExpression):
-> 2749 new_param = assignee.assign(parameter, value)
2750 # if fully bound, validate
2751 if len(new_param.parameters) == 0:
File d:\miniconda3\lib\site-packages\qiskit\circuit\parameterexpression.py:91, in ParameterExpression.assign(self, parameter, value)
89 if isinstance(value, ParameterExpression):
90 return self.subs({parameter: value})
---> 91 return self.bind({parameter: value})
File d:\miniconda3\lib\site-packages\qiskit\circuit\parameterexpression.py:113, in ParameterExpression.bind(self, parameter_values)
94 """Binds the provided set of parameters to their corresponding values.
95
96 Args:
(...)
109 parameter_values.
110 """
112 self._raise_if_passed_unknown_parameters(parameter_values.keys())
--> 113 self._raise_if_passed_nan(parameter_values)
115 symbol_values = {}
116 for parameter, value in parameter_values.items():
File d:\miniconda3\lib\site-packages\qiskit\circuit\parameterexpression.py:207, in ParameterExpression._raise_if_passed_nan(self, parameter_values)
203 nan_parameter_values = {
204 p: v for p, v in parameter_values.items() if not isinstance(v, numbers.Number)
205 }
206 if nan_parameter_values:
--> 207 raise CircuitError(
208 f"Expression cannot bind non-numeric values ({nan_parameter_values})"
209 )
CircuitError: 'Expression cannot bind non-numeric values ({ParameterVectorElement(x[0]): array([ 1, 2, 7, 12])})'