> ## Documentation Index
> Fetch the complete documentation index at: https://docs.priorlabs.ai/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> TabPFN-3 and later versions support up to 1,000,000 rows, subject to feature count and checkpoint/API limits.
> For large datasets, use per-estimator subsampling, e.g. inference_config={"SUBSAMPLE_SAMPLES": 100_000}, in TabPFNClassifier or TabPFNRegressor from tabpfn or tabpfn_client.
> Pass raw pandas DataFrames to fit and predict. Categorical strings/categories, raw text, and missing feature values are handled automatically; no manual integer/one-hot encoding, imputation, scaling, or outlier removal is needed.

# Model and fitting

> TabPFN experiments model for imputation, outlier detection, and synthetic data generation.

<Info>
  Looking for usage documentation? Check out [Data generation](/capabilities/data-generation) and [Anomaly detection](/capabilities/anomaly-detection).
</Info>

<div className="python-reference-heading">
  <h2 id="unsupervised-unsupervised-tabpfnunsupervisedmodel">
    `TabPFNUnsupervisedModel`
  </h2>

  <a className="python-reference-source" href="https://github.com/PriorLabs/tabpfn-extensions/blob/840c15a1848a986b39c85bc17efc61e0e377f983/src/tabpfn_extensions/unsupervised/unsupervised.py#L110" aria-label="View source for TabPFNUnsupervisedModel"><span aria-hidden="true">\</></span> View source <span aria-hidden="true">↗</span></a>
</div>

TabPFN experiments model for imputation, outlier detection, and synthetic data generation.

This model combines a TabPFNClassifier for categorical features and a TabPFNRegressor for
numerical features to perform various experiments learning tasks on tabular data.

Examples:

```python title="Example" theme={null}
>>> tabpfn_clf = TabPFNClassifier()
>>> tabpfn_reg = TabPFNRegressor()
>>> model = TabPFNUnsupervisedModel(tabpfn_clf, tabpfn_reg)
>>>
>>> X = [[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]
>>> model.fit(X)
>>>
>>> X_imputed = model.impute(X)
>>> X_outliers = model.outliers(X)
>>> X_synthetic = model.generate_synthetic_data(n_samples=100)
```

Initialize the `TabPFNUnsupervisedModel`.

```python theme={null}
TabPFNUnsupervisedModel(
    tabpfn_clf: TabPFNClassifier,
    tabpfn_reg: TabPFNRegressor,
)
```

**Parameters**

<div className="python-reference-table">
  | Parameter | Type | Default | Description |
  | - | - | - | - |
  | <span id="unsupervised-unsupervised-tabpfnunsupervisedmodel--tabpfn-clf" /><code className="python-reference-parameter">tabpfn\_<wbr />clf</code> | <code className="python-reference-type">Tab<wbr />PFN<wbr />Classifier</code> | Required | TabPFNClassifier instance for handling categorical features. If not provided, the model assumes that there are no categorical features in the data. |
  | <span id="unsupervised-unsupervised-tabpfnunsupervisedmodel--tabpfn-reg" /><code className="python-reference-parameter">tabpfn\_<wbr />reg</code> | <code className="python-reference-type">Tab<wbr />PFN<wbr />Regressor</code> | Required | TabPFNRegressor instance for handling numerical features. If not provided, the model assumes that there are no numerical features in the data. |
</div>

**Attributes**

| Attribute | Type | Description |
| - | - | - |
| `categorical_features` | <code className="python-reference-type">list\[int]</code> | List of indices of categorical features in the input data. |

**Raises**

`ValueError`

If both `tabpfn_clf` and `tabpfn_reg` are `None`.

***

<div className="python-reference-heading">
  <h2 id="unsupervised-unsupervised-tabpfnunsupervisedmodel-fit">
    `TabPFNUnsupervisedModel.fit`
  </h2>

  <a className="python-reference-source" href="https://github.com/PriorLabs/tabpfn-extensions/blob/840c15a1848a986b39c85bc17efc61e0e377f983/src/tabpfn_extensions/unsupervised/unsupervised.py#L261" aria-label="View source for TabPFNUnsupervisedModel.fit"><span aria-hidden="true">\</></span> View source <span aria-hidden="true">↗</span></a>
</div>

Fit the model to the input data.

```python theme={null}
TabPFNUnsupervisedModel.fit(
    X: np.ndarray | torch.Tensor | pd.DataFrame,
    y: np.ndarray | torch.Tensor | pd.Series | None = None,
) -> TabPFNUnsupervisedModel
```

