scm2cpp-lasso 0.10.0__tar.gz → 0.12.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. {scm2cpp_lasso-0.10.0/src/scm2cpp_lasso.egg-info → scm2cpp_lasso-0.12.0}/PKG-INFO +45 -2
  2. scm2cpp_lasso-0.10.0/PKG-INFO → scm2cpp_lasso-0.12.0/README.md +43 -18
  3. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/pyproject.toml +3 -3
  4. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/setup.py +9 -0
  5. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/__init__.py +563 -10
  6. scm2cpp_lasso-0.12.0/src/scm2cpp_lasso/_generated/_loader_accel_cublas.py +140 -0
  7. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/_loader_classifiers.py +71 -0
  8. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/_loader_gramops_blas.py +117 -5
  9. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/_loader_gramops_loops.py +117 -5
  10. scm2cpp_lasso-0.12.0/src/scm2cpp_lasso/_generated/accel_cublas/accel.cpp +20 -0
  11. scm2cpp_lasso-0.12.0/src/scm2cpp_lasso/_generated/accel_cublas/accel.hpp +1023 -0
  12. scm2cpp_lasso-0.12.0/src/scm2cpp_lasso/_generated/accel_cublas/accel_capi.cpp +64 -0
  13. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/classifiers.cpp +8 -0
  14. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/classifiers.hpp +548 -0
  15. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/classifiers_capi.cpp +24 -0
  16. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/gramops_blas/gramops.cpp +14 -0
  17. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/gramops_blas/gramops.hpp +805 -9
  18. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/gramops_blas/gramops_capi.cpp +46 -4
  19. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/gramops_loops/gramops.cpp +14 -0
  20. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/gramops_loops/gramops.hpp +981 -111
  21. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/gramops_loops/gramops_capi.cpp +46 -4
  22. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_libfind.py +12 -0
  23. scm2cpp_lasso-0.10.0/README.md → scm2cpp_lasso-0.12.0/src/scm2cpp_lasso.egg-info/PKG-INFO +61 -0
  24. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso.egg-info/SOURCES.txt +4 -0
  25. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/setup.cfg +0 -0
  26. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/__init__.py +0 -0
  27. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/_loader.py +0 -0
  28. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/_loader_derived_blas.py +0 -0
  29. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/_loader_derived_cublas.py +0 -0
  30. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/_loader_derived_loops.py +0 -0
  31. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/_loader_nmf_blas.py +0 -0
  32. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/_loader_nmf_cublas.py +0 -0
  33. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/_loader_nmf_loops.py +0 -0
  34. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/derived_blas/lasso_design.cpp +0 -0
  35. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/derived_blas/lasso_design.hpp +0 -0
  36. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/derived_blas/lasso_design_capi.cpp +0 -0
  37. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/derived_cublas/lasso_design.cpp +0 -0
  38. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/derived_cublas/lasso_design.hpp +0 -0
  39. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/derived_cublas/lasso_design_capi.cpp +0 -0
  40. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/derived_loops/lasso_design.cpp +0 -0
  41. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/derived_loops/lasso_design.hpp +0 -0
  42. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/derived_loops/lasso_design_capi.cpp +0 -0
  43. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/lasso_cov.cpp +0 -0
  44. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/lasso_cov.hpp +0 -0
  45. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/lasso_cov_capi.cpp +0 -0
  46. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/nmf_blas/nmf_cd.cpp +0 -0
  47. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/nmf_blas/nmf_cd.hpp +0 -0
  48. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/nmf_blas/nmf_cd_capi.cpp +0 -0
  49. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/nmf_cublas/nmf_cd.cpp +0 -0
  50. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/nmf_cublas/nmf_cd.hpp +0 -0
  51. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/nmf_cublas/nmf_cd_capi.cpp +0 -0
  52. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/nmf_loops/nmf_cd.cpp +0 -0
  53. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/nmf_loops/nmf_cd.hpp +0 -0
  54. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/nmf_loops/nmf_cd_capi.cpp +0 -0
  55. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/scm2cpp-blas.hpp +0 -0
  56. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/scm2cpp-cublas.hpp +0 -0
  57. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/_generated/scm2cpp.hpp +0 -0
  58. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso/batch_capi.cu +0 -0
  59. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso.egg-info/dependency_links.txt +0 -0
  60. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso.egg-info/requires.txt +0 -0
  61. {scm2cpp_lasso-0.10.0 → scm2cpp_lasso-0.12.0}/src/scm2cpp_lasso.egg-info/top_level.txt +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: scm2cpp-lasso
