Moral88 0.1.0__py3-none-any.whl → 0.2.0__py3-none-any.whl

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.
Moral88/regression.py CHANGED
@@ -1,25 +1,139 @@
1
- # Moral88/regression.py
2
- import numpy as np
3
-
4
- def mean_absolute_error(y_true, y_pred):
1
+ def mean_absolute_error(y_true, y_pred, normalize=True, threshold=None, method='mean', library='Moral88'):
5
2
  """
6
- Compute MAE (Mean Absolute Error)
3
+ Calculate Mean Absolute Error (MAE) or variants based on method and library.
4
+
5
+ Parameters:
6
+ - y_true (list or array): True values (required)
7
+ - y_pred (list or array): Predicted values (required)
8
+ - normalize (bool): If True, normalize the result (default: True)
9
+ - threshold (tuple, optional): Apply a threshold to the predictions (default: None)
10
+ - method (str): Method of calculation. Options: {'mean', 'sum', 'none'}. Default: 'mean'
11
+ - library (str): Library to use for calculations. Options: {'Moral88', 'sklearn', 'torch', 'tensor', 'statsmodel', 'Dask-ML', 'MLlib'}. Default: 'Moral88'.
12
+
13
+ Returns:
14
+ - float or list: Calculated error based on selected method and library.
7
15
  """
8
- y_true, y_pred = np.array(y_true), np.array(y_pred)
9
- return np.mean(np.abs(y_true - y_pred))
16
+ if library == 'Moral88':
17
+ # Original implementation
18
+ if threshold is not None:
19
+ y_pred = [min(max(pred, threshold[0]), threshold[1]) for pred in y_pred]
20
+
21
+ absolute_errors = [abs(y_t - y_p) for y_t, y_p in zip(y_true, y_pred)]
22
+
23
+ if method == 'mean':
24
+ result = sum(absolute_errors) / len(y_true)
25
+ elif method == 'sum':
26
+ result = sum(absolute_errors)
27
+ elif method == 'none':
28
+ result = absolute_errors
29
+ else:
30
+ raise ValueError("Invalid method. Choose from {'mean', 'sum', 'none'}.")
31
+
32
+ if normalize and method != 'none':
33
+ range_y = max(y_true) - min(y_true)
34
+ result = result / max(abs(range_y), 1)
35
+
36
+ return result
37
+
38
+ elif library == 'sklearn':
39
+ from sklearn.metrics import mean_absolute_error as sklearn_mae
40
+ return sklearn_mae(y_true, y_pred)
41
+
42
+ elif library == 'torch':
43
+ import torch
44
+ y_true_tensor = torch.tensor(y_true, dtype=torch.float32)
45
+ y_pred_tensor = torch.tensor(y_pred, dtype=torch.float32)
46
+ return torch.mean(torch.abs(y_true_tensor - y_pred_tensor)).item()
47
+
48
+ elif library == 'tensorflow':
49
+ import tensorflow as tf
50
+ y_true_tensor = tf.convert_to_tensor(y_true, dtype=tf.float32)
51
+ y_pred_tensor = tf.convert_to_tensor(y_pred, dtype=tf.float32)
52
+ return tf.reduce_mean(tf.abs(y_true_tensor - y_pred_tensor)).numpy()
53
+
54
+ # elif library == 'statsmodel':
55
+ # raise NotImplementedError("Statsmodel does not have a built-in MAE implementation.")
56
+
57
+ # elif library == 'Dask-ML':
58
+ # raise NotImplementedError("Dask-ML support is not implemented yet.")
59
+
60
+ # elif library == 'MLlib':
61
+ # raise NotImplementedError("MLlib support is not implemented yet.")
62
+
63
+ else:
64
+ raise ValueError(f"Invalid library: {library}. Choose from {'Moral88', 'sklearn', 'torch', 'tensorflow'}.")
10
65
 
11
- def mean_squared_error(y_true, y_pred):
66
+
67
+ def mean_squared_error(y_true, y_pred, normalize=True, threshold=None, method='mean', library='Moral88'):
12
68
  """
13
- Compute MSE (Mean Squared Error)
69
+ Calculate Mean Squared Error (MSE) or variants based on method and library.
70
+
71
+ Parameters:
72
+ - y_true (list or array): True values (required)
73
+ - y_pred (list or array): Predicted values (required)
74
+ - normalize (bool): If True, normalize the result (default: True)
75
+ - threshold (tuple, optional): Apply a threshold to the predictions (default: None)
76
+ - method (str): Method of calculation. Options: {'mean', 'sum', 'none'}. Default: 'mean'
77
+ - library (str): Library to use for calculations. Options: {'Moral88', 'sklearn', 'torch', 'tensor', 'statsmodel', 'Dask-ML', 'MLlib'}. Default: 'Moral88'.
78
+
79
+ Returns:
80
+ - float or list: Calculated error based on selected method and library.
14
81
  """
