Add files via upload

This commit is contained in:
Silviu Marian Udrescu 2020-06-27 19:10:29 -04:00 committed by GitHub
parent 84aa8e27fa
commit e53ec2e80e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -9,32 +9,34 @@ from os import path
from sympy import Symbol, lambdify, N from sympy import Symbol, lambdify, N
def get_symbolic_expr_error(data,expr): def get_symbolic_expr_error(data,expr):
N_vars = len(data[0])-1 try:
possible_vars = ["x%s" %i for i in np.arange(0,30,1)] N_vars = len(data[0])-1
variables = [] possible_vars = ["x%s" %i for i in np.arange(0,30,1)]
for i in range(N_vars): variables = []
variables = variables + [possible_vars[i]] for i in range(N_vars):
eq = parse_expr(expr) variables = variables + [possible_vars[i]]
f = lambdify(variables, N(eq)) eq = parse_expr(expr)
real_variables = [] f = lambdify(variables, N(eq))
real_variables = []
for i in range(len(data[0])-1): for i in range(len(data[0])-1):
check_var = "x"+str(i) check_var = "x"+str(i)
if check_var in np.array(variables).astype('str'): if check_var in np.array(variables).astype('str'):
real_variables = real_variables + [data[:,i]] real_variables = real_variables + [data[:,i]]
# Remove accidental nan's # Remove accidental nan's
good_idx = np.where(np.isnan(f(*real_variables))==False) good_idx = np.where(np.isnan(f(*real_variables))==False)
# use this to get rid of cases where the loss gets complex because of transformations of the output variable # use this to get rid of cases where the loss gets complex because of transformations of the output variable
if isinstance(np.mean((f(*real_variables)-data[:,-1])**2), complex): if isinstance(np.mean((f(*real_variables)-data[:,-1])**2), complex):
return 1000000
else:
try:
#return np.sqrt(np.mean((f(*real_variables)[good_idx]-data[good_idx][:,-1])**2))/np.sqrt(np.mean(data[good_idx][:,-1]**2))
return np.mean(np.log2(1+abs(f(*real_variables)[good_idx]-data[good_idx][:,-1])*2**30))
except:
# use this for the case in which the expression is just one number (i.e. not array)
#return np.sqrt(np.mean((f(*real_variables)-data[:,-1])**2))/np.sqrt(np.mean(data[:,-1]**2))
return np.mean(np.log2(1+abs(f(*real_variables)-data[:,-1])*2**30))
except:
return 1000000 return 1000000
else:
try:
#return np.sqrt(np.mean((f(*real_variables)[good_idx]-data[good_idx][:,-1])**2))/np.sqrt(np.mean(data[good_idx][:,-1]**2))
return np.mean(np.log2(1+abs(f(*real_variables)[good_idx]-data[good_idx][:,-1])*2**30))
except:
# use this for the case in which the expression is just one number (i.e. not array)
#return np.sqrt(np.mean((f(*real_variables)-data[:,-1])**2))/np.sqrt(np.mean(data[:,-1]**2))
return np.mean(np.log2(1+abs(f(*real_variables)-data[:,-1])*2**30))