3
- Version: 0.10.0
4
- Summary: scikit-learn estimators (lasso, elastic net, ridge, ARD, SVM, SVR, logistic regression, Huber, NMF, Gaussian mixture, FastICA, PCA, graphical lasso, RANSAC, SGD, OMP, LARS) translated from Scheme to C++ by scm2cpp; GPU batch solver included
3
+ Version: 0.12.0
4
+ Summary: scikit-learn estimators (lasso, elastic net, ridge, ARD, SVM, SVR, logistic regression, GLMs, Huber, Theil-Sen, F-score selection, RFE, NMF, Gaussian mixture, FastICA, PCA, graphical lasso, RANSAC, SGD, OMP, LARS) translated from Scheme to C++ by scm2cpp; GPU batch solver included
5
5
  Author: Hirotaka Niitsuma
6
6
  License: MIT
7
7
  Project-URL: Homepage, https://github.com/niitsuma/scm2cpp
@@ -690,6 +690,49 @@ L1LinearSVM(C=1.0).fit(X, y).coef_
690
690
  Speed, from the repository README's table: SGD 1.2-3x, ARD 1.6-1.9x
691
691
  (3x with the Gram hoisted), LassoLarsIC 8-20x, the L1 SVM 1.1-1.5x.
692
692
 
693
+ ## GLMs, CV and Theil-Sen: `LBFGSPoissonRegressor`, `LBFGSGammaRegressor`, `LBFGSTweedieRegressor`, `LBFGSLogisticRegressionCV`, `GramLarsCV`, `GramLassoLarsCV`, `GramOMPCV`, `WeiszfeldTheilSen`
694
+
695
+ - The GLMs are `PoissonRegressor`, `GammaRegressor` and
696
+ `TweedieRegressor` (solver "lbfgs"), over the same L-BFGS-B as
697
+ `LBFGSLogisticRegression`.
698
+ - The CV classes reproduce `LogisticRegressionCV`, `LarsCV`,
699
+ `LassoLarsCV` and `OrthogonalMatchingPursuitCV`: the same folds (KFold
700
+ / StratifiedKFold without shuffling), the same choice of C, alpha or
701
+ number of columns, and the same refit.
702
+ - `WeiszfeldTheilSen` is `TheilSenRegressor` on scikit-learn's own
703
+ subsets.
704
+
705
+ ```python
706
+ from scm2cpp_lasso import LBFGSPoissonRegressor, LBFGSLogisticRegressionCV, GramLassoLarsCV
707
+ LBFGSPoissonRegressor(alpha=1e-3).fit(X, counts).predict(X_new)
708
+ LBFGSLogisticRegressionCV().fit(X, labels).C_
709
+ GramLassoLarsCV().fit(X, y).alpha_
710
+ ```
711
+
712
+ Speed, from the repository README's table: the GLMs 1.1-6x, the CV
713
+ estimators 1.6-6.6x, Theil-Sen 1.3-1.8x (its subset drawing dominates).
714
+
715
+ ## Feature selection: `f_regression`, `f_classif`, `SelectKBest`, `SelectPercentile`, `GramRFE`
716
+
717
+ scikit-learn's univariate F statistics and its selectors over them,
718
+ and `RFE` around `Ridge` / `LinearRegression`, translated.
719
+ `f_regression` also takes an n x q array of targets: the q results in
720
+ one product, on the device when one answers.
721
+
722
+ ```python
723
+ from scm2cpp_lasso import SelectKBest, GramRFE, f_regression
724
+ SelectKBest("f_regression", k=20).fit(X, y).get_support()
725
+ GramRFE(alpha=1.0, n_features_to_select=10).fit(X, y).ranking_
726
+ F, p = f_regression(X, Y) # Y: n x q, every target at once
727
+ ```
728
+
729
+ The same scores, ranking and features as scikit-learn. RFE is 80-1,000x
730
+ faster (one Gram and one Cholesky factor, downdated, instead of a refit
731
+ per round), and f_regression over many targets 30-50x. The Gram-route
732
+ estimators (`GramLassoLarsIC`, `GramLarsCV`, `GramLassoLarsCV`,
733
+ `GramLars`, `GramLassoLars`, `CovPCA`) form a large X'X on the device
734
+ when one answers. `SCM2CPP_NO_DEVICE=1` keeps everything on the CPU.
735
+
693
736
  ## Logistic regression with L1
