# What additional options are available in CDR?#

In addition to the four necessary ingredients shown in How do I use CDR?, there are additional parameters in CDR.

One option is how many circuits are in the training set (default is 10). This can be changed as follows.

```import warnings
warnings.filterwarnings("ignore")

import numpy as np

import cirq
from mitiq import cdr, Observable, PauliString
from mitiq.interface.mitiq_cirq import compute_density_matrix

a, b = cirq.LineQubit.range(2)
circuit = cirq.Circuit(
cirq.H.on(a), # Clifford
cirq.H.on(b), # Clifford
cirq.rz(1.75).on(a),
cirq.rz(2.31).on(b),
cirq.CNOT.on(a, b),  # Clifford
cirq.rz(-1.17).on(b),
cirq.rz(3.23).on(a),
cirq.rx(np.pi / 2).on(a),  # Clifford
cirq.rx(np.pi / 2).on(b),  # Clifford
)
circuit = 5 * circuit

obs = Observable(PauliString("ZZ"), PauliString("X", coeff=-1.75))

def simulate(circuit: cirq.Circuit) -> np.ndarray:
return compute_density_matrix(circuit, noise_level=(0.0,))

cdr.execute_with_cdr(
circuit,
compute_density_matrix,
observable=obs,
simulator=simulate,
seed=0,
num_training_circuits=20,
).real
```
```1.0289710216444377
```

## Fit function#

Another option is which fit function to use for regression (default is `cdr.linear_fit_function()`).

```cdr.execute_with_cdr(
circuit,
compute_density_matrix,
observable=obs,
simulator=simulate,
seed=0,
fit_function=cdr.linear_fit_function_no_intercept,
).real
```
```1.0297313552824006
```

Beyond the built-in `cdr.linear_fit_function()` and `cdr.linear_fit_function_no_intercept()`, the user could also define other custom functions.

## Variable noise CDR#

The `circuit` and the associated training circuits can also be run at different noise scale factors to implement variable noise Clifford data regression [2].

```from mitiq.zne import scaling

cdr.execute_with_cdr(
circuit,
compute_density_matrix,
observable=obs,
simulator=simulate,
seed=0,
scale_factors=(1.0, 3.0),
).real
```
```1.0294348861413898
```