Wolfram Language Paclet Repository

Community-contributed installable additions to the Wolfram Language

Primary Navigation

    • Cloud & Deployment
    • Core Language & Structure
    • Data Manipulation & Analysis
    • Engineering Data & Computation
    • External Interfaces & Connections
    • Financial Data & Computation
    • Geographic Data & Computation
    • Geometry
    • Graphs & Networks
    • Higher Mathematical Computation
    • Images
    • Knowledge Representation & Natural Language
    • Machine Learning
    • Notebook Documents & Presentation
    • Scientific and Medical Data & Computation
    • Social, Cultural & Linguistic Data
    • Strings & Text
    • Symbolic & Numeric Computation
    • System Operation & Setup
    • Time-Related Computation
    • User Interface Construction
    • Visualization & Graphics
    • Random Paclet
    • Alphabetical List
  • Using Paclets
    • Get Started
    • Download Definition Notebook
  • Learn More about Wolfram Language

QuantumPlaybook

Guides

  • QuantumPlaybook

Tech Notes

  • Addition of Numbers
  • Baker-Hausdorff Lemma
  • Chiral Fermion Random Circuit
  • Clifford Operators: How to Test
  • Commutation Relations for Qubits
  • Entanglement Distillation
  • Generalized Pauli Operators: Implementation
  • Hatano-Nelson-Kitaev Model: Monte Carlo Simulation
  • Hatano-Nelson Model: Monte Carlo Simulation
  • Kitaev Chain
  • Kitaev Random Circuit
  • Λ-Matter in a Cavity
  • Measurement of Total Pauli Z
  • Non-Unitary Dynamics of Quantum States
  • Partial Trace: Physical Meaning
  • Quantum Dot Systems
  • A Quantum Playbook
  • Magnetic Exchange Coupling
  • Solovay-Kitaev Algorithm
  • Spin Code
  • Symmetry Effects On Quantum Master Equations
  • Transmon: Quantum Phase Model
  • Transposition as a Supermap
  • Variational Quantum Classifier: Iris
  • Variational Quantum Classifier: Parity
  • Variational Quantum Eigensolver: Transverse-Field Ising Model

Symbols

  • BlochEnergy
  • BlochFunction
  • QuantumPlaybookCheckUpdate
  • QuantumPlaybookEdition
  • QuantumPlaybookUpdate
  • TransmonEnergy
  • TransmonExponent
  • TransmonFunction
  • TransmonHamiltonian
Variational Quantum Classifier: Iris
Amplitude Embedding: Method
Quantum Circuit Layer
Data
Optimization
This demonstration is a translation of the tutorial “
Variational classifier
” in PennyLane by Maria Schuld. It demonstrates variational quantum classifiers; that is, quantum circuits that can be trained from labelled data to classify new data samples.
In particular, we will see how to encode real vectors as amplitude vectors (amplitude encoding) and train the model to recognize the first two classes of flowers in the Iris dataset.
AmplitudeEmbedding
Encodes data into amplitudes of a quantum state
AmplitudeEmbeddingGate
Quantum circuit model to implement amplitude embedding
FindMinimum
Find the minimum of a function
Frequently used function in variational classification.
Make sure to load the Q3 package.
In[487]:=
Needs["QuantumMob`Q3`"]
Amplitude Embedding: Method
In[488]:=
Let[Qubit,S]
In[489]:=
$n=2;​​$N=Power[2,$n];​​kk=Range[$n];​​SS=S[kk,$]
Out[492]=
{
S
1
,
S
2
}
Get the data.
In[493]:=
aa=Normalize@RandomReal[{0,1},$N]
Out[493]=
{0.18426,0.535389,0.670164,0.479883}
Embed the data into a quantum state.
In[494]:=
in=AmplitudeEmbedding[aa,SS]
Out[494]=
0.18426
0
S
1
0
S
2
+0.535389
0
S
1
1
S
2
+0.670164
1
S
1
0
S
2
+0.479883
1
S
1
1
S
2


Quantum circuit implementation

Embedding the data into a quantum state as above on actual quantum computer is not trivial. One implementation based on quantum circuit model may be achieved by the following function.
In[508]:=
op=AmplitudeEmbeddingGate[aa,SS]
Out[508]=
AmplitudeEmbeddingGate[{0.18426,0.535389,0.670164,0.479883},{
S
1
,
S
2
}]
In[509]:=
QuantumCircuit[op]
Out[509]=
More explicitly, the above quantum circuit is equivalent to the following.
In[510]:=
QuantumCircuit[ExpandAll@op]
Out[510]=
The above quantum circuit may be further simplified.
In[511]:=
qc=QuantumCircuit[GateFactor/@Expand@op]
Out[511]=
In[502]:=
new=qc**Ket[SS]//Chop
Out[502]=
0.18426
0
S
1
0
S
2
+0.535389
0
S
1
1
S
2
+0.670164
1
S
1
0
S
2
+0.479883
1
S
1
1
S
2

In[503]:=
Fidelity[new,in]
Out[503]=
1.
Data

Data loading and embedding

Import the iris date and check the first three entries.
In[33]:=
raw=Import[PacletObject["QuantumPlaybook"]["AssetLocation","Iris"],"Table"];​​raw=Map[Most[#]Round[Last@#]&,raw];​​raw〚;;3〛
Out[35]=
{{0.399999999999999911,0.750000000000000000,0.199999999999999956,0.05000000000000000278}-1,{0.300000000000000267,0.5000000000000000000,0.199999999999999956,0.05000000000000000278}-1,{0.2000000000000001776,0.600000000000000089,0.150000000000000022,0.05000000000000000278}-1}
Renormalize the data.
In[81]:=
data=Thread[Map[Normalize@Join[Take[#,2],0.3{1,0}]&,Keys@raw]Values[raw]];​​data〚1〛
Out[82]=
{0.44376,0.83205,0.33282,0.}-1
Here, vector representation is nothing but the input data itself since we just simulate the amplitude embedding.
In[83]:=
(*​​in=AmplitudeEmbedding[#,SS]&/@Keys[data]//Chop;​​in=Matrix[in,SS];​​*)​​$in=Keys[data];

Features

In[40]:=
gg=Map[Take[#,2]&,GroupBy[raw,Last,Map[First]],{2}];​​Graphics[{PointSize[0.02],Red,Point/@gg[1],Blue,Point/@gg[-1]},​​PlotLabel"Original",​​ImageSizeMedium,​​FrameTrue]
Out[41]=
In[42]:=
gg=Map[Take[#,2]&,GroupBy[data,Last,Map[First]],{2}];​​Graphics[{PointSize[0.02],Red,Point/@gg[1],Blue,Point/@gg[-1]},​​PlotLabel"Renormalized",​​ImageSizeMedium,​​FrameTrue]
Out[43]=
Quantum Circuit Layer
Construct the basic quantum circuit layer to use.
Check it by show two layers.
Optimization

Using three layers

Find the optimal values of the parameters iteratively.
From the optimized parameters, make predictions.

Using five layers

Find the optimal values of the parameters iteratively.
From the optimized parameters, make predictions.

© 2025 Wolfram. All rights reserved.

  • Legal & Privacy Policy
  • Contact Us
  • WolframAlpha.com
  • WolframCloud.com