übung 3 fix
parent
cd7ec4b7a6
commit
2740fc8bf9
|
|
@ -5,7 +5,7 @@ import matplotlib.pyplot as plt
|
|||
|
||||
def error_rate(Y, T):
|
||||
if Y.ndim == 1 or Y.shape[0] == 1:
|
||||
errors = Y - T
|
||||
errors = Y != T
|
||||
return errors.sum() / Y.size
|
||||
else: # für mehrere Ausgaben in one-hot Kodierung:
|
||||
errors = Y.argmax(0) != T.argmax(0)
|
||||
|
|
@ -29,7 +29,7 @@ class SLN:
|
|||
for i in range(self.dIn):
|
||||
value += X[i, n] * self._W[i][0]
|
||||
net[n] += value + self._b[0][0]
|
||||
return net
|
||||
return net > 0
|
||||
|
||||
def delta_train(self, X, T, eta, maxIter, maxErrorRate):
|
||||
N = X.shape[1] # Anzahl Trainingsdaten
|
||||
|
|
@ -50,8 +50,9 @@ class SLN:
|
|||
to_learn = weighted_error * eta
|
||||
#print("{:.2f} = {} * {} * {}".format(to_learn, err, X[j, n], eta))
|
||||
self._W[j, 0] += to_learn
|
||||
self._b[0][0] -= to_learn
|
||||
# update _b
|
||||
self._b[0][0] += err * eta
|
||||
|
||||
...
|
||||
print('#{} err:{}\n{}\n{}'.format(it, err, self._W, self._b))
|
||||
nnwplot.plotTwoFeatures(X, T, self.neuron)
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,58 @@
|
|||
import numpy as np
|
||||
import nnwplot
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
|
||||
def error_rate(Y, T):
|
||||
if Y.ndim == 1 or Y.shape[0] == 1:
|
||||
errors = Y - T
|
||||
return errors.sum() / Y.size
|
||||
else: # für mehrere Ausgaben in one-hot Kodierung:
|
||||
errors = Y.argmax(0) != T.argmax(0)
|
||||
return errors.sum() / Y.shape[1]
|
||||
|
||||
|
||||
class SLN:
|
||||
def __init__(self, dIn, cOut):
|
||||
self.dIn = dIn
|
||||
self.cOut = cOut
|
||||
np.random.seed(42)
|
||||
self._b = np.zeros((cOut, 1))
|
||||
self._W = np.random.randn(dIn, cOut) / np.sqrt(dIn + 1)
|
||||
|
||||
def neuron(self, X):
|
||||
N = X.shape[1]
|
||||
net = np.zeros(N)
|
||||
|
||||
for n in range(0, N):
|
||||
value = 0
|
||||
for i in range(self.dIn):
|
||||
value += X[i, n] * self._W[i][0]
|
||||
net[n] += value + self._b[0][0]
|
||||
return net
|
||||
|
||||
def delta_train(self, X, T, eta, maxIter, maxErrorRate):
|
||||
N = X.shape[1] # Anzahl Trainingsdaten
|
||||
plt.ion() # interactive mode on
|
||||
for it in range(maxIter):
|
||||
Y = self.neuron(X) # nur ein Aufruf
|
||||
err = error_rate(Y, T)
|
||||
if (it % 10) == 0:
|
||||
print('#{} err:{}\n{}\n{}'.format(it, err, self._W, self._b))
|
||||
nnwplot.plotTwoFeatures(X, T, self.neuron)
|
||||
plt.pause(0.05) # warte auf GUI event loop (je nach python Version notwendig oder nicht)
|
||||
if err <= maxErrorRate:
|
||||
break
|
||||
# update _W
|
||||
for n in range(N):
|
||||
for j in range(self.dIn):
|
||||
weighted_error = err * X[j, n]
|
||||
to_learn = weighted_error * eta
|
||||
#print("{:.2f} = {} * {} * {}".format(to_learn, err, X[j, n], eta))
|
||||
self._W[j, 0] += to_learn
|
||||
self._b[0][0] -= to_learn
|
||||
# update _b
|
||||
...
|
||||
print('#{} err:{}\n{}\n{}'.format(it, err, self._W, self._b))
|
||||
nnwplot.plotTwoFeatures(X, T, self.neuron)
|
||||
plt.pause(0.05) # warte auf GUI event loop (je nach python Version notwendig oder nicht)
|
||||
|
|
@ -0,0 +1,151 @@
|
|||
5.1,3.5,1.4,0.2,0
|
||||
4.9,3.0,1.4,0.2,0
|
||||
4.7,3.2,1.3,0.2,0
|
||||
4.6,3.1,1.5,0.2,0
|
||||
5.0,3.6,1.4,0.2,0
|
||||
5.4,3.9,1.7,0.4,0
|
||||
4.6,3.4,1.4,0.3,0
|
||||
5.0,3.4,1.5,0.2,0
|
||||
4.4,2.9,1.4,0.2,0
|
||||
4.9,3.1,1.5,0.1,0
|
||||
5.4,3.7,1.5,0.2,0
|
||||
4.8,3.4,1.6,0.2,0
|
||||
4.8,3.0,1.4,0.1,0
|
||||
4.3,3.0,1.1,0.1,0
|
||||
5.8,4.0,1.2,0.2,0
|
||||
5.7,4.4,1.5,0.4,0
|
||||
5.4,3.9,1.3,0.4,0
|
||||
5.1,3.5,1.4,0.3,0
|
||||
5.7,3.8,1.7,0.3,0
|
||||
5.1,3.8,1.5,0.3,0
|
||||
5.4,3.4,1.7,0.2,0
|
||||
5.1,3.7,1.5,0.4,0
|
||||
4.6,3.6,1.0,0.2,0
|
||||
5.1,3.3,1.7,0.5,0
|
||||
4.8,3.4,1.9,0.2,0
|
||||
5.0,3.0,1.6,0.2,0
|
||||
5.0,3.4,1.6,0.4,0
|
||||
5.2,3.5,1.5,0.2,0
|
||||
5.2,3.4,1.4,0.2,0
|
||||
4.7,3.2,1.6,0.2,0
|
||||
4.8,3.1,1.6,0.2,0
|
||||
5.4,3.4,1.5,0.4,0
|
||||
5.2,4.1,1.5,0.1,0
|
||||
5.5,4.2,1.4,0.2,0
|
||||
4.9,3.1,1.5,0.1,0
|
||||
5.0,3.2,1.2,0.2,0
|
||||
5.5,3.5,1.3,0.2,0
|
||||
4.9,3.1,1.5,0.1,0
|
||||
4.4,3.0,1.3,0.2,0
|
||||
5.1,3.4,1.5,0.2,0
|
||||
5.0,3.5,1.3,0.3,0
|
||||
4.5,2.3,1.3,0.3,0
|
||||
4.4,3.2,1.3,0.2,0
|
||||
5.0,3.5,1.6,0.6,0
|
||||
5.1,3.8,1.9,0.4,0
|
||||
4.8,3.0,1.4,0.3,0
|
||||
5.1,3.8,1.6,0.2,0
|
||||
4.6,3.2,1.4,0.2,0
|
||||
5.3,3.7,1.5,0.2,0
|
||||
5.0,3.3,1.4,0.2,0
|
||||
7.0,3.2,4.7,1.4,1
|
||||
6.4,3.2,4.5,1.5,1
|
||||
6.9,3.1,4.9,1.5,1
|
||||
5.5,2.3,4.0,1.3,1
|
||||
6.5,2.8,4.6,1.5,1
|
||||
5.7,2.8,4.5,1.3,1
|
||||
6.3,3.3,4.7,1.6,1
|
||||
4.9,2.4,3.3,1.0,1
|
||||
6.6,2.9,4.6,1.3,1
|
||||
5.2,2.7,3.9,1.4,1
|
||||
5.0,2.0,3.5,1.0,1
|
||||
5.9,3.0,4.2,1.5,1
|
||||
6.0,2.2,4.0,1.0,1
|
||||
6.1,2.9,4.7,1.4,1
|
||||
5.6,2.9,3.6,1.3,1
|
||||
6.7,3.1,4.4,1.4,1
|
||||
5.6,3.0,4.5,1.5,1
|
||||
5.8,2.7,4.1,1.0,1
|
||||
6.2,2.2,4.5,1.5,1
|
||||
5.6,2.5,3.9,1.1,1
|
||||
5.9,3.2,4.8,1.8,1
|
||||
6.1,2.8,4.0,1.3,1
|
||||
6.3,2.5,4.9,1.5,1
|
||||
6.1,2.8,4.7,1.2,1
|
||||
6.4,2.9,4.3,1.3,1
|
||||
6.6,3.0,4.4,1.4,1
|
||||
6.8,2.8,4.8,1.4,1
|
||||
6.7,3.0,5.0,1.7,1
|
||||
6.0,2.9,4.5,1.5,1
|
||||
5.7,2.6,3.5,1.0,1
|
||||
5.5,2.4,3.8,1.1,1
|
||||
5.5,2.4,3.7,1.0,1
|
||||
5.8,2.7,3.9,1.2,1
|
||||
6.0,2.7,5.1,1.6,1
|
||||
5.4,3.0,4.5,1.5,1
|
||||
6.0,3.4,4.5,1.6,1
|
||||
6.7,3.1,4.7,1.5,1
|
||||
6.3,2.3,4.4,1.3,1
|
||||
5.6,3.0,4.1,1.3,1
|
||||
5.5,2.5,4.0,1.3,1
|
||||
5.5,2.6,4.4,1.2,1
|
||||
6.1,3.0,4.6,1.4,1
|
||||
5.8,2.6,4.0,1.2,1
|
||||
5.0,2.3,3.3,1.0,1
|
||||
5.6,2.7,4.2,1.3,1
|
||||
5.7,3.0,4.2,1.2,1
|
||||
5.7,2.9,4.2,1.3,1
|
||||
6.2,2.9,4.3,1.3,1
|
||||
5.1,2.5,3.0,1.1,1
|
||||
5.7,2.8,4.1,1.3,1
|
||||
6.3,3.3,6.0,2.5,2
|
||||
5.8,2.7,5.1,1.9,2
|
||||
7.1,3.0,5.9,2.1,2
|
||||
6.3,2.9,5.6,1.8,2
|
||||
6.5,3.0,5.8,2.2,2
|
||||
7.6,3.0,6.6,2.1,2
|
||||
4.9,2.5,4.5,1.7,2
|
||||
7.3,2.9,6.3,1.8,2
|
||||
6.7,2.5,5.8,1.8,2
|
||||
7.2,3.6,6.1,2.5,2
|
||||
6.5,3.2,5.1,2.0,2
|
||||
6.4,2.7,5.3,1.9,2
|
||||
6.8,3.0,5.5,2.1,2
|
||||
5.7,2.5,5.0,2.0,2
|
||||
5.8,2.8,5.1,2.4,2
|
||||
6.4,3.2,5.3,2.3,2
|
||||
6.5,3.0,5.5,1.8,2
|
||||
7.7,3.8,6.7,2.2,2
|
||||
7.7,2.6,6.9,2.3,2
|
||||
6.0,2.2,5.0,1.5,2
|
||||
6.9,3.2,5.7,2.3,2
|
||||
5.6,2.8,4.9,2.0,2
|
||||
7.7,2.8,6.7,2.0,2
|
||||
6.3,2.7,4.9,1.8,2
|
||||
6.7,3.3,5.7,2.1,2
|
||||
7.2,3.2,6.0,1.8,2
|
||||
6.2,2.8,4.8,1.8,2
|
||||
6.1,3.0,4.9,1.8,2
|
||||
6.4,2.8,5.6,2.1,2
|
||||
7.2,3.0,5.8,1.6,2
|
||||
7.4,2.8,6.1,1.9,2
|
||||
7.9,3.8,6.4,2.0,2
|
||||
6.4,2.8,5.6,2.2,2
|
||||
6.3,2.8,5.1,1.5,2
|
||||
6.1,2.6,5.6,1.4,2
|
||||
7.7,3.0,6.1,2.3,2
|
||||
6.3,3.4,5.6,2.4,2
|
||||
6.4,3.1,5.5,1.8,2
|
||||
6.0,3.0,4.8,1.8,2
|
||||
6.9,3.1,5.4,2.1,2
|
||||
6.7,3.1,5.6,2.4,2
|
||||
6.9,3.1,5.1,2.3,2
|
||||
5.8,2.7,5.1,1.9,2
|
||||
6.8,3.2,5.9,2.3,2
|
||||
6.7,3.3,5.7,2.5,2
|
||||
6.7,3.0,5.2,2.3,2
|
||||
6.3,2.5,5.0,1.9,2
|
||||
6.5,3.0,5.2,2.0,2
|
||||
6.2,3.4,5.4,2.3,2
|
||||
5.9,3.0,5.1,1.8,2
|
||||
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
# based on: https://github.com/eakbas/tf-svm/blob/master/plot_boundary_on_data.py
|
||||
import numpy as np
|
||||
from matplotlib import pyplot as plt
|
||||
from matplotlib import colors
|
||||
|
||||
|
||||
def plotTwoFeatures(X,T,pred_func):
|
||||
if X.ndim!=2:
|
||||
raise ValueError('X be a matrix (2 dimensional array).')
|
||||
tp=False
|
||||
if X.shape[0]!=2 and X.shape[1]==2:
|
||||
X=X.T
|
||||
tp=True
|
||||
if X.shape[0]!=2:
|
||||
raise ValueError('X must contain exactly 2 features.')
|
||||
|
||||
# determine canvas borders
|
||||
mins = np.amin(X,1);
|
||||
mins = mins - 0.1*np.abs(mins);
|
||||
maxs = np.amax(X,1);
|
||||
maxs = maxs + 0.1*maxs;
|
||||
|
||||
## generate dense grid
|
||||
xs,ys = np.meshgrid(np.linspace(mins[0],maxs[0],300),
|
||||
np.linspace(mins[1], maxs[1], 300));
|
||||
|
||||
|
||||
# evaluate model on the dense grid
|
||||
try:
|
||||
Z = pred_func(np.c_[xs.flatten(), ys.flatten()].T);
|
||||
except:
|
||||
Z = pred_func(np.c_[xs.flatten(), ys.flatten()]);
|
||||
|
||||
if tp:
|
||||
Z=Z.T
|
||||
T=T.T
|
||||
|
||||
if Z.ndim>1 and Z.shape[0]>1: # onehot? -> convert
|
||||
Z=Z.argmax(0)
|
||||
Z = Z.reshape(xs.shape)
|
||||
|
||||
if T.ndim>1 and T.shape[0]>1: # onehot? -> convert
|
||||
T=T.argmax(0)
|
||||
|
||||
# Plot the contour and training examples
|
||||
plt.contourf(xs, ys, Z, cmap=plt.cm.Spectral)
|
||||
plt.scatter(X[0,:], X[1,:], c=T, s=50,
|
||||
cmap=colors.ListedColormap(['orange', 'blue', 'green']))
|
||||
plt.show()
|
||||
Loading…
Reference in New Issue