learningmachine 2.0.1__tar.gz → 2.1.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 (31) hide show
  1. {learningmachine-2.0.1 → learningmachine-2.1.0}/PKG-INFO +1 -1
  2. {learningmachine-2.0.1 → learningmachine-2.1.0}/learningmachine/classifier.py +20 -28
  3. learningmachine-2.1.0/learningmachine/regression.py +100 -0
  4. {learningmachine-2.0.1 → learningmachine-2.1.0}/learningmachine.egg-info/PKG-INFO +1 -1
  5. {learningmachine-2.0.1 → learningmachine-2.1.0}/setup.py +33 -13
  6. learningmachine-2.0.1/learningmachine/regression.py +0 -109
  7. {learningmachine-2.0.1 → learningmachine-2.1.0}/CONTRIBUTING.rst +0 -0
  8. {learningmachine-2.0.1 → learningmachine-2.1.0}/HISTORY.rst +0 -0
  9. {learningmachine-2.0.1 → learningmachine-2.1.0}/LICENSE +0 -0
  10. {learningmachine-2.0.1 → learningmachine-2.1.0}/MANIFEST.in +0 -0
  11. {learningmachine-2.0.1 → learningmachine-2.1.0}/README.md +0 -0
  12. {learningmachine-2.0.1 → learningmachine-2.1.0}/docs/Makefile +0 -0
  13. {learningmachine-2.0.1 → learningmachine-2.1.0}/docs/conf.py +0 -0
  14. {learningmachine-2.0.1 → learningmachine-2.1.0}/docs/contributing.rst +0 -0
  15. {learningmachine-2.0.1 → learningmachine-2.1.0}/docs/history.rst +0 -0
  16. {learningmachine-2.0.1 → learningmachine-2.1.0}/docs/index.rst +0 -0
  17. {learningmachine-2.0.1 → learningmachine-2.1.0}/docs/installation.rst +0 -0
  18. {learningmachine-2.0.1 → learningmachine-2.1.0}/docs/make.bat +0 -0
  19. {learningmachine-2.0.1 → learningmachine-2.1.0}/docs/readme.rst +0 -0
  20. {learningmachine-2.0.1 → learningmachine-2.1.0}/docs/usage.rst +0 -0
  21. {learningmachine-2.0.1 → learningmachine-2.1.0}/learningmachine/__init__.py +0 -0
  22. {learningmachine-2.0.1 → learningmachine-2.1.0}/learningmachine/base.py +0 -0
  23. {learningmachine-2.0.1 → learningmachine-2.1.0}/learningmachine/utils.py +0 -0
  24. {learningmachine-2.0.1 → learningmachine-2.1.0}/learningmachine.egg-info/SOURCES.txt +0 -0
  25. {learningmachine-2.0.1 → learningmachine-2.1.0}/learningmachine.egg-info/dependency_links.txt +0 -0
  26. {learningmachine-2.0.1 → learningmachine-2.1.0}/learningmachine.egg-info/not-zip-safe +0 -0
  27. {learningmachine-2.0.1 → learningmachine-2.1.0}/learningmachine.egg-info/requires.txt +0 -0
  28. {learningmachine-2.0.1 → learningmachine-2.1.0}/learningmachine.egg-info/top_level.txt +0 -0
  29. {learningmachine-2.0.1 → learningmachine-2.1.0}/setup.cfg +0 -0
  30. {learningmachine-2.0.1 → learningmachine-2.1.0}/tests/__init__.py +0 -0
  31. {learningmachine-2.0.1 → learningmachine-2.1.0}/tests/test_learningmachine.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: learningmachine
3
- Version: 2.0.1
3
+ Version: 2.1.0
4
4
  Summary: Machine Learning with uncertainty quantification and interpretability
5
5
  Home-page: https://github.com/Techtonique/learningmachine_python
6
6
  Author: T. Moudiki
@@ -50,37 +50,29 @@ class Classifier(Base, ClassifierMixin):
50
50
  seed=seed,
51
51
  )
52
52
 
