Skip to content
Snippets Groups Projects
Commit 12386647 authored by dmt's avatar dmt
Browse files

Define adapters for machine learning models used in reconstruction.

parent 8a909a9f
No related branches found
No related tags found
No related merge requests found
from collections import Counter from collections import Counter
from abc import ABCMeta, abstractmethod from abc import abstractmethod
from numpy import array, linspace, less, greater, std, argsort from numpy import array, linspace, less, greater, std, argsort
from scipy.signal import argrelextrema from scipy.signal import argrelextrema
import sklearn.cluster import sklearn.cluster
from sklearn.neighbors.kde import KernelDensity from sklearn.neighbors.kde import KernelDensity
from sklearn.metrics import max_error, mean_absolute_error
from keras.layers import Input, Dense from keras.layers import Input, Dense
from keras.models import Model from keras.models import Model
from keras.regularizers import l1 from keras.regularizers import l1
...@@ -94,6 +95,49 @@ class ConstructionClusteringMLModel(MachineLearningModel): ...@@ -94,6 +95,49 @@ class ConstructionClusteringMLModel(MachineLearningModel):
return self return self
class ReconstructionConceptualMLModel(MachineLearningModel):
def __init__(self, model):
self.__model = model
self.accuracy = None
def train(self, data, *args, **kwargs):
# TODO (dmt): Improve signature of this function!
labels = args[0]
self.__model = self.__model.fit(data, labels)
self.accuracy = self.__model.score(data, labels)
return self
def predict(self, data):
return [i for i in self.__model.predict(data)]
class ReconstructionProceduralMLModel(MachineLearningModel):
def __init__(self, model):
self.__model = model
self.mean_error = None
self.max_error = None
def train(self, data, *args, **kwargs):
# TODO (dmt): Provide a better way dealing with
# zero values as max_abs_label!
labels = args[0]
self.__model = self.__model.fit(data, labels)
relative_max_error = max_error(y_true=labels,
y_pred=self.__model.predict(data))
max_abs_label = max((abs(i) for i in labels))
if max_abs_label == 0:
raise ValueError()
self.max_error = (relative_max_error*100)/max_abs_label
relative_mean_error = mean_absolute_error(
y_true=labels, y_pred=self.__model.predict(data))
self.mean_error = (relative_mean_error*100)/max_abs_label
return self
def predict(self, data):
return [i for i in self.__model.predict(data)]
class KernelDensityEstimator(MachineLearningModel): class KernelDensityEstimator(MachineLearningModel):
def __init__(self, kernel="gaussian", bandwidth=3, gridsize=256): def __init__(self, kernel="gaussian", bandwidth=3, gridsize=256):
...@@ -107,8 +151,8 @@ class KernelDensityEstimator(MachineLearningModel): ...@@ -107,8 +151,8 @@ class KernelDensityEstimator(MachineLearningModel):
if not self.__model: if not self.__model:
self.__model = KernelDensity(kernel=self.kernel, self.__model = KernelDensity(kernel=self.kernel,
bandwidth=self.bandwidth) bandwidth=self.bandwidth)
self.__model.fit(reshaped_data) self.__model.fit(reshaped_data)
return self return self
def density(self): def density(self):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment