Package: sanitize-ml-labels
Simple python package to sanitize in a standard way ML-related labels.Why do I need this?So you have some kind of plot and you have some ML-related labels.
Since I always rename and sanitize them the same way, I have prepared
this package to always sanitize them in a standard fashion.How do I install this package?As usual, just download it using pip:pipinstallsanitize_ml_labelsUsage examplesHere you have a couple of common examples: you have a set of metrics to normalize or a set of model names to normalize.fromsanitize_ml_labelsimportsanitize_ml_labels# Example for metricslabels=["acc","loss","auroc","lr"]sanitize_ml_labels(labels)# ["Accuracy", "Loss", "AUROC", "Learning rate"]# Example for modelslabels=["vanilla mlp","vanilla cnn","vanilla ffnn","vanilla perceptron"]sanitize_ml_labels(labels)# ["MLP", "CNN", "FFNN", "Perceptron"]Corner casesIn some cases, you may have a combination of terms separated by hyphens that must be removed, plus words
that are actually correctly written separated by hyphens. We approach this problem with an heuristic
based on anextended list of over 45K hyphenated english words, originally retrieved from
theMetadata consulting website.From such a word list, we generate an index by running:index={}forwordinwords:word=word.lower()index.setdefault(word[0],[]).append((word,word[1:]))And from there the user experience is transparent and looks as follows:# Running the followingsanitize_ml_labels("non-existent-edges-in-graph")# will yield the string `Non-existent edges in graph`The lookup heuristic to quickly find an hyphenated word in a given label from the large haystack
was written byTommaso Fontana.Extra utilitiesSince I always use metric sanitization alongside axis normalization, it is useful to know which axis
should be maxed between zero and one to avoid any visualization bias to the metrics.For this reason I have created the methodis_normalized_metric, which after having normalized the given metric
validates it against known normalized metrics (metrics between 0 and 1, is there another name? I could not figure out a better one).Analogously, I have also created the methodis_absolutely_normalized_metricto validate a metric for the range
between -1 and 1.fromsanitize_ml_labelsimportis_normalized_metric,is_absolutely_normalized_metricis_normalized_metric("MSE")# Falseis_normalized_metric("acc")# Trueis_normalized_metric("accuracy")# Trueis_normalized_metric("AUROC")# Trueis_normalized_metric("auprc")# Trueis_absolutely_normalized_metric("auprc")# Falseis_absolutely_normalized_metric("MCC")# Trueis_absolutely_normalized_metric("Markedness")# TrueNew features and issuesAs always, for new features and issues you can either open a new issue and pull request.
A pull request will always be the quicker way, but I’ll look into the issues when I get the time.Tests CoverageI have strived to mantain a 100% code coverage in this project:ModulestatementsmissingexcludedcoverageTotal8400100%sanitize_ml_labels/__init__.py300100%sanitize_ml_labels/__version__.py100100%sanitize_ml_labels/is_normalized_metric.py1000100%sanitize_ml_labels/find_true_hyphenated_words.py1900100%sanitize_ml_labels/sanitize_ml_labels.py7000100%You can verify the test coverage of this repository by running in its root:pytest--cov