53
- self.type_prediction_set=type_prediction_set
54
-
53
+ self.type_prediction_set=type_prediction_set
54
+
55
55
  try:
56
- self.obj = r(f"suppressWarnings(suppressMessages(library(learningmachine))); Classifier$new(method = {format_value(self.method)}, pi_method = {format_value(self.pi_method)}, level = {format_value(self.level)}, type_prediction_set = {format_value(self.type_prediction_set)}, B = {format_value(self.B)}, nb_hidden = {format_value(self.nb_hidden)}, nodes_sim = {format_value(self.nodes_sim)}, activ = {format_value(self.activ)}, seed = {format_value(self.seed)})")
57
- except NotImplementedError:
58
- self.obj = r(
56
+ r_obj_command = (
57
+ 'suppressWarnings(suppressMessages(library(learningmachine))); '
58
+ 'Classifier$new(method = ' + str(format_value(self.method)) + ', '
59
+ 'pi_method = ' + str(format_value(self.pi_method)) + ', '
60
+ 'level = ' + str(format_value(self.level)) + ', '
61
+ 'type_prediction_set = ' + str(format_value(self.type_prediction_set)) + ', '
62
+ 'B = ' + str(format_value(self.B)) + ', '
63
+ 'nb_hidden = ' + str(format_value(self.nb_hidden)) + ', '
64
+ 'nodes_sim = ' + str(format_value(self.nodes_sim)) + ', '
65
+ 'activ = ' + str(format_value(self.activ)) + ', '
66
+ 'seed = ' + str(format_value(self.seed)) + ')')
67
+ self.obj = r(r_obj_command)
68
+ except Exception:
69
+ try:
70
+ self.obj = r(f"suppressWarnings(suppressMessages(library(learningmachine))); Classifier$new(method = {format_value(self.method)}, pi_method = {format_value(self.pi_method)}, level = {format_value(self.level)}, type_prediction_set = {format_value(self.type_prediction_set)}, B = {format_value(self.B)}, nb_hidden = {format_value(self.nb_hidden)}, nodes_sim = {format_value(self.nodes_sim)}, activ = {format_value(self.activ)}, seed = {format_value(self.seed)})")
71
+ except Exception:
72
+ self.obj = r(
59
73
  f"learningmachine::Classifier$new(method = {format_value(self.method)}, pi_method = {format_value(self.pi_method)}, level = {format_value(self.level)}, type_prediction_set = {format_value(self.type_prediction_set)}, B = {format_value(self.B)}, nb_hidden = {format_value(self.nb_hidden)}, nodes_sim = {format_value(self.nodes_sim)}, activ = {format_value(self.activ)}, seed = {format_value(self.seed)})"
60
74
  )
61
-
62
- # try:
63
- # self.load_learningmachine()
64
- # self.obj = r(
65
- # f"learningmachine::Classifier$new(method = {format_value(self.method)}, pi_method = {format_value(self.pi_method)}, level = {format_value(self.level)}, type_prediction_set = {format_value(self.type_prediction_set)}, B = {format_value(self.B)}, nb_hidden = {format_value(self.nb_hidden)}, nodes_sim = {format_value(self.nodes_sim)}, activ = {format_value(self.activ)}, seed = {format_value(self.seed)})"
66
- # )
67
- # except NotImplementedError as e:
68
- # try:
69
- # base.suppressWarnings(base.suppressMessages(r.library("learningmachine")))
70
- # self.obj = r(
71
- # f"Classifier$new(method = {format_value(self.method)}, pi_method = {format_value(self.pi_method)}, level = {format_value(self.level)}, type_prediction_set = {format_value(self.type_prediction_set)}, B = {format_value(self.B)}, nb_hidden = {format_value(self.nb_hidden)}, nodes_sim = {format_value(self.nodes_sim)}, activ = {format_value(self.activ)}, seed = {format_value(self.seed)})"
72
- # )
73
- # except NotImplementedError as e:
74
- # try:
75
- # self.obj = r(
76
- # f"""
77
- # suppressWarnings(suppressMessages(library(learningmachine)));
78
- # Classifier$new(method = {format_value(self.method)}, pi_method = {format_value(self.pi_method)}, level = {format_value(self.level)}, type_prediction_set = {format_value(self.type_prediction_set)}, B = {format_value(self.B)}, nb_hidden = {format_value(self.nb_hidden)}, nodes_sim = {format_value(self.nodes_sim)}, activ = {format_value(self.activ)}, seed = {format_value(self.seed)})
79
- # """
80
- # )
81
- # except NotImplementedError as e:
82
- # print("R package can't be loaded: ", e)
83
-
75
+
84
76
  def fit(self, X, y, **kwargs):
85
77
  """
86
78
  Fit the model according to the given training data.
@@ -0,0 +1,100 @@
1
+ import numpy as np
2
+ from rpy2.robjects import r
3
+ from rpy2.robjects.packages import importr
4
+ from rpy2.robjects.vectors import FloatVector, ListVector
5
+ from sklearn.base import RegressorMixin
6
+ from .base import Base
7
+ from .utils import format_value, r_list_to_namedtuple
8
+
9
+ base = importr("base")
10
+ stats = importr("stats")
11
+ utils = importr("utils")
12
+
13
+
14
+ class Regressor(Base, RegressorMixin):
15
+ """
16
+ Regressor.
17
+ """
18
+
19
+ def __init__(
20
+ self,
21
+ method="ranger",
22
+ pi_method="none",
23
+ level=95,
24
+ B=100,
25
+ nb_hidden = 0,
26
+ nodes_sim = "sobol",
27
+ activ = "relu",
28
+ seed=123,
29
+ ):
30
+ """
31
+ Initialize the model.
32
+ """
33
+ super().__init__(
34
+ name = "Regressor",
35
+ type = "regression",
36
+ method=method,
37
+ pi_method=pi_method,
38
+ level=level,
39
+ B=B,
40
+ nb_hidden=nb_hidden,
41
+ nodes_sim=nodes_sim,
42
+ activ=activ,
43
+ seed=seed,
44
+ )
45
+
46
+ try:
47
+ r_obj_command = (
48
+ 'suppressWarnings(suppressMessages(library(learningmachine))); '
49
+ 'Regressor$new(method = ' + str(format_value(self.method)) + ', '
50
+ 'pi_method = ' + str(format_value(self.pi_method)) + ', '
51
+ 'level = ' + str(format_value(self.level)) + ', '
52
+ 'B = ' + str(format_value(self.B)) + ', '
53
+ 'nb_hidden = ' + str(format_value(self.nb_hidden)) + ', '
54
+ 'nodes_sim = ' + str(format_value(self.nodes_sim)) + ', '
55
+ 'activ = ' + str(format_value(self.activ)) + ', '
56
+ 'seed = ' + str(format_value(self.seed)) + ')')
57
+ self.obj = r(r_obj_command)
58
+ except Exception:
59
+ try:
60
+ self.obj = r(f"suppressWarnings(suppressMessages(library(learningmachine))); Regressor$new(method = {format_value(self.method)}, pi_method = {format_value(self.pi_method)}, level = {format_value(self.level)}, B = {format_value(self.B)}, nb_hidden = {format_value(self.nb_hidden)}, nodes_sim = {format_value(self.nodes_sim)}, activ = {format_value(self.activ)}, seed = {format_value(self.seed)})")
61
+ except Exception:
62
+ self.obj = r(
63
+ f"learningmachine::Regressor$new(method = {format_value(self.method)}, pi_method = {format_value(self.pi_method)}, level = {format_value(self.level)}, B = {format_value(self.B)}, nb_hidden = {format_value(self.nb_hidden)}, nodes_sim = {format_value(self.nodes_sim)}, activ = {format_value(self.activ)}, seed = {format_value(self.seed)})"
64
+ )
65
+
66
+ def fit(self, X, y, **kwargs):
67
+ """
68
+ Fit the model according to the given training data.
69
+ """
70
+ params_dict = {}
71
+ for k, v in kwargs.items():
72
+ params_dict[k.replace('_', '.')] = v
73
+ self.obj["fit"](
74
+ r.matrix(FloatVector(X.ravel()),
75
+ byrow=True,
76
+ ncol=X.shape[1],
77
+ nrow=X.shape[0]),
78
+ FloatVector(y),
79
+ **params_dict
80
+ )
81
+ return self
82
+
83
+ def predict(self, X):
84
+ """
85
+ Predict using the model.
86
+ """
87
+ if self.pi_method == "none":
88
+ return(np.asarray(self.obj["predict"](
89
+ r.matrix(FloatVector(X.ravel()),
90
+ byrow=True,
91
+ ncol=X.shape[1],
92
+ nrow=X.shape[0])
93
+ )))
94
+ return r_list_to_namedtuple(self.obj["predict"](
95
+ r.matrix(FloatVector(X.ravel()),
96
+ byrow=True,
97
+ ncol=X.shape[1],
98
+ nrow=X.shape[0])
99
+ ))
100
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: learningmachine
3
- Version: 2.0.1
3
+ Version: 2.1.0
4
4
  Summary: Machine Learning with uncertainty quantification and interpretability
5
5
  Home-page: https://github.com/Techtonique/learningmachine_python
6
6
  Author: T. Moudiki
@@ -72,34 +72,50 @@ def install_packages():
72
72
  try:
73
73
  subprocess.run(["Rscript", "-e", "utils::install.packages('remotes', dependencies=TRUE)"])
74
74
  subprocess.run(["Rscript", "-e", "utils::install.packages(c('R6', 'Rcpp', 'skimr'), dependencies=TRUE)"])
75
- #subprocess.run(["Rscript", "-e", "utils::install.packages('learningmachine', repos='https://techtonique.r-universe.dev', dependencies=TRUE)"])
76
75
  subprocess.run(["Rscript", "-e", "remotes::install_github('Techtonique/learningmachine')"])
77
- except:
76
+ except subprocess.CalledProcessError as e:
77
+ print(f"Error occurred: {e}")
78
+ print(f"Return code: {e.returncode}")
79
+ print(f"Output: {e.output}")
80
+ print(f"Stderr: {e.stderr}")
78
81
  try:
79
82
  subprocess.run(["mkdir", "-p", "r-learningmachine"])
80
83
  subprocess.run(["Rscript", "-e", "utils::install.packages('remotes', lib='r-learningmachine', dependencies=TRUE)"])
81
84
  subprocess.run(["Rscript", "-e", "utils::install.packages(c('R6', 'Rcpp', 'skimr'), lib='r-learningmachine', dependencies=TRUE)"])
82
- #subprocess.run(["Rscript", "-e", "utils::install.packages('learningmachine', repos='https://techtonique.r-universe.dev', lib='r-learningmachine', dependencies=TRUE)"])
83
85
  subprocess.run(["Rscript", "-e", "remotes::install_github('Techtonique/learningmachine', lib='r-learningmachine')"])
84
- except:
86
+ except subprocess.CalledProcessError as e:
87
+ print(f"Error occurred: {e}")
88
+ print(f"Return code: {e.returncode}")
89
+ print(f"Output: {e.output}")
90
+ print(f"Stderr: {e.stderr}")
85
91
  try:
86
92
  subprocess.run(["Rscript", "-e", "utils::install.packages('remotes', dependencies=TRUE)"])
87
93
  subprocess.run(["Rscript", "-e", "utils::install.packages(c('R6', 'Rcpp', 'skimr'), dependencies=TRUE)"])
88
- #subprocess.run(["Rscript", "-e", "utils::install.packages('learningmachine', repos='https://techtonique.r-universe.dev', dependencies=TRUE)"])
89
94
  subprocess.run(["Rscript", "-e", "remotes::install_github('Techtonique/learningmachine')"])
90
- except:
95
+ except subprocess.CalledProcessError as e:
96
+ print(f"Error occurred: {e}")
97
+ print(f"Return code: {e.returncode}")
98
+ print(f"Output: {e.output}")
99
+ print(f"Stderr: {e.stderr}")
91
100
  try:
92
101
  subprocess.run(["mkdir", "-p", "r-learningmachine"])
93
102
  subprocess.run(["Rscript", "-e", "utils::install.packages('remotes', lib='r-learningmachine', dependencies=TRUE)"])
94
103
  subprocess.run(["Rscript", "-e", "utils::install.packages(c('R6', 'Rcpp', 'skimr'), lib='r-learningmachine', dependencies=TRUE)"])
95
- #subprocess.run(["Rscript", "-e", "utils::install.packages('learningmachine', repos='https://techtonique.r-universe.dev', lib='r-learningmachine', dependencies=TRUE)"])
96
104
  subprocess.run(["Rscript", "-e", "remotes::install_github('Techtonique/learningmachine', lib='r-learningmachine')"])
97
- except:
105
+ except subprocess.CalledProcessError as e:
106
+ print(f"Error occurred: {e}")
107
+ print(f"Return code: {e.returncode}")
108
+ print(f"Output: {e.output}")
109
+ print(f"Stderr: {e.stderr}")
98
110
  try:
99
111
  subprocess.run(["Rscript", "-e", "utils::install.packages('remotes', dependencies=TRUE)"])
100
112
  subprocess.run(["Rscript", "-e", "utils::install.packages(c('R6', 'Rcpp', 'skimr'), dependencies=TRUE)"])
101
113
  subprocess.run(["Rscript", "-e", "remotes::install_github('Techtonique/learningmachine')"])
102
- except:
114
+ except subprocess.CalledProcessError as e:
115
+ print(f"Error occurred: {e}")
116
+ print(f"Return code: {e.returncode}")
117
+ print(f"Output: {e.output}")
118
+ print(f"Stderr: {e.stderr}")
103
119
  subprocess.run(["mkdir", "-p", "r-learningmachine"])
104
120
  subprocess.run(["Rscript", "-e", "utils::install.packages('remotes', lib='r-learningmachine', dependencies=TRUE)"])
105
121
  subprocess.run(["Rscript", "-e", "utils::install.packages(c('R6', 'Rcpp', 'skimr'), lib='r-learningmachine', dependencies=TRUE)"])
@@ -108,10 +124,14 @@ def install_packages():
108
124
 
109
125
  # Check if R is installed; if not, install it
110
126
  if not check_r_installed():
111
- print("Installing R...")
112
- install_r()
127
+ install_r_prompt = int(input("Try installing R? 1-yes, 2-no"))
128
+ if install_r_prompt == 1:
129
+ print("Installing R...")
130
+ install_r()
131
+ else:
132
+ raise ValueError('Try installing R manually first.')
113
133
  else:
114
- print("No installation needed.")
134
+ print("No R installation needed.")
115
135
 
116
136
  install_packages()
117
137
 
@@ -149,6 +169,6 @@ setup(
149
169
  packages=find_packages(include=["learningmachine", "learningmachine.*"]),
150
170
  test_suite="tests",
151
171
  url="https://github.com/Techtonique/learningmachine_python",
152
- version="2.0.1",
172
+ version="2.1.0",
153
173
  zip_safe=False,
154
174
  )
@@ -1,109 +0,0 @@
1
- import numpy as np
2
- from rpy2.robjects import r
3
- from rpy2.robjects.packages import importr
4
- from rpy2.robjects.vectors import FloatVector, ListVector
5
- from sklearn.base import RegressorMixin
6
- from .base import Base
7
- from .utils import format_value, r_list_to_namedtuple
8
-
9
- base = importr("base")
10
- stats = importr("stats")
11
- utils = importr("utils")
12
-
13
-
14
- class Regressor(Base, RegressorMixin):
15
- """
16
- Regressor.
17
- """
18
-
19
- def __init__(
20
- self,
21
- method="ranger",
22
- pi_method="none",
23
- level=95,
24
- B=100,
25
- nb_hidden = 0,
26
- nodes_sim = "sobol",
27
- activ = "relu",
28
- seed=123,
29
- ):
30
- """
31
- Initialize the model.
32
- """
33
- super().__init__(
34
- name = "Regressor",
35
- type = "regression",
36
- method=method,
37
- pi_method=pi_method,
38
- level=level,
39
- B=B,
40
- nb_hidden=nb_hidden,
41
- nodes_sim=nodes_sim,
42
- activ=activ,
43
- seed=seed,
44
- )
45
-
46
- try:
47
- self.obj = r(f"suppressWarnings(suppressMessages(library(learningmachine))); Regressor$new(method = {format_value(self.method)}, pi_method = {format_value(self.pi_method)}, level = {format_value(self.level)}, B = {format_value(self.B)}, nb_hidden = {format_value(self.nb_hidden)}, nodes_sim = {format_value(self.nodes_sim)}, activ = {format_value(self.activ)}, seed = {format_value(self.seed)})")
48
- except NotImplementedError:
49
- self.obj = r(
50
- f"learningmachine::Regressor$new(method = {format_value(self.method)}, pi_method = {format_value(self.pi_method)}, level = {format_value(self.level)}, B = {format_value(self.B)}, nb_hidden = {format_value(self.nb_hidden)}, nodes_sim = {format_value(self.nodes_sim)}, activ = {format_value(self.activ)}, seed = {format_value(self.seed)})"
51
- )
52
-
53
- # try:
54
- # self.load_learningmachine()
55
- # self.obj = r(
56
- # f"learningmachine::Regressor$new(method = {format_value(self.method)}, pi_method = {format_value(self.pi_method)}, level = {format_value(self.level)}, B = {format_value(self.B)}, nb_hidden = {format_value(self.nb_hidden)}, nodes_sim = {format_value(self.nodes_sim)}, activ = {format_value(self.activ)}, seed = {format_value(self.seed)})"
57
- # )
58
- # except NotImplementedError as e:
59
- # try:
60
- # base.suppressWarnings(base.suppressMessages(r.library("learningmachine")))
61
- # self.obj = r(
62
- # f"Regressor$new(method = {format_value(self.method)}, pi_method = {format_value(self.pi_method)}, level = {format_value(self.level)}, B = {format_value(self.B)}, nb_hidden = {format_value(self.nb_hidden)}, nodes_sim = {format_value(self.nodes_sim)}, activ = {format_value(self.activ)}, seed = {format_value(self.seed)})"
63
- # )
64
- # except NotImplementedError as e:
65
- # try:
66
- # self.obj = r(
67
- # f"""
68
- # suppressWarnings(suppressMessages(library(learningmachine)));
69
- # Regressor$new(method = {format_value(self.method)}, pi_method = {format_value(self.pi_method)}, level = {format_value(self.level)}, B = {format_value(self.B)}, nb_hidden = {format_value(self.nb_hidden)}, nodes_sim = {format_value(self.nodes_sim)}, activ = {format_value(self.activ)}, seed = {format_value(self.seed)})
70
- # """
71
- # )
72
- # except NotImplementedError as e:
73
- # print("R package can't be loaded: ", e)
74
-
75
- def fit(self, X, y, **kwargs):
76
- """
77
- Fit the model according to the given training data.
78
- """
79
- params_dict = {}
80
- for k, v in kwargs.items():
81
- params_dict[k.replace('_', '.')] = v
82
- self.obj["fit"](
83
- r.matrix(FloatVector(X.ravel()),
84
- byrow=True,
85
- ncol=X.shape[1],
86
- nrow=X.shape[0]),
87
- FloatVector(y),
88
- **params_dict
89
- )
90
- return self
91
-
92
- def predict(self, X):
93
- """
94
- Predict using the model.
95
- """
96
- if self.pi_method == "none":
97
- return(np.asarray(self.obj["predict"](
98
- r.matrix(FloatVector(X.ravel()),
99
- byrow=True,
100
- ncol=X.shape[1],
101
- nrow=X.shape[0])
102
- )))
103
- return r_list_to_namedtuple(self.obj["predict"](
104
- r.matrix(FloatVector(X.ravel()),
105
- byrow=True,
106
- ncol=X.shape[1],
107
- nrow=X.shape[0])
108
- ))
109
-
File without changes