Source code for neurolab.error
# -*- coding: utf-8 -*-
""" Train error functions with derivatives
:Example:
>>> msef = MSE()
>>> x = np.array([[1.0, 0.0], [2.0, 0.0]])
>>> msef(x, 0)
1.25
>>> # calc derivative:
>>> msef.deriv(x[0], 0)
array([ 1., 0.])
"""
import numpy as np
[docs]class MSE():
"""
Mean squared error function
:Parameters:
target: ndarray
target values for network
output: ndarray
simulated output of network
:Returns:
v: float
Error value
:Example:
>>> f = MSE()
>>> x = np.array([[1.0, 0.0], [2.0, 0.0]])
>>> f(x, 0)
1.25
"""
def __call__(self, target, output):
e = target - output
N = e.size
v = np.sum(np.square(e)) / N
return v
[docs] def deriv(self, target, output):
"""
Derivative of MSE error function
:Parameters:
target: ndarray
target values for network
output: ndarray
simulated output of network
:Returns:
d: ndarray
Derivative: dE/d_out
:Example:
>>> f = MSE()
>>> x = np.array([1.0, 0.0])
>>> # calc derivative:
>>> f.deriv(x, 0)
array([ 1., 0.])
"""
e = target - output
N = len(e)
d = e * (2 / N)
return d
[docs]class SSE:
"""
Sum squared error function
:Parameters:
target: ndarray
target values for network
output: ndarray
simulated output of network
:Returns:
v: float
Error value
"""
def __call__(self, target, output):
e = target - output
v = 0.5 * np.sum(np.square(e))
return v
[docs] def deriv(self, target, output):
"""
Derivative of SSE error function
:Parameters:
target: ndarray
target values for network
output: ndarray
simulated output of network
:Returns:
d: ndarray
Derivative: dE/d_out
"""
return target - output
[docs]class SAE:
"""
Sum absolute error function
:Parameters:
target: ndarray
target values for network
output: ndarray
simulated output of network
:Returns:
v: float
Error value
"""
def __call__(self, target, output):
e = target - output
v = np.sum(np.abs(e))
return v
[docs] def deriv(self, target, output):
"""
Derivative of SAE error function
:Parameters:
target: ndarray
target values for network
output: ndarray
simulated output of network
:Returns:
d: ndarray
Derivative: dE/d_out
"""
e = target - output
d = np.sign(e)
return d
[docs]class MAE:
"""
Mean absolute error function
:Parameters:
target: ndarray
target values for network
output: ndarray
simulated output of network
:Returns:
v: float
Error value
"""
def __call__(self, target, output):
e = target - output
v = np.sum(np.abs(e)) / e.size
return v
[docs] def deriv(self, target, output):
"""
Derivative of SAE error function
:Parameters:
target: ndarray
target values for network
output: ndarray
simulated output of network
:Returns:
d: ndarray
Derivative: dE/d_out
"""
e = target - output
d = np.sign(e) / e.size
return d
[docs]class CEE:
"""
Cross-entropy error function.
For use when targets in {0,1}
C = -sum( t * log(o) + (1 - t) * log(1 - o))
Thanks kwecht https://github.com/kwecht
:Parameters:
target: ndarray
target values for network
output: ndarray
simulated output of network
:Returns:
v: float
Error value
"""
def __call__(self, target, output):
# Objective term in cost function
y = output.copy()
t = target.copy()
eps = np.spacing(1)
y[y > (1 - eps)] = 1 - eps
y[y < eps] = eps
t[t > (1 - eps)] = 1 - eps
t[t < eps] = eps
v = - np.sum(t * np.log(y) + (1 - t) * np.log(1 - y))
v /= t.size
return v
[docs] def deriv(self, target, output):
"""
Derivative of CEE error function
dC/dy = - t/o + (1 - t) / (1 - o)
:Parameters:
target: ndarray
target values for network
output: ndarray
simulated output of network
:Returns:
d: ndarray
Derivative: dE/d_out
"""
y = output.copy()
t = target.copy()
eps = 0.0
y[y > (1 - eps)] = 1 - eps
y[y < eps] = eps
t[t > (1 - eps)] = 1 - eps
t[t < eps] = eps
#dC/dy = - d/y + (1-d)/(1-y)
eps = np.spacing(1)
dy = t / (y + eps) - (1 - t) / (1 - y + eps)
dy /= t.size
return dy