Metadata-Version: 2.1
Name: drfr
Version: 0.9
Summary: A Small Package for Use of Research
Home-page: UNKNOWN
Author: Zhiang Liu
Author-email: me262r@gmail.com
License: UNKNOWN
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Classifier: Operating System :: Microsoft :: Windows
Description-Content-Type: text/markdown
Requires-Dist: umap-learn
Requires-Dist: numpy (>=1.13)
Requires-Dist: scipy (>=0.19)
Requires-Dist: scikit-learn (>=0.18)

# 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
```python
generate_basis_name(X, p=basis_degree)
```

# Usage
```python
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 = fig.add_subplot(311, projection='3d')
ax.scatter(X[:, 1], X[:, 0], X[:, 2], c=color, cmap=plt.cm.Spectral)

ax.set_title("Original data")
ax = fig.add_subplot(312)
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 = fig.add_subplot(313)
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()
```

