from ..IAlgorithm import IAlgorithm
from sklearn.base import clone
from sklearn.neural_network import MLPRegressor as MLPR
from ...performance.metrics import RegressionMetrics
[docs]class MLPRegressor(IAlgorithm):
"""Implementation of the MultiLayerPerceptronRegressor from the scikitlearn library
"""
def __init__(self,args={},**kwargs):
model = MLPR
if args:
self.model = model(**args)
elif kwargs:
self.model = model(**kwargs)
else:
self.model = model()
[docs] def fit(self,x_values,y_values,*args):
return self.model.fit(x_values,y_values,*args)
[docs] def predict(self,x_values):
return self.model.predict(x_values)
[docs] def get_model(self):
return self.model
[docs] def clone(self):
return MLPRegressor(self.get_params())
[docs] def get_params(self):
return self.model.get_params()
[docs] def set_params(self,params):
return self.model.set_params(**params)
[docs] def objective_function(self,trial,x_train,y_train,x_test,y_test):
metric = RegressionMetrics()
max_iter = 1000
activation = trial.suggest_categorical('activation',['logistic', 'relu'])
#learning_rate = trial.suggest_categorical('learning_rate',['constant', 'invscaling', 'adaptive'])
solver = trial.suggest_categorical('solver', ['adam','sgd'])
n_iter_no_change = 100
if solver in ['adam','sgd']:
learning_rate_init= trial.suggest_categorical('learning_rate_init',[float(1e-5),float(1e-4),float(1e-3)])
regr = MLPRegressor({'learning_rate': 'constant','n_iter_no_change':n_iter_no_change, 'max_iter': max_iter, 'activation': activation,'learning_rate_init': learning_rate_init})
else:
regr = MLPRegressor({'learning_rate': 'constant','n_iter_no_change':n_iter_no_change, 'max_iter' : max_iter,'activation' : activation})
regr.fit(x_train, y_train)
y_pred = regr.predict(x_test)
return metric.cmd_rmse(y_test, y_pred)