**Parameters**

<div className="python-reference-table">
  | Parameter | Type | Default | Description |
  | - | - | - | - |
  | <span id="unsupervised-unsupervised-tabpfnunsupervisedmodel-fit--x" /><code className="python-reference-parameter">X</code> | <code className="python-reference-type"><a href="https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html">np.ndarray</a> \| torch.Tensor \| <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html">pd.Data<wbr />Frame</a></code> | Required | Union\[[`np.ndarray`](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html), torch.Tensor, [`pd.DataFrame`](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html)] Input data to fit the model, shape (n\_samples, n\_features). |
  | <span id="unsupervised-unsupervised-tabpfnunsupervisedmodel-fit--y" /><code className="python-reference-parameter">y</code> | <code className="python-reference-type"><a href="https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html">np.ndarray</a> \| torch.Tensor \| <a href="https://pandas.pydata.org/docs/reference/api/pandas.Series.html">pd.Series</a> \| None</code> | `None` | Optional\[Union\[[`np.ndarray`](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html), torch.Tensor, [`pd.Series`](https://pandas.pydata.org/docs/reference/api/pandas.Series.html)]], default=`None` Target values, shape (n\_samples,). Optional since this is an unsupervised model. |
</div>

**Returns**

<div className="python-reference-table python-reference-returns">
  | Type | Description |
  | - | - |
  | <code className="python-reference-type"><a href="/api-reference/python/tabpfn-extensions/unsupervised/model#unsupervised-unsupervised-tabpfnunsupervisedmodel">Tab<wbr />PFN<wbr />Unsupervised<wbr />Model</a></code> | [`TabPFNUnsupervisedModel`](/api-reference/python/tabpfn-extensions/unsupervised/model#unsupervised-unsupervised-tabpfnunsupervisedmodel)     Fitted model instance (self). |
</div>

***

<div className="python-reference-heading">
  <h2 id="unsupervised-unsupervised-tabpfnunsupervisedmodel-init-model-and-get-model-config">
    `TabPFNUnsupervisedModel.init_model_and_get_model_config`
  </h2>

  <a className="python-reference-source" href="https://github.com/PriorLabs/tabpfn-extensions/blob/840c15a1848a986b39c85bc17efc61e0e377f983/src/tabpfn_extensions/unsupervised/unsupervised.py#L204" aria-label="View source for TabPFNUnsupervisedModel.init_model_and_get_model_config"><span aria-hidden="true">\</></span> View source <span aria-hidden="true">↗</span></a>
</div>

Initialize TabPFN models for use in unsupervised learning.

This function provides compatibility with different TabPFN implementations.
It tries to initialize the model using the appropriate method based on the
TabPFN implementation in use.

```python theme={null}
TabPFNUnsupervisedModel.init_model_and_get_model_config() -> None
```

**Raises**

`RuntimeError`

If model initialization fails

**Returns**

<div className="python-reference-table python-reference-returns">
  | Type | Description |
  | - | - |
  | <code className="python-reference-type">None</code> | — |
</div>

***

<div className="python-reference-heading">
  <h2 id="unsupervised-unsupervised-tabpfnunsupervisedmodel-set-categorical-features">
    `TabPFNUnsupervisedModel.set_categorical_features`
  </h2>

  <a className="python-reference-source" href="https://github.com/PriorLabs/tabpfn-extensions/blob/840c15a1848a986b39c85bc17efc61e0e377f983/src/tabpfn_extensions/unsupervised/unsupervised.py#L181" aria-label="View source for TabPFNUnsupervisedModel.set_categorical_features"><span aria-hidden="true">\</></span> View source <span aria-hidden="true">↗</span></a>
</div>

Set categorical feature indices for the model.

```python theme={null}
TabPFNUnsupervisedModel.set_categorical_features(
    categorical_features: list[int],
) -> None
```

**Parameters**

<div className="python-reference-table">
  | Parameter | Type | Default | Description |
  | - | - | - | - |
  | <span id="unsupervised-unsupervised-tabpfnunsupervisedmodel-set-categorical-features--categorical-features" /><code className="python-reference-parameter">categorical\_<wbr />features</code> | <code className="python-reference-type">list\[int]</code> | Required | List of indices of categorical features |
</div>

**Returns**

<div className="python-reference-table python-reference-returns">
  | Type | Description |
  | - | - |
  | <code className="python-reference-type">None</code> | — |
</div>

***

<div className="python-reference-heading">
  <h2 id="unsupervised-unsupervised-tabpfnunsupervisedmodel-use-classifier">
    `TabPFNUnsupervisedModel.use_classifier_`
  </h2>

  <a className="python-reference-source" href="https://github.com/PriorLabs/tabpfn-extensions/blob/840c15a1848a986b39c85bc17efc61e0e377f983/src/tabpfn_extensions/unsupervised/unsupervised.py#L539" aria-label="View source for TabPFNUnsupervisedModel.use_classifier_"><span aria-hidden="true">\</></span> View source <span aria-hidden="true">↗</span></a>
</div>

Determine whether to use a classifier or regressor for a feature.

```python theme={null}
TabPFNUnsupervisedModel.use_classifier_(
    column_idx: int,
    y: torch.Tensor | np.ndarray,
) -> bool
```

**Parameters**

<div className="python-reference-table">
  | Parameter | Type | Default | Description |
  | - | - | - | - |
  | <span id="unsupervised-unsupervised-tabpfnunsupervisedmodel-use-classifier--column-idx" /><code className="python-reference-parameter">column\_<wbr />idx</code> | <code className="python-reference-type">int</code> | Required | Index of the column to check |
  | <span id="unsupervised-unsupervised-tabpfnunsupervisedmodel-use-classifier--y" /><code className="python-reference-parameter">y</code> | <code className="python-reference-type">torch.Tensor \| <a href="https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html">np.ndarray</a></code> | Required | Values of the feature |
</div>

**Returns**

<div className="python-reference-table python-reference-returns">
  | Type | Description |
  | - | - |
  | <code className="python-reference-type">bool</code> | `True` if a classifier should be used, `False` for a regressor |
</div>

***

<div className="python-reference-heading">
  <h2 id="unsupervised-unsupervised-efficient-random-permutation">
    `efficient_random_permutation`
  </h2>

  <a className="python-reference-source" href="https://github.com/PriorLabs/tabpfn-extensions/blob/840c15a1848a986b39c85bc17efc61e0e377f983/src/tabpfn_extensions/unsupervised/unsupervised.py#L1023" aria-label="View source for efficient_random_permutation"><span aria-hidden="true">\</></span> View source <span aria-hidden="true">↗</span></a>
</div>

Generate multiple unique random permutations of the given indices.

```python theme={null}
efficient_random_permutation(
    indices: list[int],
    n_permutations: int = 10,
) -> list[tuple[int, ...]]
```

**Parameters**

<div className="python-reference-table">
  | Parameter | Type | Default | Description |
  | - | - | - | - |
  | <span id="unsupervised-unsupervised-efficient-random-permutation--indices" /><code className="python-reference-parameter">indices</code> | <code className="python-reference-type">list\[int]</code> | Required | List of indices to permute |
  | <span id="unsupervised-unsupervised-efficient-random-permutation--n-permutations" /><code className="python-reference-parameter">n\_<wbr />permutations</code> | <code className="python-reference-type">int</code> | `10` | Number of unique permutations to generate |
</div>

**Returns**

<div className="python-reference-table python-reference-returns">
  | Type | Description |
  | - | - |
  | <code className="python-reference-type">list\[tuple\[int, ...]]</code> | List of unique permutations |
</div>

***

<div className="python-reference-heading">
  <h2 id="unsupervised-unsupervised-efficient-random-permutation-underscore">
    `efficient_random_permutation_`
  </h2>

  <a className="python-reference-source" href="https://github.com/PriorLabs/tabpfn-extensions/blob/840c15a1848a986b39c85bc17efc61e0e377f983/src/tabpfn_extensions/unsupervised/unsupervised.py#L1049" aria-label="View source for efficient_random_permutation_"><span aria-hidden="true">\</></span> View source <span aria-hidden="true">↗</span></a>
</div>

Generate a single random permutation from the given indices.

```python theme={null}
efficient_random_permutation_(
    indices: list[int],
) -> tuple[int, ...]
```

**Parameters**

<div className="python-reference-table">
  | Parameter | Type | Default | Description |
  | - | - | - | - |
  | <span id="unsupervised-unsupervised-efficient-random-permutation-underscore--indices" /><code className="python-reference-parameter">indices</code> | <code className="python-reference-type">list\[int]</code> | Required | List of indices to permute |
</div>

**Returns**

<div className="python-reference-table python-reference-returns">
  | Type | Description |
  | - | - |
  | <code className="python-reference-type">tuple\[int, ...]</code> | A tuple representing a random permutation of the input indices |
</div>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.