项目作者: Freakwill

项目描述 :
🔴 dred = dimension reducing for machine learning (suit to sklearn)
高级语言: Python
项目地址: git://github.com/Freakwill/dred.git
创建时间: 2019-07-27T13:04:35Z
项目社区:https://github.com/Freakwill/dred

开源协议:MIT License

下载


dred

dred = dimension reducing (DR) for ML (suit to sklearn)

Currently, only for regression.

Framework

X -DR-> X' -Regression-> Y' <-DR-> Y

train data X, Y
test(predict) data Xtest, Ytest

  1. X and Y will be dred-ed
  2. a model will fit X’ and Y’
  3. After Xtest is dred-ed, predict the output of Xtest’
  4. Get Y’, reconstruct Y from Y’
  5. get error of Y to Ytest

Requirements

scikit-learn

Usage

Basic usage

  1. # X -> R^p, Y -> R^q
  2. @DimReduce(p, q)
  3. class cls(RegressorMixin):
  4. # Definition of cls, in sklearn form

Create yourself dim reduction method

I’ve defined two DR methods in the module

  1. class SVDTransformer(FunctionTransformer):
  2. '''SVD DR transformer
  3. make sure it has transform and inverse_transform method
  4. '''
  5. def __init__(self, p=None, *args, **kwargs):
  6. super(SVDTransformer, self).__init__(*args, **kwargs)
  7. self.p = p
  8. def fit(self, X):
  9. def svd(X, p):
  10. V, s, Vh = LA.svd(X.T @ X)
  11. Vp = V[:, :p]
  12. Cp = X @ Vp
  13. return Cp, Vp
  14. if self.p:
  15. X, V = svd(X, self.p)
  16. self.func = lambda X: X @ V
  17. self.inverse_func = lambda X: X @ V.T
  18. class SVDDimReduce(DimReduce):
  19. # SVD for X and y
  20. def __init__(self, p=3, q=None):
  21. dr1 = SVDTransformer(p)
  22. dr2 = SVDTransformer(q)
  23. super(SVDDimReduce, self).__init__(dr1, dr2)
  24. class PCADimReduce(DimReduce):
  25. # PCA for X and y
  26. def __init__(self, p=3, q=None):
  27. dr1 = PCA(n_components=p)
  28. dr2 = PCA(n_components=q)
  29. super(PCADimReduce, self).__init__(dr1, dr2)

Make sure dr1 and dr2 has transform and inverse_transform method. :caution:

Example

an example regressor supplied in dred.py

run lineqx.py (demo program)

TODO

  • More methods for DR
  • make Classifier