694
737
 
695
738
  `CovLogistic` solves L1-penalized logistic regression by
@@ -1,21 +1,3 @@
1
- Metadata-Version: 2.4
2
- Name: scm2cpp-lasso
3
- Version: 0.10.0
4
- Summary: scikit-learn estimators (lasso, elastic net, ridge, ARD, SVM, SVR, logistic regression, Huber, NMF, Gaussian mixture, FastICA, PCA, graphical lasso, RANSAC, SGD, OMP, LARS) translated from Scheme to C++ by scm2cpp; GPU batch solver included
5
- Author: Hirotaka Niitsuma
6
- License: MIT
7
- Project-URL: Homepage, https://github.com/niitsuma/scm2cpp
8
- Project-URL: Source, https://github.com/niitsuma/scm2cpp/tree/master/python/scm2cpp-lasso
9
- Keywords: lasso,elastic-net,ridge,svm,logistic-regression,coordinate-descent,cuda,compiler
10
- Classifier: License :: OSI Approved :: MIT License
11
- Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: C++
13
- Classifier: Topic :: Scientific/Engineering :: Mathematics
14
- Classifier: Intended Audience :: Science/Research
15
- Requires-Python: >=3.8
16
- Description-Content-Type: text/markdown
17
- Requires-Dist: numpy>=1.17
18
-
19
1
  # scm2cpp-lasso
20
2
 
21
3
  *[Japanese (README.ja.md)](README.ja.md)*
@@ -690,6 +672,49 @@ L1LinearSVM(C=1.0).fit(X, y).coef_
690
672
  Speed, from the repository README's table: SGD 1.2-3x, ARD 1.6-1.9x
691
673
  (3x with the Gram hoisted), LassoLarsIC 8-20x, the L1 SVM 1.1-1.5x.
692
674
 
675
+ ## GLMs, CV and Theil-Sen: `LBFGSPoissonRegressor`, `LBFGSGammaRegressor`, `LBFGSTweedieRegressor`, `LBFGSLogisticRegressionCV`, `GramLarsCV`, `GramLassoLarsCV`, `GramOMPCV`, `WeiszfeldTheilSen`
676
+
677
+ - The GLMs are `PoissonRegressor`, `GammaRegressor` and
678
+ `TweedieRegressor` (solver "lbfgs"), over the same L-BFGS-B as
679
+ `LBFGSLogisticRegression`.
680
+ - The CV classes reproduce `LogisticRegressionCV`, `LarsCV`,
681
+ `LassoLarsCV` and `OrthogonalMatchingPursuitCV`: the same folds (KFold
682
+ / StratifiedKFold without shuffling), the same choice of C, alpha or
683
+ number of columns, and the same refit.
684
+ - `WeiszfeldTheilSen` is `TheilSenRegressor` on scikit-learn's own
685
+ subsets.
686
+
687
+ ```python
688
+ from scm2cpp_lasso import LBFGSPoissonRegressor, LBFGSLogisticRegressionCV, GramLassoLarsCV
689
+ LBFGSPoissonRegressor(alpha=1e-3).fit(X, counts).predict(X_new)
690
+ LBFGSLogisticRegressionCV().fit(X, labels).C_
691
+ GramLassoLarsCV().fit(X, y).alpha_
692
+ ```
693
+
694
+ Speed, from the repository README's table: the GLMs 1.1-6x, the CV
695
+ estimators 1.6-6.6x, Theil-Sen 1.3-1.8x (its subset drawing dominates).
696
+
697
+ ## Feature selection: `f_regression`, `f_classif`, `SelectKBest`, `SelectPercentile`, `GramRFE`
698
+
699
+ scikit-learn's univariate F statistics and its selectors over them,
700
+ and `RFE` around `Ridge` / `LinearRegression`, translated.
701
+ `f_regression` also takes an n x q array of targets: the q results in
702
+ one product, on the device when one answers.
703
+
704
+ ```python
705
+ from scm2cpp_lasso import SelectKBest, GramRFE, f_regression
706
+ SelectKBest("f_regression", k=20).fit(X, y).get_support()
707
+ GramRFE(alpha=1.0, n_features_to_select=10).fit(X, y).ranking_
708
+ F, p = f_regression(X, Y) # Y: n x q, every target at once
709
+ ```
710
+
711
+ The same scores, ranking and features as scikit-learn. RFE is 80-1,000x
712
+ faster (one Gram and one Cholesky factor, downdated, instead of a refit
713
+ per round), and f_regression over many targets 30-50x. The Gram-route
714
+ estimators (`GramLassoLarsIC`, `GramLarsCV`, `GramLassoLarsCV`,
715
+ `GramLars`, `GramLassoLars`, `CovPCA`) form a large X'X on the device
716
+ when one answers. `SCM2CPP_NO_DEVICE=1` keeps everything on the CPU.
717
+
693
718
  ## Logistic regression with L1
