from typing import Any, Dict, Generator, List
from toolz.curried import reduce, partial, pipe, first, curry
from fklearn.metrics.pd_extractors import extract
from fklearn.types import LogListType, LogType, ExtractorFnType, ValidatorReturnType, EvalReturnType
[docs]def get_used_features(log: Dict) -> List[str]:
return first((gen_dict_extract('features', log)))
[docs]def order_feature_importance_avg_from_logs(log: Dict) -> List[str]:
d = first(gen_dict_extract('feature_importance', log))
return sorted(d, key=d.get, reverse=True)
[docs]def gen_key_avgs_from_logs(key: str, logs: List[Dict]) -> Dict[str, float]:
return gen_key_avgs_from_dicts([gen_key_avgs_from_iteration(key, log) for log in logs])
[docs]def gen_key_avgs_from_iteration(key: str, log: Dict) -> Any:
return first(gen_dict_extract(key, log))
[docs]def gen_key_avgs_from_dicts(obj: List) -> Dict[str, float]:
sum_values_by_key = reduce(lambda x, y: dict((k, v + y.get(k, 0)) for k, v in x.items()), obj)
return {k: float(v) / len(obj) for k, v in sum_values_by_key.items()}
[docs]@curry
def gen_validator_log(eval_log: EvalReturnType, fold_num: int, test_size: int) -> ValidatorReturnType:
return {'validator_log': [{'fold_num': fold_num, 'split_log': {'test_size': test_size},
'eval_results': [eval_log]}]}