Source code for ecosound.classification.classification

# -*- coding: utf-8 -*-
"""
Created on Thu Nov 12 14:21:12 2020

@author: xavier.mouy
"""
import sys
sys.path.append("..")  # Adds higher directory to python modules path.
#from ecosound.measurements.measurer_builder import MeasurerFactory
import pickle
import numpy as np

[docs] class Classifier(): def __init__(self): self.model = None self.features = None self.Norm_mean = None self.Norm_std = None self.classes_encoder = None
[docs] def load_model(self, model_file): # laod classif model classif_model = pickle.load(open(model_file, 'rb')) self.features = classif_model['features'] self.model = classif_model['model'] self.Norm_mean = classif_model['normalization_mean'] self.Norm_std = classif_model['normalization_std'] self.classes_encoder = classif_model['classes']
[docs] def classify(self, measurements): # data dataframe data = measurements.data n1=len(data) # drop observations/rows with NaNs data = data.replace([np.inf, -np.inf], np.nan) data.dropna(subset=self.features, axis=0, how='any', thresh=None, inplace=True) n2=len(data) # Classification - predictions X = data[self.features] X = (X-self.Norm_mean)/self.Norm_std pred_class = self.model.predict(X) pred_prob = self.model.predict_proba(X) pred_prob = pred_prob[range(0,len(pred_class)),pred_class] # Relabel for index, row in self.classes_encoder.iterrows(): pred_class = [row['label'] if i==row['ID'] else i for i in pred_class] # update measurements data['label_class'] = pred_class data['confidence'] = pred_prob measurements.data = data return measurements