A Small Package for Use of Research

Dimension Reduction Function Research (drfr)

This package provides a Reduction Model and Regression Model, which respectively contains several choices for reduction and regression of data.

Discription of Each Model

Reduction Model

contains "NPPE", "UMAP", "LLE", "Hessian", "Spectral", "TSNE", "Isomap", used as keyword argument `tag` in function `get_reduction()`. To make tag "UMAP" work properly, an install according to https://github.com/lmcinnes/umap is needed.

Regression Model

contains "lasso", "ridge", "MARS", used as keyword argument `tag` in function `cal_regression()`. As basis generator either those in BasisGenerator or self made function can be used, where data X should be the only positional argument.

Basis Generator

contains several functions as basis generators, with form

```generate_basis_name(X, p=basis_degree)
```

Usage

```from drfr import ReductionModel, BasisGenerator, RegressionModel
from sklearn import datasets
import matplotlib.pyplot as plt

N = 5000
k = 24
X, color = datasets.samples_generator.make_swiss_roll(n_samples=N, noise=0.00001)
basis_generator = None
poly_degree = 4
tag_red = "NPPE"
tag_reg = "MARS"

# preprocessing
X, color = ReductionModel.pre_process(X, color)

# compute embedded result
red_model = ReductionModel.ReductionModel()
y_nppe = red_model.get_reduction(X, tag=tag_red)

# compute regression weights w given X and y, and compute basis(X)*y
reg_model = RegressionModel.RegressionModel()
y_reg = reg_model.cal_regression(X, y_nppe, tag=tag_reg, basis_generator=BasisGenerator.generate_fourier, p=poly_degree)

# draw results
ax.scatter(X[:, 1], X[:, 0], X[:, 2], c=color, cmap=plt.cm.Spectral)

ax.set_title("Original data")
ax.scatter(y_nppe[:, 1], y_nppe[:, 0], c=color, cmap=plt.cm.Spectral)
plt.axis('tight')
plt.xticks([]), plt.yticks([])
plt.title('Projected data with method' + tag_red)
ax.scatter(y_reg[:, 1], y_reg[:, 0], c=color, cmap=plt.cm.Spectral)
plt.axis('tight')
plt.xticks([]), plt.yticks([])
plt.title("NPPE embedded data regressed by " + tag_reg + " Model\n" + "with basis degree" + poly_degree.__str__())
plt.show()
```