This commit is contained in:
Alex Blank
2025-05-19 13:59:16 +02:00
parent 426f4d6963
commit c6defa2065
196 changed files with 18625 additions and 1 deletions
+167
View File
@@ -0,0 +1,167 @@
import os
from functools import partial
import math
import torch
from torch import nn
import numpy as np
from sklearn.preprocessing import StandardScaler, MinMaxScaler, RobustScaler
from torch.optim.lr_scheduler import OneCycleLR
from torch.optim import AdamW
from data_analysis.models.ov_detection.config import model_config
from utils.feature_functions import *
from utils.loss_functions import weighted_bce_loss_fn
from utils.training_utils import collate
from vsm_datascience_common import constants
feature_config = {
"feature_set_name": "full_feature_set",
"filter_criteria": {
"measurements.length": {
"$gt": constants.MEASUREMENTS_PER_DAY * 10,
"$lt": constants.MEASUREMENTS_PER_DAY * 150
},
"ends_at": {
"$exists": True,
"$ne": None
},
"$and": [
{"measurements.values": {"$not": {"$elemMatch": {"$lt": 35}}}},
{"measurements.values": {"$not": {"$elemMatch": {"$gt": 43}}}}
]
},
"augmentation": {
"use_augmentation": True,
"max_lookback": 4,
},
"feature_sets": [
"static_categorical_features",
"static_continuous_features",
"known_categorical_features",
"known_continuous_features",
"observed_categorical_features",
"observed_continuous_features",
"target_features"
],
"static_categorical_features": [
],
"static_continuous_features": [
{
"name": "average_cycle_length",
"fn": get_cycle_length_stats,
"scaler": RobustScaler
},
{
"name": "average_ovulation_day",
"fn": get_average_ovulation_day,
"scaler": RobustScaler
},
{
"name": "ovulation_std",
"fn": get_ovulation_std,
"scaler": StandardScaler
},
{
"name": "biphasic_fraction",
"fn": get_biphasic_fraction,
"scaler": MinMaxScaler
},
{
"name": "num_cycles",
"fn": get_num_cycles,
"scaler": RobustScaler
},
{
"name": "temperature_averages",
"fn": get_average_temperatures,
"scaler": StandardScaler
}
],
"known_categorical_features": [
],
"known_continuous_features": [
{
"name": "hours_from_start",
"fn": partial(get_hours_from_start, shift=0),
"scaler": MinMaxScaler,
"accumulation_fn": np.max
},
{
"name": "hour_of_day",
"fn": partial(get_hour_of_day_encoded, shift=0),
"scaler": None,
"accumulation_fn": np.max
},
{
"name": "day_of_week",
"fn": partial(get_day_of_week_encoded, shift=0),
"scaler": None,
"accumulation_fn": np.max
},
{
"name": "month_of_year",
"fn": partial(get_month_of_year_encoded, shift=0),
"scaler": None,
"accumulation_fn": np.max
}
],
"observed_categorical_features": [
],
"observed_continuous_features": [
{
"name": "temperature",
"fn": partial(get_temperature, shift=0),
"scaler": StandardScaler
},
{
"name": "rolling_average_temperature",
"fn": partial(get_rolling_average_with_padding, shift=0),
"scaler": StandardScaler
},
{
"name": "rolling_window_temperature_min",
"fn": partial(get_window_fn, window_size=constants.MEASUREMENTS_PER_DAY, fn=partial(np.min, axis=1)),
"scaler": StandardScaler
},
{
"name": "rolling_window_temperature_max",
"fn": partial(get_window_fn, window_size=constants.MEASUREMENTS_PER_DAY, fn=partial(np.max, axis=1)),
"scaler": StandardScaler
},
],
"target_features": [
# {
# "name": "fertility_probability",
# "fn": partial(get_fertility_probability, shift=0),
# "scaler": MinMaxScaler,
# "accumulation_fn": np.max
# },
# {
# "name": "ov_over_probability",
# "fn": partial(get_ov_over_probability, shift=0),
# "scaler": MinMaxScaler,
# "accumulation_fn": np.max
# },
{
"name": "days_relative_to_ov",
"fn": get_days_relative_to_ov,
"scaler": RobustScaler,
"accumulation_fn": np.max
},
{
"name": "ov_day",
"fn": get_ov_day,
"scaler": RobustScaler,
"accumulation_fn": np.max
},
{
"name": "is_biphasic",
"fn": get_is_biphasic,
"scaler": MinMaxScaler,
"accumulation_fn": np.max
}
]
}