From 6a5081a0c1e79690b38d25e46e1ec98bcc5ea980 Mon Sep 17 00:00:00 2001 From: Paul Date: Sun, 15 Nov 2020 16:54:53 +0100 Subject: [PATCH] version zur Abgabe --- ML_U3_2.ipynb | 93 +++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 75 insertions(+), 18 deletions(-) diff --git a/ML_U3_2.ipynb b/ML_U3_2.ipynb index 2b10c73..8abd694 100644 --- a/ML_U3_2.ipynb +++ b/ML_U3_2.ipynb @@ -15,7 +15,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 49, "metadata": {}, "outputs": [], "source": [ @@ -52,7 +52,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 50, "metadata": {}, "outputs": [], "source": [ @@ -63,7 +63,10 @@ " >>> Perceptron(2, 100, 0.1)\n", " \"\"\"\n", " ### Dein Code kommt hierhin:\n", - " \n", + " self.weights = np.zeros(number_of_inputs+1)\n", + " self.epochs = epochs\n", + " self.eta = eta\n", + " self.bias = 0\n", " ##########################\n", " pass\n", " \n", @@ -73,13 +76,11 @@ " >>> inputs = np.array([0, 1])\n", " >>> h = perceptron.predict(inputs) \n", " \"\"\"\n", - " \n", " # Dein Code kommt hierhin: \n", - " \n", - " \n", + " z = self.bias * self.weights[0]\n", + " z += np.dot(inputs, self.weights[1:])\n", + " return 1/(1 + np.exp(-z))\n", " ##########################\n", - " \n", - " \n", " pass\n", "\n", " def fit(self, training_inputs, labels):\n", @@ -87,10 +88,31 @@ " Beispiel des Funktionsaufrufs:\n", " >>> perceptron.fit(train_input, labels)\n", " \"\"\"\n", - " \n", " # Dein Code kommt hierhin:\n", - " \n", - "\n", + " for e in range(self.epochs):\n", + " L_old=0\n", + " h_old=0\n", + " z_old=-1\n", + " weights_old=-np.ones(len(self.weights))\n", + " for xi, target in zip(training_inputs, labels):\n", + " h = self.predict(xi)\n", + " h_diff = h - h_old\n", + " L = (target - h) ** 2\n", + " L_diff = L - L_old\n", + " z = self.bias * self.weights[0] + np.dot(xi, self.weights[1:])\n", + " z_diff = z - z_old\n", + " weights_diff = self.weights - weights_old\n", + " #Ableitung\n", + " deriv_z = np.where(weights_diff!=0, z_diff/weights_diff, 0)\n", + " deriv_h = h_diff/z_diff if z_diff!=0 else 0\n", + " deriv_L = L_diff/h_diff if h_diff!=0 else 0\n", + " deriv = deriv_L * deriv_h * deriv_z\n", + " delta_weights = self.eta * deriv\n", + " weights_old = self.weights\n", + " L_old = L\n", + " h_old = h\n", + " z_old = z\n", + " self.weights -= delta_weights\n", " ##########################\n", " pass\n", " \n", @@ -110,9 +132,28 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 51, "metadata": {}, - "outputs": [], + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[3.0643397 3.0643397 3.0643397]\n" + ] + }, + { + "output_type": "error", + "ename": "NameError", + "evalue": "name 'train_input_AND' is not defined", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 23\u001b[0m \u001b[0mfig\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0max\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msubplots\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 24\u001b[0;31m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscatter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrain_input_AND\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlabels_AND\u001b[0m\u001b[0;34m==\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m,\u001b[0m \u001b[0mtrain_input_AND\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlabels_AND\u001b[0m\u001b[0;34m==\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 25\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscatter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrain_input_AND\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlabels_AND\u001b[0m\u001b[0;34m==\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m,\u001b[0m \u001b[0mtrain_input_AND\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlabels_AND\u001b[0m\u001b[0;34m==\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 26\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_AND\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0my_AND\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'train_input_AND' is not defined" + ] + } + ], "source": [ "# AND-Datensatz\n", "train_input = np.array([\n", @@ -123,12 +164,28 @@ " ])\n", "\n", "labels_AND = np.array([0, 0, 0, 1])\n", - "\n" + "\n", + "perceptron_AND = Perceptron(2,100,0.1)\n", + "perceptron_AND.fit(train_input,labels_AND)\n", + "\n", + "# Geradengleichung berechnen und plotten\n", + "weights = perceptron_AND.getWeights()\n", + "print(weights)\n", + "\n", + "slope = -weights[1]/weights[2]\n", + "offset = -weights[0]/weights[2]\n", + "x_AND = np.linspace(0,1)\n", + "y_AND = slope * x_AND + offset\n", + "\n", + "fig, ax = plt.subplots()\n", + "ax.scatter(train_input_AND[(labels_AND==-1),0] , train_input_AND[(labels_AND==-1),1])\n", + "ax.scatter(train_input_AND[(labels_AND==1),0] , train_input_AND[(labels_AND==1),1])\n", + "plt.plot(x_AND,y_AND)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -138,7 +195,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -187,9 +244,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.4" + "version": "3.7.6-final" } }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file