From c978f95588e7aa4bbdb2a3bc8b7ca9b9fa1e9e36 Mon Sep 17 00:00:00 2001 From: FloBab73 Date: Wed, 14 Oct 2026 09:48:12 +0200 Subject: [PATCH] =?UTF-8?q?=C3=BCbung=203?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Übung 3/SLN_Vorlage.py | 43 +++++++++++ Übung 3/data/iris.csv | 151 +++++++++++++++++++++++++++++++++++++++ Übung 3/neuron.ipynb | 157 +++++++++++++++++++++++++++++++++++++++++ Übung 3/nnwplot.py | 49 +++++++++++++ 4 files changed, 400 insertions(+) create mode 100644 Übung 3/SLN_Vorlage.py create mode 100644 Übung 3/data/iris.csv create mode 100644 Übung 3/neuron.ipynb create mode 100644 Übung 3/nnwplot.py diff --git a/Übung 3/SLN_Vorlage.py b/Übung 3/SLN_Vorlage.py new file mode 100644 index 0000000..ac94500 --- /dev/null +++ b/Übung 3/SLN_Vorlage.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +# %% +import numpy as np +import nnwplot +import matplotlib.pyplot as plt + +# %% ErrorRate +def ErrorRate(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__(...): # Konstruktor + np.random.seed(42) + self._b=np.zeros((AAA,1)) + self._W=np.random.randn(BBB,CCC)/np.sqrt(DDD) + + # def DeltaTrain(self, X, T, eta, maxIter, maxErrorRate): + # N=X.shape[1] # Anzahl Trainingsdaten + # plt.ion() # interactive mode on + # for it in range(maxIter): + # Y = ... # nur ein Aufruf + # err = ErrorRate(..., ...) + # if (it%20) == 0: + # print('#{} err:{}\n{}\n{}'.format(it,err,self._W,self._b)) + # nnwplot.plotTwoFeatures(...) + # plt.pause(0.05) # warte auf GUI event loop (je nach python Version notwendig oder nicht) + # if err <= maxErrorRate: + # break + # # update _W + # ... + # # update _b + # ... + # print('#{} err:{}\n{}\n{}'.format(it,err,self._W,self._b)) + # nnwplot.plotTwoFeatures(...) + # plt.pause(0.05) # warte auf GUI event loop (je nach python Version notwendig oder nicht) + # + # input("Press Enter to continue...") # wenn gewünscht ... \ No newline at end of file diff --git a/Übung 3/data/iris.csv b/Übung 3/data/iris.csv new file mode 100644 index 0000000..c620a3d --- /dev/null +++ b/Übung 3/data/iris.csv @@ -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 + diff --git a/Übung 3/neuron.ipynb b/Übung 3/neuron.ipynb new file mode 100644 index 0000000..4430eee --- /dev/null +++ b/Übung 3/neuron.ipynb @@ -0,0 +1,157 @@ +{ + "cells": [ + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-10-13T07:21:54.348461300Z", + "start_time": "2026-10-13T07:21:54.299736200Z" + } + }, + "cell_type": "code", + "source": [ + "import numpy as np\n", + "from nnwplot import plotTwoFeatures" + ], + "id": "d868e9cc56f69b3c", + "outputs": [], + "execution_count": 8 + }, + { + "cell_type": "code", + "id": "initial_id", + "metadata": { + "collapsed": true, + "ExecuteTime": { + "end_time": "2026-10-13T07:09:20.388397500Z", + "start_time": "2026-10-13T07:09:20.355193Z" + } + }, + "source": [ + "flower_data = np.loadtxt('data/iris.csv', delimiter=',')\n", + "inverse = flower_data.T\n", + "X = inverse[:-1]\n", + "T = inverse[-1]" + ], + "outputs": [], + "execution_count": 2 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-10-13T07:13:33.785175400Z", + "start_time": "2026-10-13T07:13:33.654386400Z" + } + }, + "cell_type": "code", + "source": [ + "two_features = X[:2]\n", + "two_features.shape[1]" + ], + "id": "dedf782c649c9471", + "outputs": [ + { + "data": { + "text/plain": [ + "150" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 5 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-10-13T07:30:01.716495600Z", + "start_time": "2026-10-13T07:30:01.627475700Z" + } + }, + "cell_type": "code", + "source": [ + "def neuron(X):\n", + " N = X.shape[1]\n", + " net = np.zeros(N)\n", + " W = [-0.3, 1]\n", + " b = 1.7\n", + " for n in range(0,N):\n", + " net[n]+=X[0,n]*W[0]+X[1,n]*W[1]\n", + " return net>b" + ], + "id": "a0ecaf93ad34722a", + "outputs": [], + "execution_count": 49 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-10-13T07:30:03.448079700Z", + "start_time": "2026-10-13T07:30:03.081747600Z" + } + }, + "cell_type": "code", + "source": "plotTwoFeatures(two_features, T, neuron)", + "id": "2de00d0b487767d9", + "outputs": [ + { + "data": { + "text/plain": [ + "
" + ], + "image/png": "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" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "execution_count": 50 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": [ + "B ändert die Weite der Grenze\n", + "\n", + "Die Gewichte ändern quasi den Winkel und die Auffächerung der Grenze\n", + "---\n", + "W = [-0.3, 1]\n", + "\n", + "b = 1.7\n", + "\n", + "Das gibt die besten Ergebnisse" + ], + "id": "2c6d552cee676e9c" + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "", + "id": "3dafdf76e180ce92" + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Übung 3/nnwplot.py b/Übung 3/nnwplot.py new file mode 100644 index 0000000..8b715cd --- /dev/null +++ b/Übung 3/nnwplot.py @@ -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()