15
- y_true, y_pred = np.array(y_true), np.array(y_pred)
16
- return np.mean((y_true - y_pred) ** 2)
82
+ if library == 'Moral88':
83
+ # Original implementation
84
+ if threshold is not None:
85
+ y_pred = [min(max(pred, threshold[0]), threshold[1]) for pred in y_pred]
86
+
87
+ squared_errors = [(y_t - y_p) ** 2 for y_t, y_p in zip(y_true, y_pred)]
88
+
89
+ if method == 'mean':
90
+ result = sum(squared_errors) / len(y_true)
91
+ elif method == 'sum':
92
+ result = sum(squared_errors)
93
+ elif method == 'none':
94
+ result = squared_errors
95
+ else:
96
+ raise ValueError("Invalid method. Choose from {'mean', 'sum', 'none'}.")
97
+
98
+ if normalize and method != 'none':
99
+ range_y = max(y_true) - min(y_true)
100
+ result = result / max(abs(range_y), 1)
101
+
102
+ return result
103
+
104
+ elif library == 'sklearn':
105
+ from sklearn.metrics import mean_squared_error as sklearn_mse
106
+ return sklearn_mse(y_true, y_pred)
107
+
108
+ elif library == 'torch':
109
+ import torch
110
+ y_true_tensor = torch.tensor(y_true, dtype=torch.float32)
111
+ y_pred_tensor = torch.tensor(y_pred, dtype=torch.float32)
112
+ return torch.mean((y_true_tensor - y_pred_tensor) ** 2).item()
113
+
114
+ elif library == 'tensorflow':
115
+ import tensorflow as tf
116
+ y_true_tensor = tf.convert_to_tensor(y_true, dtype=tf.float32)
117
+ y_pred_tensor = tf.convert_to_tensor(y_pred, dtype=tf.float32)
118
+ return tf.reduce_mean(tf.square(y_true_tensor - y_pred_tensor)).numpy()
119
+
120
+ # elif library == 'statsmodel':
121
+ # raise NotImplementedError("Statsmodel does not have a built-in MSE implementation.")
122
+
123
+ # elif library == 'Dask-ML':
124
+ # raise NotImplementedError("Dask-ML support is not implemented yet.")
125
+
126
+ # elif library == 'MLlib':
127
+ # raise NotImplementedError("MLlib support is not implemented yet.")
17
128
 
129
+ else:
130
+ raise ValueError(f"Invalid library: {library}. Choose from {'Moral88', 'sklearn', 'torch', 'tensorflow'}.")
18
131
  def r_squared(y_true, y_pred):
19
132
  """
20
133
  Compute R-Squared
21
134
  """
135
+ import numpy as np
22
136
  y_true, y_pred = np.array(y_true), np.array(y_pred)
23
137
  ss_total = np.sum((y_true - np.mean(y_true)) ** 2)
24
138
  ss_residual = np.sum((y_true - y_pred) ** 2)
25
- return 1 - (ss_residual / ss_total)
139
+ return 1 - (ss_residual / ss_total)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: Moral88
3
- Version: 0.1.0
3
+ Version: 0.2.0
4
4
  Summary: A library for regression evaluation metrics.
5
5
  Author: Morteza Alizadeh
6
6
  Author-email: alizadeh.c2m@gmail.com
@@ -0,0 +1,7 @@
1
+ Moral88/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ Moral88/regression.py,sha256=W_galfrJHIbyP8S1YL0_GMBCKVKfbI2uJfI1PRsAaOk,5939
3
+ Moral88-0.2.0.dist-info/LICENSE,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ Moral88-0.2.0.dist-info/METADATA,sha256=L3o3beMiux_cQtS6PE8sWQbC6Q2K4RuId_n6X7-tEtg,407
5
+ Moral88-0.2.0.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
6
+ Moral88-0.2.0.dist-info/top_level.txt,sha256=-dyn5iTprnSUHbtMpvRO-prJsIoaRxao7wlfCHLSsv4,8
7
+ Moral88-0.2.0.dist-info/RECORD,,
@@ -1,7 +0,0 @@
1
- Moral88/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- Moral88/regression.py,sha256=5Rtc3EduWt8FZmyu9mLCqwoA1s4Hb7ToGh5yev_1rO0,727
3
- Moral88-0.1.0.dist-info/LICENSE,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- Moral88-0.1.0.dist-info/METADATA,sha256=eERIH5OJsirY5Wa6DvSpLrWj9wTobBSRAnHMWs3BGro,407
5
- Moral88-0.1.0.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
6
- Moral88-0.1.0.dist-info/top_level.txt,sha256=-dyn5iTprnSUHbtMpvRO-prJsIoaRxao7wlfCHLSsv4,8
7
- Moral88-0.1.0.dist-info/RECORD,,