# ApproximateVanishingIdeals.jl

This package is a toolbox for polynomial feature extraction and transformation using the Oracle Approximate Vanishing Ideal Algorithm.

## Overview

The Oracle Approximate Vanishing Ideal ($\texttt{OAVI}$) algorithm was designed to compute the vanishing ideal of a set of points. Instead of adopting the common approach of using singular value decomposition, $\texttt{OAVI}$ finds vanishing polynomials by solving a convex optimization problem of the form

```
\min_{x \in C} f(x),
```

where $f$ is a differentiable convex function and $C$ is a compact and convex set. Usually $f$ will be of the form:

```
f(x) = \frac{1}{m}\|Ax + b\|_2^2.
```

## Installation

The most recent release is available via:

using Pkg
Pkg.add("ApproximateVanishingIdeals")

Or get the latest main branch with:

Pkg.add(url="https://github.com/ZIB-IOL/ApproximateVanishingIdeals.jl", rev="main")

## Getting started

We provide built-in oracles that construct the objective function and feasible region and solve the optimization problem with a version of the Frank-Wolfe (conditional gradients) algorithm implemented in FrankWolfe.jl. Obtaining a basic feature transformation for some random data $X$ is as simple as:

using ApproximateVanishingIdeals
using Random
X = rand(10000, 5)
X_transformed, sets = fit_oavi(X);

`X_transformed`

holds the transformed data and `sets`

keeps track of important sets. It is recommended to adjust some keyword arguments for better results. See the examples section for more information.

## Documentation and Examples

To explore the contents of the package and see examples with a more detailed look at the different keyword arguments, go to the documentation.