694
719
 
695
720
  `CovLogistic` solves L1-penalized logistic regression by
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "scm2cpp-lasso"
7
- version = "0.10.0"
8
- description = "scikit-learn estimators (lasso, elastic net, ridge, ARD, SVM, SVR, logistic regression, Huber, NMF, Gaussian mixture, FastICA, PCA, graphical lasso, RANSAC, SGD, OMP, LARS) translated from Scheme to C++ by scm2cpp; GPU batch solver included"
7
+ version = "0.12.0"
8
+ description = "scikit-learn estimators (lasso, elastic net, ridge, ARD, SVM, SVR, logistic regression, GLMs, Huber, Theil-Sen, F-score selection, RFE, NMF, Gaussian mixture, FastICA, PCA, graphical lasso, RANSAC, SGD, OMP, LARS) translated from Scheme to C++ by scm2cpp; GPU batch solver included"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.8"
11
11
  license = {text = "MIT"}
@@ -31,4 +31,4 @@ package-dir = {"" = "src"}
31
31
  where = ["src"]
32
32
 
33
33
  [tool.setuptools.package-data]
34
- scm2cpp_lasso = ["_generated/*.hpp", "_generated/*.cpp", "_generated/derived_*/*.hpp", "_generated/derived_*/*.cpp", "_generated/nmf_*/*.hpp", "_generated/nmf_*/*.cpp", "_generated/gramops_*/*.hpp", "_generated/gramops_*/*.cpp", "*.cu"]
34
+ scm2cpp_lasso = ["_generated/*.hpp", "_generated/*.cpp", "_generated/derived_*/*.hpp", "_generated/derived_*/*.cpp", "_generated/nmf_*/*.hpp", "_generated/nmf_*/*.cpp", "_generated/gramops_*/*.hpp", "_generated/gramops_*/*.cpp", "_generated/accel_*/*.hpp", "_generated/accel_*/*.cpp", "*.cu"]
@@ -211,4 +211,13 @@ if _cuda is not None:
211
211
  extra_compile_args=CXXFLAGS + ["-O3", "-fstrict-overflow"],
212
212
  ))
213
213
 
214
+ extensions.append(Extension(
215
+ "scm2cpp_lasso._accel_cublas",
216
+ sources=[GEN_REL + "/accel_cublas/accel_capi.cpp"],
217
+ include_dirs=[GEN_REL + "/accel_cublas", GEN_REL, str(_cuda / "include")],
218
+ library_dirs=[str(_cuda / "lib64"), str(_cuda / "lib")],
219
+ libraries=["cublas", "cudart"],
220
+ extra_compile_args=CXXFLAGS + ["-O3", "-fstrict-overflow"],
221
+ ))
222
+
214
223
  setup(ext_modules=extensions, cmdclass={"build_ext": BuildWithCuda})