diff --git a/cpp_package/src/inc/data_filter.h b/cpp_package/src/inc/data_filter.h index 096af40a3..de66122de 100644 --- a/cpp_package/src/inc/data_filter.h +++ b/cpp_package/src/inc/data_filter.h @@ -193,7 +193,8 @@ class DataFilter * @return oxygen level */ static double get_oxygen_level (double *ppg_ir, double *ppg_red, int data_len, - int sampling_rate, double coef1 = 0.0, double coef2 = -37.663, double coef3 = 114.91); + int sampling_rate, double coef1 = 1.5958422, double coef2 = -34.6596622, + double coef3 = 112.6898759); /** * calculate heart rate * @param ppg_ir input 1d array diff --git a/csharp_package/brainflow/brainflow/data_filter.cs b/csharp_package/brainflow/brainflow/data_filter.cs index 503ce7141..b8f14f429 100644 --- a/csharp_package/brainflow/brainflow/data_filter.cs +++ b/csharp_package/brainflow/brainflow/data_filter.cs @@ -306,7 +306,7 @@ public static double get_railed_percentage (double[] data, int gain) /// approximation coef /// /// intercept for approximation /// stddev - public static double get_oxygen_level (double[] ppg_ir, double[] ppg_red, int sampling_rate, double coef1 = 0.0, double coef2 = -37.663, double coef3 = 114.91) + public static double get_oxygen_level (double[] ppg_ir, double[] ppg_red, int sampling_rate, double coef1 = 1.5958422, double coef2 = -34.6596622, double coef3 = 112.6898759) { if (ppg_ir.Length != ppg_red.Length) { diff --git a/java_package/brainflow/src/main/java/brainflow/DataFilter.java b/java_package/brainflow/src/main/java/brainflow/DataFilter.java index e337dda18..613729b04 100644 --- a/java_package/brainflow/src/main/java/brainflow/DataFilter.java +++ b/java_package/brainflow/src/main/java/brainflow/DataFilter.java @@ -251,7 +251,7 @@ public static double get_oxygen_level (double[] ppg_ir, double[] ppg_red, int sa */ public static double get_oxygen_level (double[] ppg_ir, double[] ppg_red, int sampling_rate) throws BrainFlowError { - return get_oxygen_level (ppg_ir, ppg_red, sampling_rate, 0.0, -37.663, 114.91); + return get_oxygen_level (ppg_ir, ppg_red, sampling_rate, 1.5958422, -34.6596622, 112.6898759); } /** diff --git a/julia_package/brainflow/src/data_filter.jl b/julia_package/brainflow/src/data_filter.jl index 145ca3445..fbfe5a0d2 100644 --- a/julia_package/brainflow/src/data_filter.jl +++ b/julia_package/brainflow/src/data_filter.jl @@ -253,7 +253,7 @@ end return output[1] end -@brainflow_rethrow function get_oxygen_level(ppg_ir, ppg_red, sampling_rate::Integer, coef1=0.0, coef2=-37.663, coef3=114.91) +@brainflow_rethrow function get_oxygen_level(ppg_ir, ppg_red, sampling_rate::Integer, coef1=1.5958422, coef2=-34.6596622, coef3=112.6898759) if length(ppg_ir) != length(ppg_red) throw(BrainFlowError(string("invalid size", INVALID_ARGUMENTS_ERROR), Integer(INVALID_ARGUMENTS_ERROR))) end diff --git a/python_package/brainflow/data_filter.py b/python_package/brainflow/data_filter.py index 1d5141170..c9effa582 100644 --- a/python_package/brainflow/data_filter.py +++ b/python_package/brainflow/data_filter.py @@ -771,7 +771,7 @@ def get_railed_percentage(cls, data: NDArray[Float64], gain: int): @classmethod def get_oxygen_level(cls, ppg_ir: NDArray[Float64], ppg_red: NDArray[Float64], sampling_rate: int, - coef1=0.0, coef2=-37.663, coef3=114.91): + coef1=1.5958422, coef2=-34.6596622, coef3=112.6898759): """get oxygen level from ppg :param ppg_ir: input array diff --git a/src/ml/generated/mindfulness_model.cpp b/src/ml/generated/mindfulness_model.cpp index 2dfb82d23..56e8c9ad1 100644 --- a/src/ml/generated/mindfulness_model.cpp +++ b/src/ml/generated/mindfulness_model.cpp @@ -1,6 +1,6 @@ #include "mindfulness_model.h" // clang-format off -const double mindfulness_coefficients[5] = {2.6338144674136394,4.006742906593334,-34.51389221061297,1.1950604401540308,35.78022137767881}; -double mindfulness_intercept = 0.364078; +const double mindfulness_coefficients[5] = {-1.4765769283767163,2.6620930328900974,-31.43942997194057,9.464066586727622,45.512106420941684}; +double mindfulness_intercept = 0.000000; // clang-format on diff --git a/src/ml/train/logreg_mindfulness.onnx b/src/ml/train/logreg_mindfulness.onnx index 820ced959..e63a31b3c 100644 Binary files a/src/ml/train/logreg_mindfulness.onnx and b/src/ml/train/logreg_mindfulness.onnx differ diff --git a/src/ml/train/train_classifiers.py b/src/ml/train/train_classifiers.py index a76922b25..bd00e12f1 100644 --- a/src/ml/train/train_classifiers.py +++ b/src/ml/train/train_classifiers.py @@ -42,6 +42,8 @@ def prepare_data(first_class, second_class, blacklisted_channels=None): dataset_y = list() for data_type in (first_class, second_class): for file in glob.glob(os.path.join('data', data_type, '*', '*.csv')): + data_x_temp = list() + data_y_temp = list() logging.info(file) board_id = os.path.basename(os.path.dirname(file)) try: @@ -58,13 +60,17 @@ def prepare_data(first_class, second_class, blacklisted_channels=None): feature_vector = bands[0] feature_vector = feature_vector.astype(float) dataset_x.append(feature_vector) + data_x_temp.append(feature_vector) if data_type == first_class: dataset_y.append(0) + data_y_temp.append(0) else: dataset_y.append(1) + data_y_temp.append(0) cur_pos = cur_pos + int(window_size * overlaps[num] * sampling_rate) except Exception as e: logging.error(str(e), exc_info=True) + print_dataset_info((data_x_temp, data_y_temp)) logging.info('1st Class: %d 2nd Class: %d' % (len([x for x in dataset_y if x == 0]), len([x for x in dataset_y if x == 1]))) @@ -115,7 +121,7 @@ def print_dataset_info(data): def train_regression_mindfulness(data): model = LogisticRegression(solver='liblinear', max_iter=4000, - penalty='l2', random_state=2, fit_intercept=True, intercept_scaling=0.2) + penalty='l2', random_state=2, fit_intercept=False, intercept_scaling=3) logging.info('#### Logistic Regression ####') scores = cross_val_score(model, data[0], data[1], cv=5, scoring='f1_macro', n_jobs=8) logging.info('f1 macro %s' % str(scores)) @@ -207,14 +213,14 @@ def main(): dataset_y = pickle.load(f) data = dataset_x, dataset_y else: - data = prepare_data('relaxed', 'focused', blacklisted_channels={'T3', 'T4'}) + data = prepare_data('relaxed', 'focused') print_dataset_info(data) train_regression_mindfulness(data) - train_svm_mindfulness(data) - train_knn_mindfulness(data) - train_random_forest_mindfulness(data) - train_mlp_mindfulness(data) - train_stacking_classifier(data) + #train_svm_mindfulness(data) + #train_knn_mindfulness(data) + #train_random_forest_mindfulness(data) + #train_mlp_mindfulness(data) + #train_stacking_classifier(data) if __name__ == '__main__':