diff --git a/docs/1intro/case-study.ipynb b/docs/1intro/case-study.ipynb index 4acacbf..7231915 100644 --- a/docs/1intro/case-study.ipynb +++ b/docs/1intro/case-study.ipynb @@ -17,7 +17,7 @@ "\n", "1. Daten laden und verstehen\n", "\n", - " * Nutzung eines offenen Datensatzes (z.B. Boston Housing Dataset oder Kaggle Immobilienpreise).\n", + " * Nutzung eines offenen Datensatzes (z.B. California Housing Dataset oder Kaggle Immobilienpreise).\n", " * Untersuchung der Datenverteilung, Korrelationen und möglicher Ausreißer.\n", "\n", "2. Datenvorbereitung\n", @@ -39,6 +39,47 @@ "## Code-Beispiel" ] }, + { + "cell_type": "code", + "execution_count": 3, + "id": "d7f69c6d-4db0-484d-9c68-c3ec4fce16b9", + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Defaulting to user installation because normal site-packages is not writeable\n", + "Collecting scikit-learn\n", + " Downloading scikit_learn-1.6.1-cp39-cp39-macosx_12_0_arm64.whl.metadata (31 kB)\n", + "Requirement already satisfied: numpy>=1.19.5 in /Users/minye/Library/Python/3.9/lib/python/site-packages (from scikit-learn) (1.26.3)\n", + "Requirement already satisfied: scipy>=1.6.0 in /Users/minye/Library/Python/3.9/lib/python/site-packages (from scikit-learn) (1.12.0)\n", + "Collecting joblib>=1.2.0 (from scikit-learn)\n", + " Using cached joblib-1.4.2-py3-none-any.whl.metadata (5.4 kB)\n", + "Collecting threadpoolctl>=3.1.0 (from scikit-learn)\n", + " Using cached threadpoolctl-3.5.0-py3-none-any.whl.metadata (13 kB)\n", + "Downloading scikit_learn-1.6.1-cp39-cp39-macosx_12_0_arm64.whl (11.1 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m11.1/11.1 MB\u001b[0m \u001b[31m6.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m0:01\u001b[0m\n", + "\u001b[?25hUsing cached joblib-1.4.2-py3-none-any.whl (301 kB)\n", + "Using cached threadpoolctl-3.5.0-py3-none-any.whl (18 kB)\n", + "Installing collected packages: threadpoolctl, joblib, scikit-learn\n", + "Successfully installed joblib-1.4.2 scikit-learn-1.6.1 threadpoolctl-3.5.0\n", + "\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m24.3.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m25.0.1\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49m/Applications/Xcode.app/Contents/Developer/usr/bin/python3 -m pip install --upgrade pip\u001b[0m\n" + ] + } + ], + "source": [ + "import sys\n", + "# !{sys.executable} -m pip install scikit-learn\n" + ] + }, { "cell_type": "markdown", "id": "9d22c329-4a99-4a23-af24-6e4b2eafec89", @@ -67,7 +108,7 @@ "id": "7346190a-b639-455f-95ef-420470149e57", "metadata": {}, "source": [ - "### Beispieldatensatz laden (Boston Housing Dataset)" + "### Beispieldatensatz laden (California Housing Dataset)" ] }, { @@ -799,6 +840,49 @@ "model.fit(x_train_scaled, y_train)" ] }, + { + "cell_type": "code", + "execution_count": 7, + "id": "59a43b36-584b-44a1-8886-794e6dae7387", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0.85438303, 0.12254624, -0.29441013, 0.33925949, -0.00230772,\n", + " -0.0408291 , -0.89692888, -0.86984178])" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.coef_" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "f1d07fc0-8600-44be-b5b4-50a6352b7846", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2.0719469373788777" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.intercept_" + ] + }, { "cell_type": "markdown", "id": "37a770e9-051c-4842-b54d-75c67a5df7a2", @@ -809,7 +893,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 9, "id": "84deab4f-653c-496e-b72e-76a3cedb0575", "metadata": {}, "outputs": [], @@ -827,7 +911,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "id": "1a1e7040-cc53-4f9f-afa1-0c8c9ff1e6dd", "metadata": {}, "outputs": [ @@ -835,8 +919,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "Mittlerer quadratischer Fehler (MSE): 0.5558915986952444\n", - "Bestimmtheitsmaß (R²): 0.5757877060324508\n" + "Mittlerer quadratischer Fehler (MSE): 0.5558915986952442\n", + "Bestimmtheitsmaß (R²): 0.575787706032451\n" ] } ], @@ -857,13 +941,13 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 11, "id": "16270434-db30-472f-ab59-033142994c49", "metadata": {}, "outputs": [ { "data": { - "image/png": "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P1jRFzV9d2Few/tYLllCJuYYGRS+o4ghhBCS6UwfUaxumJ1N7eptsIPneH3aiCJdLpPdYvEEvZRwpKCNEAvjctj+nNbrgeByySLmsGLUjYkU7IvX8vLyZOrUqRpDE+8MJkIIISSewFKBWBK4YWDBwOQPdxIsMRAxpfk5ct5BE+Nq0ch0t9jIkjwVKyjs6wiEWWSCz/E+lksWMVtkvvzlL2vrAFhlIFbwV1RUJGvXrtUso23btslRRx0lzz//fGK2mBBCCIkTiCFBLMmsMaXS0OaVzbUt+jh7TGlCYkwS4RaLRKLcYnuOLRWP25IO4ZEy5jnex3Jpa5GpqqqS6667Tm6++eYur99xxx2yceNG+c9//qPuJ6RKn3TSSfHcVkIIISTuQKwglgRuGFgwMPnDnZSOlphwt9jnW+s1JsbuKTFuMYixeLvFsL6iXLe0dfbcFLI41zp+aWuReeaZZ+Sss87q9vqZZ56p7wG8H16RlxBCCElXIFqQYj1vylB9TGcRY3eLlebnqFusud0rPn9AH/E8UW6xNVVI8/b3uky716fLpa2QQRzMu+++2+11vIb3TLNH829CCCGEZIdbrLqhXb+jN/A+lktb19J3vvMdufTSS2Xx4sUaEwM++OAD+f3vfy8/+MEP9PnLL78sc+bMif/WEkIISXhabya5WAY7c5PsFntt5faolzt4+nBJBo5AeM5ZFDz++OPym9/8JuQ+mjFjhgqcs88+W5+3traGsphSTUNDgxbzQy+okpL0rMxICCHpAJsnkr447w/vyZur++4/dci0cvnTRQdKMubvfnV1Cu98HY696i8hhJD0JxVVYknmUd/qjetyKYmRIYQQkl1kS/NEknimRZmNFO1yKREyaBB59913ywEHHCCjRo2S8vLyLn+EEEIyi1RViSWZx5emDYvrcikRMrfffrvcc889csYZZ6jf6tprr9XO2E6nU2677bbEbCUhhJAkVIl1RXwfr+P9dG2eSJKHE70I4rhcSoQMAn0feughLYrndru1Zgwylm655Rb53//+l5itJIQQknVVYknmUdXYoS0IegPvY7m0FTKVlZWy55576r/RmgBWGXDCCSfICy+8EP8tJIQQklAyuXki6RvENq2obJD311Xr40BinUaV5kmEdotdwPtYLlnEnLU0btw47ac0YcIE2W233bQlwb777qu1ZHJzIzev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", + "image/png": "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ZWV44IEHjGPuvfde3HHHHZg5cyauuOIKNDc345FHHsFRRx2F77//HoWFhWnHcfrpp8PpdOL111/H0UcfnfS71157DRMmTMDEiRMBAOeddx7WrFmDa665BpWVlWhqasLHH3+M7du3Z52wOGvWLNx99914+eWXcfDBBxuXq6qK119/HUceeSSGDx+OcDiMY445Bps2bcLVV1+NESNG4I033sDcuXPh8Xhw3XXXJV3vs88+i0gkgnnz5sFisaC4uLjHHsfW1laceuqpuPDCC3HJJZdg4MCB0DQNZ555Jr755hv8+te/xrhx4/Cvf/0Lc+bMSXkM1qxZg+nTp2PIkCH4/e9/D4fDgddffx0zZszAW2+9hXPOOQdA5q/1LVu2pLzW16xZk/Ra//7773HKKadg0KBBuPvuu6GqKv74xz+itLQ0aWwvvPCCcXvz5s0DAIwaNQoA0NjYiJ/97GfgOA5XX301SktL8f777+Pyyy+Hz+fD9ddfn9VrIe6ll15CNBrFNddcg7a2Njz44IOYOXMmjjvuOHz22Wf43e9+h02bNuGRRx7BzTffnBI4bdq0CRdffDGuvPJKXHLJJXj44Ydx5pln4vHHH8ett96Kq666CgCwYMECzJw5M2np55NPPsGpp56KkSNH4q677kI4HMYjjzyC6dOnY+XKlSmv75kzZ6KyshILFizA//73P/ztb39De3t7ShCxO6688ko899xzuPTSS3Httddi69atePTRR/H999/jq6++SprF2bRpE84//3xcfvnlmDNnDp555hnMnTsXU6ZMwYQJE5Ku9+qrr0ZhYSHuuusubNiwAYsWLUJNTY2RhBy3YcMGXHTRRbjyyivxy1/+EmPHjkUoFMLRRx+NHTt24Morr8Tw4cOxfPly3HLLLaivrzfyENP51a9+hTfffBNXX301xo8fj9bWVnz55ZdYt26d8d7/73//i1NPPRVTpkzBnXfeCZ7njZPdL774AlOnTt3jx7XfYiQvzJ8/n3V8ukKhUMpxJ598Mhs5cmTSZRMmTGBHH310yrEHHnggO/3007u83WAwmHLZK6+8wgCwZcuWGZfNnj2b8TzPvv3225TjNU1jjDH27LPPMgDshBNOMC5jjLEbbriBCYLAPB6PcdnRRx+dNOatW7cyAOzZZ581LjvqqKOYy+ViNTU1aW+PMcbuvPNOBoBddtllScecc845bMCAAcbP27ZtY4IgsHvvvTfpuB9//JGJophyeUcXXXQRKysrY4qiGJfV19cznufZH//4R8YYY+3t7QwAe+ihh7q8rmwceuihbOjQoUxVVeOyDz74gAFgTzzxBGOMsYULFzIA7MUXXzSOiUaj7PDDD2dOp5P5fD7G2K7HuKCggDU1NSXdTk88jkcffTQDwB5//PGkY9966y0GgC1cuNC4TFVVdtxxx6W8Bo4//ng2adIkFolEjMs0TWPTpk1jY8aMMS7L5LWe7v2U7rV+5plnMrvdznbs2GFcVl1dzURRTHmPOhwONmfOnJTrvfzyy9mgQYNYS0tL0uUXXnghc7vdaceSqKKiIun+xJ+70tLSpPfRLbfcwgCwAw88kMmybFx+0UUXMbPZnPS4VVRUMABs+fLlxmUffvghA8BsNlvS++yJJ55gANinn35qXHbQQQexsrIy1traaly2evVqxvM8mz17tnFZ/LV01llnJd2nq666igFgq1evThpT4uP36aefptzunDlzWEVFhfHzF198wQCwl156Ken64++LxMvj9znx+W1qamIWi4XddNNNxmXxz64pU6awaDRqXP7ggw8yAOxf//pXynV+8MEHSbf/pz/9iTkcDrZx48aky3//+98zQRDY9u3bjcsAsDvvvNP42e12s/nz57POaJrGxowZw04++eSkz79QKMRGjBjBTjzxxE7/dm9AS0t5LHHN1ev1oqWlBUcffTS2bNkCr9fb7d8XFhZizZo1qK6u7vSYxHyFSCSClpYW/OxnPwMAY1pT0zQsWbIEZ555Jg455JCU60g8UwGAefPmJV125JFHQlVV1NTUdDvmuObmZixbtgyXXXYZhg8f3uXtAfoZTaIjjzwSra2t8Pl8APRpc03TMHPmTLS0tBj/ysvLMWbMGHz66addjueCCy5AU1NTUhXZm2++CU3TcMEFFwDQny+z2YzPPvssZTp6d11yySWoq6vDsmXLjMtefvllmM1m/PznPwcAvPfeeygvLzeWmQA9r+Daa69FIBBIWRI777zzUmYX4nL9OFosFlx66aVJl33wwQcwmUz45S9/aVzG87wxyxjX1taG//73v5g5cyb8fr9xW62trTj55JNRXV2NHTt2AMjstZ74fursta6qKj755BPMmDEDgwcPNo4fPXo0Tj311E6vOxFjDG+99RbOPPNMMMaS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eDxQFCXt36mqmpLzWFZWhsGDBxuv3ylTpmDUqFF4+OGHEQgEUq4jH19T2aAZmTx10kknwWw248wzz8SVV16JQCCAp556CmVlZSkf6lOmTMGiRYtwzz33YPTo0SgrK8Nxxx2H8ePH45hjjsGUKVNQXFyM7777zijxA/To/qijjsKDDz4IWZYxZMgQfPTRR9i6dWvKeO677z589NFHOProozFv3jzsv//+qK+vxxtvvIEvv/yy09LlPfG3v/0NRxxxBA4++GDMmzcPI0aMwLZt2/Duu+9i1apVWV3XqFGjcM899+CWW27Btm3bMGPGDLhcLmzduhVvv/025s2bh5tvvrnL6zCZTDj33HPx6quvIhgM4uGHH076/caNG3H88cdj5syZGD9+PERRxNtvv43GxkZceOGFxnG33HILFi9ejK1bt2Z0dup0OjFjxgy8/PLLAJCyrDRv3jw88cQTmDt3LqqqqlBZWYk333wTX331FRYuXJjT7SZy8TjOmDEDU6dOxU033YRNmzZh3Lhx+Pe//230PUmc5XjsscdwxBFHYNKkSfjlL3+JkSNHorGxEStWrEBdXR1Wr14NADl9rd9111346KOPMH36dPz617+Gqqp49NFHMXHixJTX3ZQpU/DJJ5/gL3/5CwYPHowRI0bgsMMOw/33349PP/0Uhx12GH75y19i/PjxaGtrw8qVK/HJJ5+k9HjJBw899BBOPfVUHH744bj88suN8mu3251236CtW7firLPOwimnnIIVK1bgxRdfxMUXX4wDDzxwj8Zx9NFH48orr8SCBQuwatUqnHTSSTCZTKiursYbb7yB//u//8P555+/W9cdjUaN9/CGDRvw97//HUcccQTOOuusbv/2N7/5Df7973/jjDPOMMq7g8EgfvzxR7z55pvYtm0bSkpKUv7O7/dj6NChOP/883HggQfC6XTik08+wbfffos///nPAPSTyaeffhqnnnoqJkyYgEsvvRRDhgzBjh078Omnn6KgoADvvPPObt3nvNCLFVJkD6Qrv/73v//NDjjgAGa1WlllZSV74IEH2DPPPMMAsK1btxrHNTQ0sNNPP525XC4GwChrvueee9jUqVNZYWEhs9lsbNy4cezee+9NKi+sq6tj55xzDissLGRut5v9/Oc/Zzt37kwpD2SMsZqaGjZ79mxWWlrKLBYLGzlyJJs/fz6T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cUT3F0Lw6KOPDvr7p556CiEEp06dAuCBBx6gqqpq2MdvbW1l8+bNI1rTZHHgwAGEEOzYsWOyl6JQVDRKyCgUFYoQYsiv22+/fcj7n82m/5d/+Zds27YNgB/96Ef83d/93Vmufnhcd911vPHGG+P6GGeiKDiKX7W1tVx++eW89NJLozrunDlzOHbsmLLQVyhGyYweUaBQVDLHjh0r/XvLli3ceuutvP7666WfhUKhMX/MQCBAIBAAoKamZsyP3x+/3z9lZkL98pe/ZOnSpRw+fJibb76ZK6+8kj179pSNGOXzeTwez5DH03WdxsbGcVqtQjFzUBEZhaJCaWxsLH1Fo1GEEKXvk8kk69ato6GhgVAoxOrVq/nlL39Zuu+ll15KW1sbn/vc50qRBoC2tjauuuoqqqurCQaDLF26lJ/97GcAZLNZbrjhBlpbW/H7/Zx33nl8/etfH7Cu7373uyxduhSv18s555zDjTfe2Of3nZ2dXHPNNQQCARYuXMhPfvKTQZ9judTSf//3f7N69Wp8Ph+zZs3immuu6fP7VCrFX/zFXxAOh5k7dy7/9m//1uf3hw4d4o//+I+pqqqipqaGD3/4wxw4cOCMr3dtbS2NjY2sWrWKu+66i+PHj/P73/++FLHZsmUL7373u/H5fHz/+98H4Dvf+Q5LlizB5/OxePFi7r333tLx+qeWuru7WbduHXV1dfj9fhYuXMj9998/6nUrFNMdJWQUimlIIpHggx/8IFu3buWll17iAx/4AFdddRUHDx4E3LRQc3MzX/nKVzh27FgpurNhwway2SzPPPMMO3fu5J/+6Z9KkR3LsmhtbeU///M/ee2117j11lv5m7/5G37wgx+UHve+++5jw4YN/OVf/iU7d+7kJz/5CQsWLOizti9/+cv88R//Ma+88gof/OAHWbduHV1dXcN6Xo899hjXXHMNH/zgB3nppZfYunUrF198cZ/b3H333axatYqXXnqJz3zmM3z6058uRary+TxXXHEF4XCY3/zmNzz77LOEQiE+8IEPkMvlhv36FqNEve/zhS98gc9+9rPs3r2bK664gu9///vceuut3HHHHezevZt/+Id/4Etf+hL//u//XvaYX/rSl3jttdd4/PHH2b17N/fddx+zZs0a03UrFNMSqVAoKp77779fRqPRIW+zdOlS+a//+q+l71taWuQ///M/97nNBRdcIG+//fZhP+6GDRvkRz7ykdL3TU1N8otf/OKgtwfk3/7t35a+TyQSEpCPP/64lFLKX//61xKQ3d3dUsqBz2vt2rVy3bp1gx6/paVFfuxjHyt97ziOrK+vl/fdd5+UUsoHH3xQnnfeedJxnNJtstms9Pv98oknnih7zLfeeksC8qWXXpJSStnd3S2vueYaGQqFZHt7e+n3mzdv7nO/c889Vz700EN9fvZ3f/d3cu3atWWPe9VVV8kbbrih7BrOZt0KxUxB1cgoFNOQRCLB7bffzmOPPcaxY8ewLIt0Ol2KyAzGzTffzKc//Wl+8YtfcNlll/GRj3yE5cuXl35/zz338N3vfpeDBw+STqfJ5XKsWLECgI6ODo4ePcr73ve+IR+j9/GCwSCRSISOjo5hPa8dO3bwyU9+ctjHL6bbisd/+eWX2bdvH+FwuM99MpkM+/fvH/K4l1xyCZqmkUwmmT9/Plu2bKGhoaGU3lm1alXptslkkv379/Pxj3+8z3otyyIajZY9/qc//Wk+8pGP8OKLL3L55Zdz9dVXc8kll4x63QrFdEcJGYViGvL5z3+eJ598krvuuosFCxbg9/v5oz/6ozOmIT7xiU9wxRVX8Nhjj/GLX/yCO++8k7vvvpubbrqJhx9+mM9//vPcfffdrF27lnA4zFe/+lV+//vfAwy7KLd/EawQAsdxhnXf4TzGUMdPJBKsXLmyVMPSm7q6uiGPu2XLFs4//3xqa2vLFvgGg8HSvxOJBADf/va3WbNmTZ/b6bpe9vhXXnklbW1t/OxnP+PJJ5/kfe97Hxs2bOCuu+4a1boViumOEjIKxTTk2Wef5frrry8VwiYSiQGFoaZpYtv2gPvOmTOHT33qU3zqU5/illtu4dvf/jY33XQTzz77LJdccgmf+cxnSrftHQ0Ih8O0traydetW3vOe94zL81q+fDlbt27lhhtuOKv7X3TRRWzZsoX6+noikciI7jtnzhzOPffcYd22oaGBpqYm3nzzTdatWzfsx6irq2P9+vWsX7+ed77znfyf//N/uOuuu0a1boViuqOKfRWKacjChQv50Y9+xI4dO3j55Zf50z/90wFRj9bWVp555hmOHDlCZ2cnABs3buSJJ57grbfe4sUXX+TXv/41S5YsKR3zhRde4IknnuCNN97gS1/6UslTpsjtt9/O3Xffzb/8y7+wd+9eXnzxRf71X/91zJ7Xbbfdxn/8x39w2223sXv37lJB8nBZt24ds2bN4sMf/jC/+c1veOutt3jqqae4+eabOXz48JitE9yi5jvvvJN/+Zd/4Y033mDnzp3cf//9fO1rXyt7+1tvvZUf//jH7Nu3j127dvHTn/609NpP5LoVikpDCRmFYhryta99jerqai655BKuuuoqrrjiCi666KI+t/nKV77CgQMHOPfcc0vpCdu22bBhA0uWLOEDH/gAixYtKrUM/9Vf/RXXXnst1113HWvWrOHkyZN9ojMA69evZ/Pmzdx7770sXbqUP/zDP2Tv3r1j9rwuvfRSfvjDH/KTn/yEFStW8N73vpfnn39+2PcPBAI888wzzJ07l2uvvZYlS5bw8Y9/nEwmM+aRjk984hN85zvf4f777+eCCy7g3e9+Nw888ADz5s0re3vTNLnllltYvnw573rXu9B1nYcffnjC161QVBpCSiknexEKhUKhUCgUZ4OKyCgUCoVCoahYlJBRKBQKhUJRsSgho1AoFAqFomJRQkahUCgUCkXFooSMQqFQKBSKikUJGYVCoVAoFBWLEjIKhUKhUCgqFiVkFAqFQqFQVCxKyCgUCoVCoahYlJBRKBQKhUJRsSgho1AoFAqFomJRQkahUCgUCkXF8v8BfPQibn0Lp1sAAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -879,6 +963,14 @@ "plt.title(\"Tatsächliche vs. Vorhergesagte Immobilienpreise\")\n", "plt.show()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ac7dd956-5204-46e0-b6ee-8fc767ed4f30", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { @@ -897,7 +989,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.9" + "version": "3.9.6" }, "widgets": { "application/vnd.jupyter.widget-state+json": { diff --git a/docs/1intro/evaluation.rst b/docs/1intro/evaluation.rst index 231db0b..75542f2 100644 --- a/docs/1intro/evaluation.rst +++ b/docs/1intro/evaluation.rst @@ -101,7 +101,7 @@ Accuracy (Genauigkeit) Prozentsatz der korrekten Vorhersagen: .. math:: - \text{Accuracy} = \frac{\text{Anzahl der korrekten Vorhersagen}}{\text{Gesamtanzahl der Vorhersagen}} + \text{Accuracy} = \frac{\text{Anzahl der korrekten Vorhersagen}}{\text{Gesamtanzahl der Vorhersagen}} = \frac{\text{TP}+\text{TN}}{all} .. warning: Accuracy hat eine Einschränkung bei (stark) unausgewogenen Datensätzen, da diff --git a/docs/1intro/index.rst b/docs/1intro/index.rst index bc3fd0d..8c6bb43 100644 --- a/docs/1intro/index.rst +++ b/docs/1intro/index.rst @@ -46,4 +46,5 @@ Gliederung linear-regression case-study reflection + usecase-pitfalls extra diff --git a/docs/1intro/linear-regression.rst b/docs/1intro/linear-regression.rst index 489da15..d37c3ba 100644 --- a/docs/1intro/linear-regression.rst +++ b/docs/1intro/linear-regression.rst @@ -71,4 +71,4 @@ Schritte zur Implementierung eines ML-Modells 4. **Modell evaluieren und Interpretation** * Bewertung der Modellperformance auf dem Testdatensatz. - * Interpretation der wichtigsten Einflussgrößen. + * Interpretation der wichtigsten Einflussgrößen. \ No newline at end of file diff --git a/docs/2deep_ml_ops/usecase-pitfalls.rst b/docs/1intro/usecase-pitfalls.rst similarity index 77% rename from docs/2deep_ml_ops/usecase-pitfalls.rst rename to docs/1intro/usecase-pitfalls.rst index e413749..19bdde9 100644 --- a/docs/2deep_ml_ops/usecase-pitfalls.rst +++ b/docs/1intro/usecase-pitfalls.rst @@ -11,6 +11,9 @@ Use Case Fallgruben – Diskussion zur Kundenabwanderung (Customer Churn Predict Ein Telekommunikationsunternehmen möchte vorhersagen, ob ein Kunde abwandern wird oder nicht. Die Lernenden sollen erarbeiten: +Relevante Gedankengänge: +~~~~~~~~~~~~~~~~~~~~~~~~~ + 1. **Wie definiert man Kundenabwanderung?** - z.B. Vertragskunde: kündigt in den nächsten drei Monaten seinen Vertrag @@ -18,13 +21,15 @@ Ein Telekommunikationsunternehmen möchte vorhersagen, ob ein Kunde abwandern wi 2. **Welche Daten sind relevant?** -2. **Wie sollten Features gestaltet werden?** (z. B. Anrufhäufigkeit, Vertragslaufzeit, Reklamationen?) +3. **Wie sollten Features gestaltet werden?** + +Tip: Anrufhäufigkeit, Vertragslaufzeit, Reklamationen? -3. **Welche ML-Methoden eignen sich?** (Klassifikation, Feature Engineering) +4. **Welche ML-Methoden eignen sich?** (Klassifikation, Feature Engineering) -4. **Wie validiert man das Modell?** +5. **Wie validiert man das Modell?** -5. **Welche Herausforderungen können auftreten?** +6. **Welche Herausforderungen können auftreten?** **Diskussionsfragen:** diff --git a/docs/2deep_ml_ops/cnn-beispiel.ipynb b/docs/2deep_ml_ops/cnn-beispiel.ipynb new file mode 100644 index 0000000..6792a51 --- /dev/null +++ b/docs/2deep_ml_ops/cnn-beispiel.ipynb @@ -0,0 +1,1066 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "53b766a3-8e54-40b0-92ba-12fcbe9025ec", + "metadata": {}, + "source": [ + "# Praxisbeispiel - Bildklassifikation mit CNNs\n", + "\n", + "## Ziel:\n", + "Einführung in Convolutional Neural Networks mit TensorFlow/Keras anhand eines Bildklassifikationsproblems.\n" + ] + }, + { + "cell_type": "markdown", + "id": "d4dee2c8-8af5-4492-ae60-87e3181697b6", + "metadata": {}, + "source": [ + "## 1. Bibliotheken laden" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "bcb16094-dffa-4960-be59-37041ef1cd94", + "metadata": {}, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "from tensorflow.keras import layers, models\n", + "from tensorflow.keras.datasets import mnist\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "markdown", + "id": "d0f3b447-e147-4440-9d57-510303f0b327", + "metadata": {}, + "source": [ + "## 2. Daten laden" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "722a1383-267a-4526-8832-721336a47f04", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz\n", + "\u001b[1m11490434/11490434\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 0us/step \n" + ] + } + ], + "source": [ + "(x_train, y_train), (x_test, y_test) = mnist.load_data()" + ] + }, + { + "cell_type": "markdown", + "id": "468189a4-a053-418e-b880-9ae50e5b5de0", + "metadata": {}, + "source": [ + "## 3. Daten einsehen" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "ccf8205f-d371-455b-8d92-e2ebf407f635", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[[0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " ...,\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0]],\n", + "\n", + " [[0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " ...,\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0]],\n", + "\n", + " [[0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " ...,\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0]],\n", + "\n", + " ...,\n", + "\n", + " [[0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " ...,\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0]],\n", + "\n", + " [[0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " ...,\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0]],\n", + "\n", + " [[0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " ...,\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0],\n", + " [0, 0, 0, ..., 0, 0, 0]]], dtype=uint8)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x_train" + ] + }, + { + "cell_type": "markdown", + "id": "d990992b-150d-4473-af09-0a366ef7cff0", + "metadata": {}, + "source": [ + "## 4. Daten vorbereiten (Data Preprocessing)" + ] + }, + { + "cell_type": "markdown", + "id": "620c9750-9f53-4071-be66-05a251ab8a4d", + "metadata": {}, + "source": [ + "### Normalisierung\n", + "\n", + "Normalisieren von Bilderdaten ist wiederum anders als von numerischen Daten. \n", + "\n", + "Der Grund für die Normalisierung der Bilder(daten) ist die Vermeidung der Möglichkeit von explodierenden Gradienten aufgrund des großen Pixelbereichs [0, 255] und die Verbesserung der Konvergenzgeschwindigkeit. \n", + "Daher kann entweder \n", + "1. man jedes Bild normalisieren, so dass der Pixelbereich sich in [-1, 1] befindet \n", + "oder\n", + "2. man teilt jeden Wert durch den maximalen Pixelwert, d.h. 255, so dass der Bereich der Pixel im Bereich [0, 1] liegt.\n", + "\n", + "Ein weiterer Grund für die Normalisierung von Bilddaten ist wenn man Transfer Learning verwendet. \n", + "Wenn z. B. ein bereits trainiertes Modell verwendet wird, das mit Bildern trainiert wurde, deren Pixel im Bereich [0, 1] liegen, sollte man sicherstellen, dass die neuen Werte, die man dem Modell liefert, im gleichen Bereich liegen. Andernfalls werden die Ergebnisse verfälscht werden." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6bcbf900-e870-4dbb-ab9f-1de80f2377a0", + "metadata": {}, + "outputs": [], + "source": [ + "# Normalisierung\n", + "x_train, x_test = x_train / 255.0, x_test / 255.0 " + ] + }, + { + "cell_type": "markdown", + "id": "07dee44a-37e2-4dd6-a6ae-9b8bcb7c4bf3", + "metadata": {}, + "source": [ + "### Dimension erweitern\n", + "\n", + "Zuden existierenden Dimensionen der Bilddaten fügen wir eine neue Dimension hinzu. \n", + "Diese neue Dimension stellt die Anzahl der in den Daten vorhandenen Kanäle dar.\n", + "\n", + "Bei Farbbildern wären dies 3 Kanäle, die den roten, grünen und blauen Kanal darstellen. \n", + "In diesem Fall handelt es sich um Schwarz-Weiß-Bilder, so dass nur 1 Kanal vorhanden ist." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "54f9b079-3d31-4b6e-bcda-54f9b525c6f0", + "metadata": {}, + "outputs": [], + "source": [ + "# Dimension erweitern\n", + "x_train = x_train[..., tf.newaxis] \n", + "x_test = x_test[..., tf.newaxis]" + ] + }, + { + "cell_type": "markdown", + "id": "614c8498-fdb3-41ca-807c-79c395860466", + "metadata": {}, + "source": [ + "## 5. Modell definieren" + ] + }, + { + "cell_type": "markdown", + "id": "d0c0b7e5-dd65-45a3-a53d-843b89266edb", + "metadata": {}, + "source": [ + "CNN Layers:\n", + "- Conv2D:\n", + "\n", + "\n", + " Die am häufigsten verwendete Art der Faltung ist die 2D-Faltungsschicht und wird üblicherweise als conv2D abgekürzt. Ein Filter oder ein Kernel in einer conv2D-Schicht „gleitet“ über die 2D-Eingangsdaten und führt eine elementweise Multiplikation durch. Das Ergebnis ist die Summierung der Ergebnisse zu einem einzigen Ausgabepixel.\n", + "\n", + " Parameter bei der Erstellung einer Conv2D Schicht:\n", + "\n", + " 1. 32: Anzahl von Filtern in dieser Convolution-Schicht. Hierfür wird immer empfohlen, Potenzen von 2 als Werte zu verwenden.\n", + " 2. (3, 3): bestimmt die Dimensionen des Kernels. Übliche Abmessungen sind 1×1, 3×3, 5×5 oder 7×7, entsprechend als (1, 1), (3, 3), (5, 5) oder (7, 7)-Tupel übergeben.\n", + " Es muss hier eine ganze Zahl oder ein Tupel/Liste von 2 ganzen Zahlen, die die Höhe und Breite des 2D-Faltungsfensters angeben. Zudem muss dieser Parameter eine ungerade ganze Zahl sein.\n", + " 4. activation=\"..\": gibt den Namen der Aktivierungsfunktion an, die nach der Faltung/convolution verwendet werden soll. (siehe unten)\n", + " \n", + " \n", + "- MaxPooling2D (more details: https://www.geeksforgeeks.org/cnn-introduction-to-pooling-layer/?ref=header_outind) \n", + "\n", + " Die Pooling-Schicht wird in CNNs verwendet, um die räumlichen Dimensionen (Breite und Höhe) der eingegebenen Merkmalskarten zu reduzieren und gleichzeitig die wichtigsten Informationen beizubehalten. Dabei wird ein zweidimensionaler Filter über jeden Kanal einer Merkmalskarte gezogen und die Merkmale innerhalb des vom Filter abgedeckten Bereichs zusammengefasst.\n", + "\n", + " Zudem hilft es die Dimensionalität zu verringern, da Pooling-Schichten die räumliche Größe der Feature-Matrix reduzieren, somit die Anzahl der Parameter und Berechnungen im Network verringert wird. So wird das Modell schneller und effizienter. Außerdem trägt die Reduzierung der räumlichen Dimensionen dazu bei, Overfitting zu verhindern. \n", + "\n", + "- Flatten:\n", + "\n", + "\n", + " Eine flache Schicht des neuronalen Netzes wird verwendet, um die mehrdimensionale Ausgabe der vorhergehenden Schicht in ein eindimensionales Feld umzuwandeln, bevor sie zur weiteren Verarbeitung in eine vollständig verbundene Schicht (dense layers) eingespeist wird.\n", + "\n", + " Zudem reduziert es die Dimension in den Daten und vereinfacht die Modellarchitektur.\n", + "\n", + " \n", + "- Dense:\n", + " Die Dense Schicht ist eine vollständig verbundene Schicht." + ] + }, + { + "cell_type": "markdown", + "id": "5aa5e504-e04f-4907-8677-4ce8335d992a", + "metadata": {}, + "source": [ + "### (typische) Aktivierungsfunktionen \n", + "- relu:\n", + " \n", + " Die ReLU-Aktivierungsfunktion wird verwendet, um Nichtlinearität in ein neuronales Netz einzuführen. Sie trägt dazu bei, das Problem des verschwindenden Gradienten beim Training von Modellen des maschinellen Lernens zu entschärfen, und ermöglicht es neuronalen Netzen, komplexere Beziehungen in Daten zu lernen.\n", + " Wenn eine Modelleingabe positiv ist, gibt die ReLU-Funktion denselben Wert aus. Wenn eine Modelleingabe negativ ist, gibt die ReLU-Funktion den Wert Null aus.\n", + "\n", + "- softmax:\n", + "\n", + " Die Softmax-Funktion, die häufig in der letzten Schicht eines neuronalen Netzmodells für Klassifizierungsaufgaben verwendet wird, wandelt rohe Ausgabeergebnisse - auch als Logits bekannt - in Wahrscheinlichkeiten um, indem sie den Exponentialwert jeder Ausgabe nimmt und diese Werte normalisiert, indem sie durch die Summe aller Exponentialwerte dividiert wird.\n", + "\n", + " https://botpenguin.com/glossary/softmax-function" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "169980df-2df4-42af-b2b9-eb2cf15671dc", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/minye/Documents/gitHub/ainvone/cusy-gfu/gfu/schulung-ki_von_grund_auf/01-Einfuehrung-in-KI/.venv312/lib/python3.12/site-packages/keras/src/layers/convolutional/base_conv.py:107: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n", + " super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n" + ] + } + ], + "source": [ + "# Modell definieren\n", + "model = models.Sequential(\n", + " [\n", + " layers.Conv2D(32, (3, 3), activation=\"relu\", input_shape=(28, 28, 1)),\n", + " layers.MaxPooling2D((2, 2)),\n", + " layers.Conv2D(64, (3, 3), activation=\"relu\"),\n", + " layers.MaxPooling2D((2, 2)),\n", + " layers.Conv2D(64, (3, 3), activation=\"relu\"),\n", + " layers.Flatten(),\n", + " layers.Dense(64, activation=\"relu\"),\n", + " layers.Dense(10, activation=\"softmax\"),\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "0dcef3d2-9b6e-4c35-b0af-24816e1fefac", + "metadata": {}, + "source": [ + "Gute Visualisierungen solch ähnlicher Struktur können hier gefunden werden:\n", + "\n", + "https://miro.medium.com/v2/resize:fit:1400/format:webp/1*vkQ0hXDaQv57sALXAJquxA.jpeg\n", + "\n", + "https://miro.medium.com/v2/resize:fit:1400/format:webp/1*uAeANQIOQPqWZnnuH-VEyw.jpeg\n", + "\n", + "(Credits an Sumit Saha: https://medium.com/towards-data-science/a-comprehensive-guide-to-convolutional-neural-networks-the-eli5-way-3bd2b1164a53)" + ] + }, + { + "cell_type": "markdown", + "id": "cc005536-b5d2-43a4-a27a-195b9fc0a6ff", + "metadata": {}, + "source": [ + "## 6. Modell kompilieren" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "0af77c33-c547-47b5-8549-f77169a4585d", + "metadata": {}, + "outputs": [], + "source": [ + "# Modell kompilieren\n", + "model.compile(\n", + " optimizer=\"adam\",\n", + " loss=\"sparse_categorical_crossentropy\",\n", + " metrics=[\"accuracy\"],\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "322f7757-10d8-48b6-8b6c-89bdd6f83d3f", + "metadata": {}, + "source": [ + "## 7. Training" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "159676e6-736b-473b-93a0-1cc4e759a9f6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/5\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 7ms/step - accuracy: 0.5201 - loss: 1.3256 - val_accuracy: 0.9181 - val_loss: 0.2701\n", + "Epoch 2/5\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 6ms/step - accuracy: 0.9247 - loss: 0.2469 - val_accuracy: 0.9536 - val_loss: 0.1489\n", + "Epoch 3/5\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 6ms/step - accuracy: 0.9534 - loss: 0.1544 - val_accuracy: 0.9650 - val_loss: 0.1072\n", + "Epoch 4/5\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 7ms/step - accuracy: 0.9662 - loss: 0.1099 - val_accuracy: 0.9733 - val_loss: 0.0798\n", + "Epoch 5/5\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 6ms/step - accuracy: 0.9714 - loss: 0.0891 - val_accuracy: 0.9786 - val_loss: 0.0680\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "54e16a32-c8c8-46c5-89a8-d9ed94151f50", + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[array([[[[-1.22406550e-01, -1.04940124e-01, 1.05540431e+00,\n", + " 7.33939633e-02, -1.00426063e-01, -5.34634618e-03,\n", + " 7.14282170e-02, -1.25062847e+00, 6.30540550e-02,\n", + " -2.37185694e-02, -7.45562315e-02, -1.64713878e-02,\n", + " -1.12705171e+00, -1.32961959e-01, -5.87262250e-02,\n", + " 1.01219498e-01, 6.92881346e-01, 1.01272047e+00,\n", + " 1.19992472e-01, 1.23000138e-01, -3.42749394e-02,\n", + " -9.46973711e-02, 4.86068949e-02, 1.68845132e-02,\n", + " -1.17901556e-01, -4.75684665e-02, -1.04668069e+00,\n", + " -9.32694674e-02, -9.69426095e-01, 9.41504955e-01,\n", + " 1.00876343e+00, 1.07508950e-01]],\n", + " \n", + " [[ 6.25128299e-02, 1.03033878e-01, 1.63415444e+00,\n", + " -5.86562604e-02, 6.17862120e-03, 6.60237372e-02,\n", + " -8.15676749e-02, -1.47776830e+00, -1.31476879e-01,\n", + " -1.34139717e-01, 1.89567413e-02, 1.34701788e-01,\n", + " -1.18035138e+00, -3.27071249e-02, 5.31418025e-02,\n", + " -9.48082097e-03, 1.22419310e+00, 1.30111873e+00,\n", + " 9.74448249e-02, 9.95283425e-02, 1.48501322e-02,\n", + " 1.00815147e-01, 2.78599281e-02, 1.32996678e-01,\n", + " -4.16899063e-02, 9.56013501e-02, -1.41377544e+00,\n", + " 5.99457696e-02, -1.19312155e+00, 1.50736153e+00,\n", + " 1.61045134e+00, -9.09326226e-02]],\n", + " \n", + " [[-7.83583298e-02, -8.82351398e-02, 1.94420063e+00,\n", + " -6.19674921e-02, 1.21926457e-01, -1.64310466e-02,\n", + " -6.62469305e-03, -1.89023638e+00, 6.79314369e-03,\n", + " -5.72794601e-02, -1.79723538e-02, -1.20034032e-01,\n", + " -1.47505045e+00, -6.51922971e-02, -1.18146993e-01,\n", + " 1.31704301e-01, 1.69707072e+00, 1.73330379e+00,\n", + " -9.68419313e-02, -6.24438561e-02, 5.91679960e-02,\n", + " 3.02885417e-02, -1.17697634e-01, 4.59196344e-02,\n", + " 8.85993317e-02, -1.74901017e-03, -1.84632277e+00,\n", + " -1.35182694e-01, -1.48471940e+00, 1.83147061e+00,\n", + " 1.73361361e+00, -5.30065596e-02]]],\n", + " \n", + " \n", + " [[[-9.57763493e-02, 1.06843095e-02, 1.75813472e+00,\n", + " -1.29688382e-01, -7.96640888e-02, 9.84542742e-02,\n", + " 1.28048778e-01, -1.80853605e+00, -1.17492847e-01,\n", + " -3.03778518e-02, 4.00241576e-02, -8.16433206e-02,\n", + " -1.90246665e+00, -6.18674979e-02, 1.03265770e-01,\n", + " -9.87912118e-02, 1.41587746e+00, 1.59109902e+00,\n", + " -4.26441692e-02, -1.09283321e-01, 1.34045720e-01,\n", + " 6.59470335e-02, -9.85139515e-03, -5.01345322e-02,\n", + " -2.21411921e-02, 1.61392754e-03, -1.82987559e+00,\n", + " -2.80206427e-02, -1.82214963e+00, 1.68708861e+00,\n", + " 1.71702063e+00, -1.81070566e-02]],\n", + " \n", + " [[-1.21809751e-01, 3.73796299e-02, 2.49048185e+00,\n", + " -8.52861255e-02, 9.44486335e-02, 1.21906884e-01,\n", + " -1.11697055e-02, -1.82091975e+00, 5.71683533e-02,\n", + " 8.27445015e-02, -6.15169182e-02, 6.67865109e-03,\n", + " -1.97300541e+00, 1.92017406e-02, 9.39941406e-03,\n", + " -5.58954440e-02, 2.34084105e+00, 2.49039578e+00,\n", + " 1.05479367e-01, 1.11193741e-02, -5.72169982e-02,\n", + " -9.02368352e-02, -8.29203147e-03, 4.14377116e-02,\n", + " 2.34825872e-02, -6.77365437e-02, -1.78600693e+00,\n", + " 5.83842322e-02, -1.64335132e+00, 2.46693969e+00,\n", + " 2.24549413e+00, -7.59055838e-02]],\n", + " \n", + " [[-2.31350586e-02, 4.71984670e-02, 1.97533929e+00,\n", + " 6.71978071e-02, -7.17302039e-02, -2.24373341e-02,\n", + " 5.07648801e-03, -2.12082839e+00, 8.82488862e-02,\n", + " -7.06230700e-02, -1.48546234e-01, 1.33056059e-01,\n", + " -2.07195067e+00, -1.08200125e-01, -3.93704139e-02,\n", + " -5.73396087e-02, 2.17356730e+00, 2.17443180e+00,\n", + " 5.66516481e-02, 4.58226390e-02, -5.51303923e-02,\n", + " 9.86828879e-02, -1.33762971e-01, -9.46188718e-02,\n", + " -3.34561355e-02, -1.92110725e-02, -1.94994235e+00,\n", + " -2.60656327e-02, -2.00395918e+00, 2.10578084e+00,\n", + " 1.85894048e+00, 3.11964843e-02]]],\n", + " \n", + " \n", + " [[[ 6.48115575e-02, 4.62496839e-02, 1.31863916e+00,\n", + " 6.87884986e-02, 2.86218897e-02, 5.42872176e-02,\n", + " -1.51097635e-02, -1.52965164e+00, 2.06916425e-02,\n", + " -1.74260139e-02, -1.67195164e-02, -3.93627696e-02,\n", + " -1.71877074e+00, 3.72256860e-02, 1.02261432e-01,\n", + " 5.50065525e-02, 1.47071218e+00, 1.35496914e+00,\n", + " 1.12139270e-01, 7.77536109e-02, -1.66937225e-02,\n", + " -2.74120513e-02, -3.52033749e-02, 4.27518710e-02,\n", + " 2.96470895e-02, 7.74797425e-02, -1.63591981e+00,\n", + " -6.24467283e-02, -1.49033296e+00, 1.51481032e+00,\n", + " 1.43474472e+00, 6.48858845e-02]],\n", + " \n", + " [[ 1.25385031e-01, 1.93701517e-02, 1.35700619e+00,\n", + " -3.29198055e-02, -1.35597497e-01, 9.18423459e-02,\n", + " -1.29965737e-01, -1.41640520e+00, -9.96136293e-02,\n", + " -3.75120044e-02, -3.45025845e-02, -1.12801664e-01,\n", + " -1.65582597e+00, 9.59943309e-02, -3.54000740e-02,\n", + " -4.21205461e-02, 1.63431835e+00, 1.57297838e+00,\n", + " 4.73094434e-02, -1.13333479e-01, 1.17508225e-01,\n", + " -1.23712495e-01, 8.00190940e-02, -8.36999044e-02,\n", + " 1.23406455e-01, 1.18419128e-02, -1.26421440e+00,\n", + " -5.20271473e-02, -1.36224902e+00, 1.35520363e+00,\n", + " 1.39786804e+00, 1.11324854e-01]],\n", + " \n", + " [[ 1.20124757e-01, 5.89667214e-03, 9.07224596e-01,\n", + " -9.21126157e-02, -1.34972453e-01, 1.06169097e-01,\n", + " -5.43355346e-02, -7.48154938e-01, -8.53973702e-02,\n", + " 3.73354144e-02, 1.08885683e-01, -1.39362082e-01,\n", + " -1.32957542e+00, -1.14915244e-01, -7.53873289e-02,\n", + " 1.49036013e-02, 1.12235367e+00, 1.08785880e+00,\n", + " -4.18222100e-02, 4.17723209e-02, -3.86383181e-05,\n", + " 9.45675746e-03, 3.36362980e-02, -4.63068299e-02,\n", + " -2.00620797e-02, -1.23409078e-01, -8.52762043e-01,\n", + " 4.43898439e-02, -1.08875692e+00, 1.16234934e+00,\n", + " 7.55028188e-01, 1.05900802e-01]]]], dtype=float32),\n", + " array([-0.00466503, -0.00600477, 0.00457475, -0.00599602, -0.00599961,\n", + " -0.00517343, -0.00599918, 0.05253192, -0.00600454, -0.00600148,\n", + " -0.00359347, -0.00220906, 0.05363466, -0.00078721, -0.00600311,\n", + " -0.00303029, 0.00311596, 0.00346661, -0.00630751, -0.00222704,\n", + " -0.00600247, -0.00614355, -0.0059998 , -0.00600276, -0.00600332,\n", + " -0.00600424, 0.04722345, -0.00599897, 0.0475119 , 0.00465371,\n", + " 0.00539291, -0.0056139 ], dtype=float32),\n", + " array([[[[-4.09513079e-02, 6.53369576e-02, 5.56352772e-02, ...,\n", + " 1.78319160e-02, 3.39432918e-02, -3.58552150e-02],\n", + " [ 2.47284397e-02, 3.53016071e-02, 6.65583462e-02, ...,\n", + " -2.61687115e-02, 6.35163262e-02, -5.15351743e-02],\n", + " [-2.22452357e-01, -4.54687215e-02, -4.80623581e-02, ...,\n", + " -4.98063723e-03, -6.70940503e-02, -5.90361245e-02],\n", + " ...,\n", + " [-2.66597062e-01, -3.98694575e-02, -1.12784944e-01, ...,\n", + " -8.07477832e-02, 7.76869878e-02, -2.90160239e-01],\n", + " [-2.23186836e-01, -6.77605346e-02, -1.66173652e-02, ...,\n", + " -3.00479103e-02, 5.50204478e-02, -1.05014518e-01],\n", + " [-7.85470307e-02, -3.20744477e-02, 3.95169184e-02, ...,\n", + " -6.43990338e-02, -8.35013518e-04, 6.09391630e-02]],\n", + " \n", + " [[ 4.09062728e-02, -7.40245059e-02, 2.20822245e-02, ...,\n", + " -2.43453868e-03, 7.34328479e-02, -6.81948885e-02],\n", + " [-1.07655879e-02, 5.58332168e-02, -1.34183485e-02, ...,\n", + " -1.93944741e-02, -1.23288482e-02, -3.74378860e-02],\n", + " [ 2.96264142e-01, -9.46638919e-03, -5.45962274e-01, ...,\n", + " -6.95578456e-02, -9.17147920e-02, -8.07937980e-02],\n", + " ...,\n", + " [ 4.38567430e-01, -5.05007021e-02, -5.19621611e-01, ...,\n", + " -7.21395388e-02, 2.83865985e-02, -1.77612677e-01],\n", + " [ 2.72482246e-01, 4.66637313e-02, -4.40830916e-01, ...,\n", + " -2.00214460e-02, -6.14985153e-02, -1.48249999e-01],\n", + " [ 6.05688915e-02, 3.36087979e-02, -7.32045323e-02, ...,\n", + " 5.90418689e-02, -2.53055207e-02, 3.52625586e-02]],\n", + " \n", + " [[ 1.00557189e-02, -4.79275286e-02, 9.53041762e-03, ...,\n", + " -4.77158539e-02, -7.76287913e-02, -8.01696628e-03],\n", + " [ 6.95207641e-02, 3.19592208e-02, -5.21815345e-02, ...,\n", + " -2.97903102e-02, 6.85276613e-02, -5.29903881e-02],\n", + " [ 1.71262100e-01, 1.36805242e-02, -9.78173018e-01, ...,\n", + " 4.49864306e-02, -1.20615307e-02, -2.84896433e-01],\n", + " ...,\n", + " [ 1.71821341e-01, 2.18086075e-02, -9.61809039e-01, ...,\n", + " 5.50260358e-02, -9.68773663e-03, -3.86274487e-01],\n", + " [ 1.60585135e-01, 4.09759246e-02, -7.95136929e-01, ...,\n", + " 2.87758000e-02, 1.87965482e-02, -3.41403008e-01],\n", + " [ 1.96204372e-02, 3.06844991e-02, -2.38991342e-02, ...,\n", + " -5.21317907e-02, 2.88740452e-02, 5.26520275e-02]]],\n", + " \n", + " \n", + " [[[ 5.87632172e-02, -8.22747350e-02, -3.34531330e-02, ...,\n", + " -6.42238185e-02, -1.10533163e-02, -6.01161979e-02],\n", + " [ 4.42620032e-02, 7.78351128e-02, 6.86004013e-02, ...,\n", + " -4.92207194e-03, 4.17802390e-03, -5.29544502e-02],\n", + " [ 1.80385873e-01, -6.30437732e-02, -1.26061618e-01, ...,\n", + " 6.30052313e-02, 4.30273972e-02, -3.90959948e-01],\n", + " ...,\n", + " [ 2.31140316e-01, -1.80431828e-02, -2.00009853e-01, ...,\n", + " -4.68120119e-03, -4.29315753e-02, -4.45163518e-01],\n", + " [ 2.65494496e-01, 4.85510565e-02, -1.15276620e-01, ...,\n", + " 1.69637648e-03, 3.52750495e-02, -3.95026982e-01],\n", + " [ 8.41122717e-02, -4.40930463e-02, -1.07017783e-02, ...,\n", + " -3.00858682e-03, -3.21241841e-02, 2.35249344e-02]],\n", + " \n", + " [[ 4.23739143e-02, -3.92357372e-02, -1.63357295e-02, ...,\n", + " 9.08324029e-03, 7.45074078e-02, -2.95386836e-02],\n", + " [ 8.75813812e-02, -7.73116052e-02, -2.93690488e-02, ...,\n", + " 2.73313113e-02, -3.16706188e-02, 4.83886674e-02],\n", + " [ 5.65019667e-01, -3.46408747e-02, -6.41785145e-01, ...,\n", + " -4.36245799e-02, -1.66090264e-03, -4.39111143e-01],\n", + " ...,\n", + " [ 5.93827307e-01, -3.87401599e-03, -6.45603538e-01, ...,\n", + " -2.82105263e-02, 3.12332362e-02, -4.72609550e-01],\n", + " [ 4.74565119e-01, -7.93136731e-02, -6.07311606e-01, ...,\n", + " 2.62665581e-02, 6.36101142e-02, -5.15639246e-01],\n", + " [ 6.92659616e-02, -2.31724046e-02, 4.59018424e-02, ...,\n", + " -5.38128801e-02, -3.86629738e-02, 2.16949563e-02]],\n", + " \n", + " [[-5.09778857e-02, -2.56684553e-02, -4.65940572e-02, ...,\n", + " -2.24864893e-02, 5.98053634e-02, -3.33038643e-02],\n", + " [-4.89353910e-02, -5.94337359e-02, -3.05621680e-02, ...,\n", + " -1.74723398e-02, -1.26119517e-02, 7.22276121e-02],\n", + " [ 4.27562505e-01, -7.00907260e-02, -1.51265748e-02, ...,\n", + " -3.63055877e-02, 3.77160870e-02, -3.35449606e-01],\n", + " ...,\n", + " [ 5.34057260e-01, 5.37596922e-03, 5.90588860e-02, ...,\n", + " -2.23858450e-02, -4.39759269e-02, -4.74299133e-01],\n", + " [ 4.68883842e-01, 4.67453059e-03, -1.07363835e-02, ...,\n", + " -5.03335521e-02, 6.17169142e-02, -3.97303224e-01],\n", + " [-6.89325705e-02, 2.09207926e-02, 6.66928813e-02, ...,\n", + " 1.09824250e-02, 6.55553713e-02, 7.71144405e-02]]],\n", + " \n", + " \n", + " [[[-1.97533462e-02, -5.83553733e-03, -6.98258951e-02, ...,\n", + " -2.01653466e-02, -1.41384220e-02, 3.08275688e-02],\n", + " [ 1.42864808e-02, 6.97184727e-02, 7.59560391e-02, ...,\n", + " -5.29891141e-02, -4.83914688e-02, 4.91325147e-02],\n", + " [-5.54303825e-03, -1.26073090e-02, -4.71151650e-01, ...,\n", + " -2.78666001e-02, -8.68165642e-02, -1.18691437e-01],\n", + " ...,\n", + " [-5.74064963e-02, -5.98900020e-03, -6.38170838e-01, ...,\n", + " -8.69315991e-04, -3.79942767e-02, -2.97842801e-01],\n", + " [-2.29144637e-02, 5.93629219e-02, -4.72507209e-01, ...,\n", + " 4.12018448e-02, 2.71730740e-02, -3.18835378e-01],\n", + " [ 8.15796331e-02, 2.51329765e-02, 5.64804859e-03, ...,\n", + " 2.70471610e-02, -5.53913526e-02, -5.22312755e-03]],\n", + " \n", + " [[-2.81268992e-02, -1.71664648e-03, -2.59977784e-02, ...,\n", + " 3.32215242e-02, -8.31729695e-02, -8.05165321e-02],\n", + " [ 7.21393004e-02, 3.44517343e-02, 8.06643534e-03, ...,\n", + " 1.90443415e-02, 1.78395640e-02, -2.70510036e-02],\n", + " [ 2.44110003e-01, -2.84078578e-03, -4.59649205e-01, ...,\n", + " -3.39153633e-02, 2.68028434e-02, 3.49525571e-01],\n", + " ...,\n", + " [ 3.69173735e-01, 2.78887711e-02, -5.01491487e-01, ...,\n", + " 6.77736988e-03, -6.90143555e-02, 2.68187821e-01],\n", + " [ 3.17912370e-01, 2.90262271e-02, -4.88924950e-01, ...,\n", + " -6.36181459e-02, -5.71498461e-02, 1.36232108e-01],\n", + " [ 4.04094532e-02, -2.83132493e-02, -4.72990127e-04, ...,\n", + " 5.18598892e-02, 9.73773468e-03, -5.75573072e-02]],\n", + " \n", + " [[-8.04608688e-02, 3.08847427e-02, -4.04163823e-02, ...,\n", + " 6.85387850e-02, -7.79923797e-02, -7.31467605e-02],\n", + " [ 8.47627148e-02, 4.50354367e-02, -7.16433302e-03, ...,\n", + " 6.19982854e-02, -6.19668588e-02, 2.09368914e-02],\n", + " [ 4.49168593e-01, -2.93983165e-02, 2.44198084e-01, ...,\n", + " -7.84730166e-03, -2.02843752e-02, 3.40622038e-01],\n", + " ...,\n", + " [ 5.60770750e-01, 5.69978617e-02, 2.70948112e-01, ...,\n", + " -5.29176369e-02, 5.11268228e-02, 2.42241070e-01],\n", + " [ 4.79552686e-01, -6.09705336e-02, 2.10609511e-01, ...,\n", + " 7.63696060e-02, -1.84087232e-02, 1.77408844e-01],\n", + " [-3.74305770e-02, 4.71676774e-02, -5.75387478e-02, ...,\n", + " 3.90911661e-02, -2.25753058e-02, 3.31210904e-02]]]],\n", + " dtype=float32),\n", + " array([ 5.0731726e-02, -6.5370905e-03, 7.3645994e-02, -3.1689333e-03,\n", + " -3.0370019e-02, 5.1700506e-02, -4.8823613e-03, -1.6101491e-02,\n", + " -7.9340730e-03, 4.9064219e-02, -7.0074289e-03, -6.0041053e-03,\n", + " -6.0031614e-03, 4.9787950e-02, -2.4142025e-02, -2.1615267e-02,\n", + " -6.0047242e-03, -7.7282340e-05, -1.0096843e-02, -6.0587190e-03,\n", + " 8.4531337e-02, 2.0987438e-02, -3.1731434e-02, -4.8332978e-03,\n", + " 3.9843556e-02, -3.6939710e-02, -5.9687099e-03, -6.0045891e-03,\n", + " -6.0048811e-03, -7.1099498e-03, -6.1658891e-03, -1.1944458e-02,\n", + " -2.7621938e-02, -2.5463229e-02, -6.3406507e-04, -2.6880821e-02,\n", + " -7.4103735e-03, -4.9300166e-03, -1.1226194e-02, -3.5644656e-03,\n", + " -1.4320927e-03, 4.3262521e-04, -1.4444536e-02, -1.0344965e-02,\n", + " 6.4538099e-02, -8.7140584e-03, -1.5734933e-02, 8.1914388e-02,\n", + " -4.0456492e-02, 6.5072395e-02, -1.2234733e-02, 2.9029636e-02,\n", + " -6.0050460e-03, -3.3119125e-03, -6.0045579e-03, -2.1562304e-02,\n", + " -3.5139427e-03, -5.8292379e-03, -6.0048150e-03, -1.1523294e-03,\n", + " -1.0892602e-02, -6.0025603e-03, -3.3935241e-03, 2.6472285e-02],\n", + " dtype=float32),\n", + " array([[[[-6.77588284e-02, 2.20274855e-03, 2.99741030e-02, ...,\n", + " -1.02044838e-02, -1.58815347e-02, 2.59737298e-02],\n", + " [-4.84939553e-02, -2.06980687e-02, -5.60233518e-02, ...,\n", + " -6.21065237e-02, -8.72860942e-03, 3.03782523e-02],\n", + " [ 6.16623163e-02, 3.21431011e-02, 3.25699784e-02, ...,\n", + " 1.17047809e-01, -2.47664955e-02, -4.19078358e-02],\n", + " ...,\n", + " [ 4.48789671e-02, 2.42642276e-02, -1.59621984e-03, ...,\n", + " -1.86351314e-02, 6.38029352e-02, -3.06290830e-03],\n", + " [-2.87983976e-02, -7.94108957e-03, 6.51264787e-02, ...,\n", + " -2.74584629e-02, -3.73801589e-02, 1.90621875e-02],\n", + " [-2.16469709e-02, 4.30435315e-02, 5.76777421e-02, ...,\n", + " -3.32496017e-02, -8.54106173e-02, -3.01648788e-02]],\n", + " \n", + " [[-4.78787906e-02, 3.23773287e-02, -6.11309370e-04, ...,\n", + " 1.26614094e-01, 2.36432087e-02, -5.90588190e-02],\n", + " [ 3.59422364e-03, 5.86653166e-02, 3.12487260e-02, ...,\n", + " 6.69940934e-02, -5.80463260e-02, -6.56544045e-02],\n", + " [ 1.18795559e-02, -9.21184495e-02, -5.56785092e-02, ...,\n", + " -2.49458954e-01, 2.80045364e-02, 1.99826416e-02],\n", + " ...,\n", + " [-6.72316328e-02, -5.85822202e-02, 3.74447480e-02, ...,\n", + " -4.17119935e-02, 9.38113488e-04, -2.45996173e-02],\n", + " [-5.52432574e-02, -6.02680854e-02, -6.05881698e-02, ...,\n", + " -2.15650704e-02, 2.96953805e-02, -3.42316516e-02],\n", + " [ 6.47027269e-02, -2.91282497e-02, -6.04169331e-02, ...,\n", + " -2.05045994e-02, 5.47368824e-02, 4.88121063e-02]],\n", + " \n", + " [[-1.13176079e-02, -7.21214488e-02, -1.98519975e-02, ...,\n", + " 1.88939333e-01, -7.92412311e-02, -6.13443330e-02],\n", + " [ 6.38257861e-02, 1.56186130e-02, -5.36187924e-02, ...,\n", + " -4.67634201e-02, 6.12646043e-02, -4.85889390e-02],\n", + " [-2.96882465e-02, 1.51898526e-02, -9.12287235e-02, ...,\n", + " -1.80930674e-01, 4.60227691e-02, -4.13853191e-02],\n", + " ...,\n", + " [ 1.03720725e-02, 3.70528065e-02, 3.20532173e-03, ...,\n", + " 4.96021798e-03, -3.74522507e-02, -5.94452880e-02],\n", + " [ 5.67702465e-02, -5.15246540e-02, -3.40847229e-03, ...,\n", + " -1.33436536e-02, -2.18520053e-02, 8.93314183e-03],\n", + " [ 2.32600607e-02, -3.02573126e-02, -2.01285742e-02, ...,\n", + " -2.17192560e-01, -3.92585881e-02, -1.96688734e-02]]],\n", + " \n", + " \n", + " [[[-1.31473243e-02, 4.30563604e-03, -8.74016955e-02, ...,\n", + " 2.50245519e-02, 4.73613776e-02, -7.22233206e-02],\n", + " [-3.19643766e-02, -4.31475230e-02, 5.31325787e-02, ...,\n", + " 4.96112229e-03, -6.35493025e-02, -1.41577478e-02],\n", + " [-4.46854644e-02, -6.16688319e-02, -1.08877558e-03, ...,\n", + " -1.07957714e-03, 8.01343005e-03, -2.04664450e-02],\n", + " ...,\n", + " [ 5.05997390e-02, 3.32729816e-02, 1.33315176e-02, ...,\n", + " -2.05177888e-02, -4.95410338e-02, -2.29872596e-02],\n", + " [-4.66450453e-02, 5.74672632e-02, 3.70416567e-02, ...,\n", + " 4.40301299e-02, 5.70785031e-02, -1.92973036e-02],\n", + " [ 9.16888565e-03, 4.06818874e-02, -7.77892247e-02, ...,\n", + " 2.50012696e-01, 1.06723420e-02, 3.93631123e-02]],\n", + " \n", + " [[-1.85088329e-02, -4.42485772e-02, 7.18603516e-03, ...,\n", + " -1.07027076e-01, -7.43248090e-02, 3.62998582e-02],\n", + " [ 5.17364554e-02, -1.96498986e-02, -6.19538538e-02, ...,\n", + " 4.23023626e-02, 1.13501688e-02, -6.03644103e-02],\n", + " [ 5.76595366e-02, -7.50290230e-02, -4.94544692e-02, ...,\n", + " -2.61475384e-01, -5.48628755e-02, -2.71031186e-02],\n", + " ...,\n", + " [-3.99222374e-02, 5.60345873e-02, -3.66110802e-02, ...,\n", + " -5.38463555e-02, -4.46803030e-03, 5.09350859e-02],\n", + " [ 5.64508401e-02, 5.68455681e-02, 4.77742329e-02, ...,\n", + " -4.49834764e-02, 1.34397869e-03, 8.74625053e-03],\n", + " [ 4.74369787e-02, 3.86862457e-02, 8.30656476e-03, ...,\n", + " 1.11709051e-01, 5.02744596e-03, 1.54393408e-02]],\n", + " \n", + " [[-5.12286834e-02, -4.57517877e-02, 3.29876170e-02, ...,\n", + " 9.96750444e-02, -5.28524891e-02, 4.56503369e-02],\n", + " [ 3.89702581e-02, -1.06641045e-02, -3.81669998e-02, ...,\n", + " -1.46490242e-02, 2.37572175e-02, -3.21111120e-02],\n", + " [-4.46778275e-02, -4.90375273e-02, -8.67610574e-02, ...,\n", + " 4.07065749e-01, -7.27922842e-02, 4.27938364e-02],\n", + " ...,\n", + " [-4.30758521e-02, -5.89693263e-02, -3.76514606e-02, ...,\n", + " -9.67393722e-03, 5.87980039e-02, -2.92121363e-03],\n", + " [ 5.90541121e-03, -5.55726923e-02, -2.65220068e-02, ...,\n", + " -3.33338417e-02, 4.62677851e-02, -1.28199011e-02],\n", + " [-5.91470394e-03, -1.81701519e-02, -9.07925963e-02, ...,\n", + " 7.21939579e-02, -7.48036662e-03, -5.05576283e-02]]],\n", + " \n", + " \n", + " [[[-3.85871977e-02, -8.68022814e-02, -2.40917522e-02, ...,\n", + " -1.56738572e-02, 3.65018286e-02, -1.85995977e-02],\n", + " [-3.78075913e-02, -2.95530465e-02, 2.18991935e-02, ...,\n", + " 2.44227685e-02, 3.81797776e-02, -3.28961276e-02],\n", + " [ 3.09773982e-02, -1.24242818e-02, -3.42548452e-02, ...,\n", + " 9.25620645e-03, -2.92590801e-02, -4.68145870e-02],\n", + " ...,\n", + " [-6.85492381e-02, -1.40666896e-02, 4.94359210e-02, ...,\n", + " -3.93450893e-02, -1.93639342e-02, 6.83873445e-02],\n", + " [ 5.05576318e-04, -6.19990285e-03, -2.55681425e-02, ...,\n", + " -5.44838831e-02, 2.39748675e-02, -6.64056391e-02],\n", + " [-3.30624022e-02, -6.65481910e-02, 2.51229946e-02, ...,\n", + " 4.94755059e-02, -4.49179634e-02, -7.36099184e-02]],\n", + " \n", + " [[ 4.23321202e-02, 2.97866408e-02, 2.33436786e-02, ...,\n", + " 8.53242278e-02, -7.07813026e-03, 4.14080173e-02],\n", + " [-5.49987294e-02, -2.92220265e-02, -6.94556832e-02, ...,\n", + " 6.09453730e-02, -2.83748563e-02, 5.60829900e-02],\n", + " [ 2.07184963e-02, 1.98485777e-02, -3.56923486e-03, ...,\n", + " 1.52495205e-01, -8.83794390e-04, -1.27912201e-02],\n", + " ...,\n", + " [ 2.53824182e-02, -3.50722931e-02, -3.73297557e-02, ...,\n", + " 2.72302888e-02, -6.72836206e-04, -2.32999809e-02],\n", + " [-1.77186504e-02, -7.24398568e-02, 5.56261220e-04, ...,\n", + " 7.64290616e-02, -7.81513471e-03, 6.85167536e-02],\n", + " [ 3.62182409e-03, -6.11639991e-02, 1.95676256e-02, ...,\n", + " 2.53234580e-02, -1.75850902e-04, 2.60092318e-02]],\n", + " \n", + " [[-6.77168965e-02, -9.71147865e-02, -1.65844485e-02, ...,\n", + " -2.36974046e-01, 2.54155006e-02, -3.81687433e-02],\n", + " [ 2.41206270e-02, -6.52763098e-02, 2.85268873e-02, ...,\n", + " -2.40547080e-02, -3.35692279e-02, 1.61384791e-02],\n", + " [ 6.41730577e-02, 2.43203659e-02, -2.69184029e-03, ...,\n", + " 4.24523443e-01, -6.81265369e-02, -5.46571575e-02],\n", + " ...,\n", + " [-4.00961339e-02, 3.94167118e-02, 1.06965154e-02, ...,\n", + " -5.94192185e-02, 4.29948010e-02, 7.72575615e-03],\n", + " [ 3.30222361e-02, -6.37925789e-02, -2.47988850e-02, ...,\n", + " -4.97528352e-02, 3.69183533e-03, 1.24212746e-02],\n", + " [ 5.26041165e-02, 6.50643883e-03, -7.16269463e-02, ...,\n", + " 2.10398167e-01, -2.73971539e-02, 4.08791229e-02]]]],\n", + " dtype=float32),\n", + " array([-0.00597647, -0.00592799, -0.00870279, -0.00598878, -0.01648423,\n", + " -0.01458442, -0.01836243, -0.0636421 , 0.02648541, 0.07465245,\n", + " -0.00620836, 0.02147621, 0.00727089, -0.00635401, -0.01991015,\n", + " -0.01080035, -0.00645889, 0.00049094, -0.01246897, -0.02521407,\n", + " -0.00600487, 0.08201219, -0.0243096 , -0.01732669, -0.01840139,\n", + " -0.00134726, -0.03898312, -0.01615051, -0.00679975, -0.00140235,\n", + " -0.01687402, -0.01145719, -0.06657502, -0.00450062, -0.0568934 ,\n", + " -0.0258188 , -0.00581816, -0.02063407, -0.00600462, -0.01115616,\n", + " -0.00582715, 0.0226899 , 0.01437778, 0.01981827, -0.032563 ,\n", + " -0.00743619, -0.02184827, -0.05019416, -0.00805772, -0.03283894,\n", + " -0.01049039, -0.00781332, -0.0382159 , 0.06350283, -0.0065008 ,\n", + " -0.00736187, -0.00345836, -0.00449441, -0.00792683, -0.01904942,\n", + " 0.04208557, -0.03795724, -0.00628128, -0.00974068], dtype=float32),\n", + " array([[-0.09185279, -0.08864406, 0.07367334, ..., 0.03200333,\n", + " 0.07789004, 0.04746935],\n", + " [ 0.09739629, 0.03832531, -0.02122908, ..., 0.0439161 ,\n", + " -0.02092455, 0.05045022],\n", + " [-0.0880066 , 0.09418431, -0.08355792, ..., -0.03458135,\n", + " -0.02729838, -0.05673207],\n", + " ...,\n", + " [ 0.13907701, -0.0463694 , -0.01554128, ..., 0.21222137,\n", + " -0.13243416, -0.08443874],\n", + " [ 0.02594028, -0.08970061, 0.05106094, ..., 0.03016211,\n", + " -0.06699792, -0.09419772],\n", + " [-0.02880331, 0.00064806, -0.03517756, ..., -0.04236604,\n", + " 0.09366744, 0.02290797]], dtype=float32),\n", + " array([ 0.06808085, -0.00975904, -0.00285351, 0.05911933, 0.00888091,\n", + " -0.0083362 , -0.08058061, -0.06973764, 0.07285105, 0.12510723,\n", + " -0.02541726, -0.00497621, 0.09497405, 0.01185297, 0.02194878,\n", + " -0.02191131, 0.01238914, -0.03589321, 0.04940122, 0.10837622,\n", + " -0.03305043, 0.07701242, -0.08698685, 0.12424077, -0.01409515,\n", + " 0.01491846, -0.01576733, -0.03922584, -0.00502902, -0.03992312,\n", + " -0.014053 , -0.00102963, 0.00205929, -0.0182695 , 0.00493339,\n", + " -0.00217036, -0.02756455, -0.04314969, -0.01223689, -0.02844172,\n", + " -0.00869887, -0.07419655, -0.00817417, 0.00466795, -0.03130533,\n", + " -0.04176845, -0.02984148, -0.00221793, -0.03603784, -0.0165845 ,\n", + " -0.01594525, 0.01229428, -0.00780975, -0.01449327, 0.01651074,\n", + " -0.03242023, 0.00524851, 0.11353564, -0.01411175, -0.00610878,\n", + " -0.11137784, 0.05338038, 0.06014742, -0.02137435], dtype=float32),\n", + " array([[ 0.18559797, -0.27311072, 0.01527372, 0.1667958 , -0.6008345 ,\n", + " 0.3159435 , -0.5216771 , 0.2750416 , 0.01216201, 0.22444129],\n", + " [-0.17745526, 0.11224291, -0.20360905, -0.09113023, -0.06051031,\n", + " 0.10407807, 0.1030496 , -0.08924961, 0.20556907, 0.02068579],\n", + " [-0.27077624, -0.15237704, 0.15392381, -0.019488 , -0.21341197,\n", + " 0.04876609, 0.26545262, 0.01613875, 0.13257483, 0.0043325 ],\n", + " [ 0.00524768, -0.08751301, 0.15689705, 0.27446026, 0.03383272,\n", + " -0.06179533, -0.1814533 , -0.51472723, 0.2606688 , -0.35078168],\n", + " [-0.29350206, -0.11415462, 0.4038854 , 0.04978709, 0.16851981,\n", + " 0.24796341, -0.2639416 , -0.10832281, -0.33657458, 0.37864706],\n", + " [-0.22046587, 0.15484355, -0.14180325, 0.0856993 , -0.21411614,\n", + " 0.12637348, -0.2716083 , 0.11466607, 0.24692845, 0.20042904],\n", + " [ 0.15338853, 0.35099944, 0.15256815, -0.36093542, -0.24002992,\n", + " 0.3184705 , -0.2406162 , 0.4650115 , -0.3069936 , 0.02111373],\n", + " [ 0.05054694, -0.23012488, 0.12789647, 0.08831997, 0.08784705,\n", + " 0.05929139, -0.12433138, 0.46622413, -0.35942605, -0.54049563],\n", + " [-0.18717451, -0.72133374, -0.0115177 , -0.35869747, 0.22846606,\n", + " 0.15737483, 0.15764931, -0.38010204, 0.22650003, 0.06280418],\n", + " [ 0.26188982, -0.39597288, -0.5757446 , 0.02510367, 0.2879426 ,\n", + " -0.29269058, 0.1291492 , -0.5937857 , 0.489574 , 0.3951149 ],\n", + " [ 0.02824754, -0.18750103, -0.24379265, -0.15277593, -0.2616862 ,\n", + " -0.11316513, -0.18987413, -0.10279651, 0.00307356, 0.20360096],\n", + " [ 0.0889672 , -0.27085298, -0.07818568, -0.04857931, 0.26699746,\n", + " 0.27253887, 0.13635758, 0.20185456, -0.21887997, -0.04505806],\n", + " [ 0.24088947, -0.15809816, -0.30324033, 0.32222757, -0.4815252 ,\n", + " -0.15549862, -0.12925379, -0.2341969 , 0.17756256, 0.11413763],\n", + " [-0.2911384 , -0.14499116, 0.0049213 , 0.41103235, -0.2739251 ,\n", + " 0.20617214, -0.56356406, 0.29324108, 0.1796953 , -0.15911548],\n", + " [-0.44207096, 0.5638581 , -0.09978738, 0.13820046, -0.09684686,\n", + " 0.07571828, 0.15660231, -0.4522957 , 0.02295363, -0.04906129],\n", + " [ 0.06692921, -0.1146377 , -0.20020963, 0.07373878, 0.175486 ,\n", + " -0.22167481, -0.25405025, -0.24551588, 0.03334694, 0.00379215],\n", + " [-0.15106998, -0.27643594, 0.2916736 , 0.409728 , -0.32726678,\n", + " -0.37141395, -0.24061966, -0.2830291 , 0.42238238, -0.03705543],\n", + " [-0.06238353, 0.22148384, -0.11515956, -0.2466735 , 0.22509186,\n", + " 0.01145077, 0.01299847, -0.20515227, -0.12300055, 0.06140441],\n", + " [ 0.40663242, -0.5287505 , 0.08713097, 0.1811561 , 0.3119356 ,\n", + " 0.11860475, 0.3004479 , -0.24464774, -0.2475557 , 0.23569347],\n", + " [ 0.18816838, -0.27300677, -0.40234625, -0.32845914, -0.33594438,\n", + " 0.40800986, 0.36867064, -0.12859762, 0.196742 , 0.44018117],\n", + " [-0.3253747 , 0.07417136, -0.3145336 , -0.18829519, 0.12210796,\n", + " 0.07297806, 0.0066867 , -0.10749532, -0.16823493, -0.02764349],\n", + " [ 0.12949178, -0.47820517, 0.27980348, -0.11410157, -0.2167273 ,\n", + " 0.2086147 , 0.18950069, -0.46491635, -0.07266409, -0.0612276 ],\n", + " [ 0.23653965, 0.15099631, 0.09443749, -0.52582467, 0.06388835,\n", + " -0.6205905 , 0.02477816, 0.63442653, -0.03840058, -0.20507059],\n", + " [ 0.15331094, -0.5856383 , 0.03286755, -0.34037223, 0.13611066,\n", + " -0.5115831 , -0.04399058, -0.09334271, 0.5094095 , -0.09425292],\n", + " [ 0.2540139 , 0.20344292, 0.21460418, -0.21874039, 0.06295377,\n", + " 0.20402728, 0.08109889, 0.2739563 , -0.04060334, 0.18409622],\n", + " [-0.1093787 , -0.02947157, 0.09986844, 0.29385972, -0.0125134 ,\n", + " 0.08148661, -0.78703356, 0.16302125, -0.08231801, 0.13777393],\n", + " [ 0.23390974, -0.03894943, 0.00211752, -0.11775871, 0.07282112,\n", + " 0.139505 , -0.19621724, -0.09976989, 0.1795159 , 0.07007407],\n", + " [ 0.35990015, 0.3459826 , -0.49273464, -0.2828125 , -0.52876997,\n", + " -0.08519766, -0.36835986, 0.33231884, 0.10246973, -0.00127755],\n", + " [ 0.06828795, -0.031198 , 0.04726082, -0.09958206, -0.11234741,\n", + " -0.03712786, 0.01512796, 0.05343895, 0.15364365, -0.07676879],\n", + " [-0.06499076, -0.06642399, -0.366879 , -0.30402142, 0.29198042,\n", + " 0.53114074, -0.14407964, 0.47127908, -0.15015964, -0.37670112],\n", + " [-0.02499727, -0.08661019, -0.14099768, -0.12561761, 0.2028338 ,\n", + " 0.2530595 , 0.12981778, 0.18186334, -0.15628599, -0.16664077],\n", + " [ 0.15188472, -0.05055901, -0.24041085, 0.15565348, -0.00468388,\n", + " 0.24099864, -0.0921819 , 0.14400557, -0.11632543, 0.20992793],\n", + " [-0.14860031, -0.09105953, -0.10214144, 0.3028628 , 0.26851135,\n", + " 0.06549001, -0.93654615, 0.10836818, -0.1256314 , 0.42355675],\n", + " [-0.04537524, -0.17462449, -0.12427247, 0.00481299, -0.06823428,\n", + " -0.00809711, 0.12423966, -0.11359449, -0.14621122, -0.08394695],\n", + " [ 0.30618694, -0.26674655, -0.27028254, 0.23045729, -0.72168577,\n", + " -0.30981228, 0.15687896, 0.24613713, -0.286744 , 0.29990444],\n", + " [ 0.22940825, -0.1299561 , 0.12769087, -0.25860775, 0.21869509,\n", + " 0.22318347, -0.00288847, 0.19313459, -0.00163152, -0.27683058],\n", + " [-0.19264702, -0.17462036, -0.28016275, -0.22538798, -0.03631222,\n", + " -0.13697451, -0.18460888, 0.0743093 , 0.09512224, 0.19194269],\n", + " [ 0.40017086, 0.292549 , 0.13513093, -0.3339484 , 0.269705 ,\n", + " -0.4797384 , 0.12899716, -0.47031328, -0.2271472 , -0.0085939 ],\n", + " [-0.04702419, -0.07615919, -0.115963 , -0.16872914, 0.15664066,\n", + " -0.03475128, -0.16791098, 0.21822177, -0.11241832, 0.02188025],\n", + " [-0.01699849, 0.03249685, -0.1861632 , 0.06627662, 0.11205025,\n", + " 0.1486169 , -0.0610617 , -0.09733338, 0.23441704, 0.21430926],\n", + " [ 0.17754906, 0.14666772, 0.0739053 , -0.11227049, 0.02750205,\n", + " 0.23046485, -0.25042364, -0.12743914, 0.19553241, 0.18650456],\n", + " [ 0.01413395, -0.12288608, 0.6965986 , -0.43952045, 0.11586455,\n", + " -0.11987592, -0.06369293, 0.38486838, -0.55859375, -0.13545969],\n", + " [-0.10305157, -0.04945757, 0.04087194, -0.14824198, 0.2462682 ,\n", + " 0.1411338 , 0.1348989 , -0.16403393, -0.00815618, 0.24623275],\n", + " [ 0.19837348, -0.02752618, -0.42066678, 0.03882539, 0.34261274,\n", + " 0.36462694, 0.5088082 , 0.28455532, -0.2084445 , -0.3482247 ],\n", + " [-0.3265298 , 0.04716945, -0.3801287 , -0.20364554, 0.19342104,\n", + " -0.24302767, 0.23731868, 0.10557338, -0.71381503, -0.01366054],\n", + " [ 0.12520793, -0.1765534 , -0.1401379 , -0.15058628, -0.15790021,\n", + " 0.00437207, -0.21201445, 0.1876923 , 0.11102927, -0.01035017],\n", + " [ 0.47232 , 0.19505255, 0.00116834, 0.03654027, 0.19161451,\n", + " -0.26607552, 0.28115118, -0.40405995, -0.76557356, 0.1490531 ],\n", + " [-0.07026906, -0.00780696, -0.0214348 , -0.12663366, 0.00270588,\n", + " -0.11748821, -0.02560265, 0.17894788, -0.09310419, 0.18391229],\n", + " [ 0.05815082, 0.03282784, 0.39610478, 0.00641445, -0.01176597,\n", + " -0.4745875 , -0.04102951, 0.07604022, -0.1260373 , 0.19123802],\n", + " [ 0.11074285, 0.1294036 , -0.28424704, -0.14866841, 0.20542029,\n", + " 0.1165528 , -0.03898513, -0.17555453, 0.27962217, 0.26348287],\n", + " [-0.12302679, 0.11007027, 0.2742532 , -0.04499654, 0.16735874,\n", + " -0.02710269, -0.21448018, 0.08974988, -0.10053015, 0.17155947],\n", + " [-0.29028526, 0.14155896, -0.5791296 , -0.40916735, 0.53818685,\n", + " -0.1641448 , 0.18189283, 0.3412483 , 0.21541823, 0.20131546],\n", + " [-0.01186826, 0.04993342, -0.23226942, 0.2225301 , 0.10204543,\n", + " 0.1943843 , 0.13412805, 0.16293979, -0.2006093 , 0.05441086],\n", + " [-0.26056543, 0.02323167, -0.0015296 , -0.11721803, -0.24186985,\n", + " -0.0963889 , 0.17938763, -0.00543331, 0.01509079, 0.18296184],\n", + " [-0.49410722, 0.24523072, 0.22284663, 0.32980958, -0.13155726,\n", + " 0.05894878, 0.16636033, 0.09222839, 0.17611213, -0.58574736],\n", + " [-0.09948803, 0.20319562, -0.21868108, 0.10254838, -0.2094825 ,\n", + " -0.1692296 , 0.13092874, -0.23704106, 0.02225009, 0.09926336],\n", + " [-0.31647605, 0.37694058, 0.17469397, -0.12611651, 0.12901165,\n", + " -0.41524988, -0.21000667, 0.21409419, 0.3235765 , 0.01054287],\n", + " [-0.2865008 , -0.59122723, 0.1963901 , -0.31103402, -0.35556117,\n", + " 0.18691869, 0.24213761, 0.00609558, 0.42919514, 0.09425966],\n", + " [ 0.26849365, -0.21575768, -0.14220595, -0.06347691, -0.29176414,\n", + " -0.19544017, -0.28446892, -0.19848925, 0.2535855 , 0.17486499],\n", + " [-0.2659144 , -0.04278589, -0.24608164, -0.24818967, -0.15233153,\n", + " 0.16368787, -0.09293711, 0.06584688, -0.0975661 , -0.19781224],\n", + " [-0.05821171, 0.16471031, 0.41971296, -0.23256129, 0.14253083,\n", + " -0.1455678 , 0.10576846, 0.33960342, -0.8148478 , -0.06659503],\n", + " [ 0.12745759, 0.3702152 , -0.27308476, -0.25207722, -0.41478533,\n", + " 0.4310856 , 0.15967306, -0.4570679 , -0.05391107, -0.29273134],\n", + " [ 0.294219 , -0.14976916, -0.56055194, -0.40888074, 0.1531452 ,\n", + " 0.3659002 , -0.32704675, -0.38213524, -0.17781752, 0.2353824 ],\n", + " [-0.05576838, 0.00892646, -0.07968741, -0.1295656 , -0.09649703,\n", + " -0.01505735, 0.22799006, 0.2427742 , 0.1689535 , -0.00908666]],\n", + " dtype=float32),\n", + " array([-0.00490798, -0.01904711, -0.04782519, 0.01603404, -0.04538268,\n", + " 0.00338098, -0.06986066, -0.05395231, 0.12297566, 0.04917476],\n", + " dtype=float32)]" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.get_weights()" + ] + }, + { + "cell_type": "markdown", + "id": "1d97bde9-9dcc-46cd-a078-f26f1c276e87", + "metadata": {}, + "source": [ + "## 8. Modell evaluieren" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "5c224092-5868-4718-8921-bab572acf683", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.9749 - loss: 0.0818 \n", + "Testgenauigkeit: 0.978600025177002\n", + "Test Loss: 0.06802631169557571\n" + ] + } + ], + "source": [ + "# Evaluation\n", + "test_loss, test_acc = model.evaluate(x_test, y_test)\n", + "print(f\"Testgenauigkeit: {test_acc}\")\n", + "print(f\"Test Loss: {test_loss}\")" + ] + }, + { + "cell_type": "markdown", + "id": "646cbc80-31a8-4e7d-9776-8682ebec0752", + "metadata": {}, + "source": [ + "## 9. Beispielhafte Vorhersage\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "7e9759ce-76ae-49dc-ab07-e400c18da124", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step \n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaAAAAGzCAYAAABpdMNsAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAJoJJREFUeJzt3Ql0FFXaxvE3LAkIJBC2JBJC2ETZVEREFkEQBGXYXBDnCMqEQYERooCogOASRUVGRdBxhrggKCOLMk6UNagsDihiRkSCKDAQVJQEggGE+s57Od1fdxagQye30/3/nVPG7q7bVV1d1NN3qaowx3EcAQCglJUr7QUCAKAIIACAFQQQAMAKAggAYAUBBACwggACAFhBAAEArCCAAABWEEAAACsIIJSIoUOHStWqVW2vBnz0/fffS1hYmKSmptpeFYQAAihE/OEPf5ALLrhADh8+XOQ8t99+u4SHh8vBgwdLdd1w2tGjR+WRRx6RNWvW+P29NVRGjRpV4PknnnjCvHbXXXfJqVOnJFg1aNDAfM7CpiZNmthevZBVwfYKoHRouLz//vuyePFiueOOOwo9+C1dulSuv/56qVmzppV1DHX6HUydOtX8f5cuXUp8eU8++aQ89NBDMmTIEHn11VelXLng/T06c+ZMOXLkiNdzP/zwgzz88MPSo0cPa+sV6gigEKoBVatWTd56661CA0jDJzc31wTV+cjLyzO1qNKg19HV5VWuXLlUlhdMnn76aZk4caLZF/7xj38Edfiofv36FXjuscceM3/Pd59H8QX3Xgc3PUgPGDBAVq5cKT/++GOB1zWYNKA0qNR3330nN998s0RHR5umu6uuukr+9a9/eZXRpiJtwliwYIH5JXnhhReaeXNyctzz/O9//zP/+LU/qHbt2nL//ffLyZMnvd5Hm370F2rz5s2lUqVKUrduXfnzn/8sv/76a4FmlBtvvFE+/PBDueKKK8xnevnll92/ZnXdq1SpInXq1JGxY8ea+XT98jdpbdy40dT0oqKizPpec8018umnn3rNo02VY8aMMcuMiIgw73ndddfJ559/7p7n448/Ntuofv36Zp74+Hiz3N9++63A9l24cKFccskl5vO1aNHC1ES1n0zf39X3ottHaS3I1TykTXIu33zzjdx0003mO9H30W3w3nvvia9mzJgh48ePlz/+8Y8yd+7cs4bP1q1bzbo2bNjQLDcmJsY02eVvqj2XbbZjxw4ZOHCgeQ99r3r16smgQYMkOzvb673efPNNadOmjfmO9fPqPHv27ClQY9Rt8vPPP0tx6D6fmJgoV199dbHKww/0dgwIDR999JHeesN54YUXvJ4/ePCgU7FiReeOO+4wj7Oyspy6des61apVcx566CFnxowZTuvWrZ1y5co5ixYtcpdbvXq1eb9LLrnEufTSS818KSkpTm5urjNkyBCnUqVKTvPmzZ277rrLmT17tjNw4EAz/0svveS1/D/96U9OhQoVnKSkJGfOnDnOhAkTnCpVqjht27Z1jh8/7p4vISHBady4sVOjRg3ngQceMPPqOhw5csRp2LChU7lyZfP8zJkznSuvvNKssy5P53FZuXKlEx4e7rRv39559tlnneeee85p1aqVeW7jxo3u+QYPHmyeS05Odl599VXnqaeecvr06eO8+eab7nlGjx7t9O7d23niiSecl19+2Rk2bJhTvnx556abbvL6fMuWLXPCwsLMcnQbTZo0yXyGFi1amM+k9DPoNtL17d+/v/PGG2+Y6csvvzSvZ2RkOFFRUWZb67q8+OKLTufOnc37en4nRdH3HTlypNk2+v/6+X7//fcC8+3atcu8PnfuXPdzzzzzjNOpUydn2rRpziuvvOLce++9ZlvrNj516tQ5b7Njx445iYmJTlxcnPPYY4+ZeaZOnWq+5++//979Pvqafq5bb73V7Cs6T61atZwGDRo4v/76a4H9b8qUKY6vPv/8c1NW92/YQwCFED3gxMbGmoOvJz2Q6z/GDz/80DweM2aMefzxxx+75zl8+LA5eOhB4OTJk14HAD34Hz161Os9NYD0NT1oebrsssucNm3auB/rMnS+efPmec2XlpZW4Hk9WOtz+ponDRJ9fsmSJe7nfvvtN6dZs2ZeAaQHyyZNmjg9e/b0OnDquutnu+6669zP6cFeD9hnkv8zKw1gPXj+8MMP7udatmzp1KtXz2xDlzVr1ph1cwWQ+umnn4o8oHbr1s28T15envs5/QxXX321+Uxn41qW/r3tttsKDZ+iAqiwzzl//nwz39q1a895m33xxRemzMKFC4ucR4NIQ/zxxx/3ev6rr74yP1I8nz+fALrvvvtM2a+//trnsvAfmuBCSPny5U1Txvr1602Tj2dThDZ7devWzTz+4IMP5Morr5SOHTu659EmtOHDh5tyX3/9tdf7aid2Uf0wI0aM8HrcqVMn07zn2TSlTWHaVKNNKa5Jm190matXr/Yqr00mPXv29HouLS3NNP+5mg+VNu8kJSV5zbdlyxbTBDR48GDTfORalvZ96Wdfu3ateyRY9erVTVPdvn37ityenp9Z30PfS5tz9Hj/xRdfmOe1/FdffWX6WjyHpWuzX8uWLeVc/PLLL7Jq1Sq55ZZbTDOXa731M+i20M+kTZ1nc+DAAfc21H3hXHl+Tu1z02Vrk6zybF472zbT71lp06g2nxVm0aJF5jvQz+q5P2iTnY5W89wfdKCGbmvPZspzoe+vzcaXXXaZXHzxxT6VhX8RQCHG1eGqoaP27t1r+jI0mFwHJe1PueiiiwqUdf1j1dc96QGtMBoCrn4Nlxo1anj17ejBU9v/tb9A5/WcdNRS/v6qwpal69OoUSPTZ+KpcePGXo91Wa7AzL8sHQV27Ngxd1/E9OnTJSMjw/TraBjrQc4zONXu3btN34j2Ubj6uDRYlOt9XNsq/7oU9VxhMjMzzYF20qRJBdZ7ypQpZp7C+vXy08/dp08fM/T6ueeek3OlAXjvvfeaHykaRrpc1/fg2Xdztm2mZZKTk822rlWrlgnPWbNmeb2Hfkf6WTVs8n/Wbdu2ndPnPJv09HQT2Aw+sI9RcCFGaxbNmjWT+fPny4MPPmj+6j/48/nHWFTt51x+ZeuvUQ2fefPmFfp6/gA7nxFvrtqNjgC79NJLC53HVUvRX+BaW9PBAh999JEp89RTT5lf6L169TIDKbTWpgfnCRMmmG2qAyD0wKah5M9zalzvpQM48tf+fAmzChUqyDvvvGMGYNx3332mxnLnnXeetZxui3Xr1sm4cePMdtNtpOuk7+P5Oc+2zdSzzz5rto+OutR5/vKXv0hKSops2LDBDEjQ99MfEv/+978L3X/8cXKz7ms68OK222477/fC+SGAQpCGjf6a1tFNWhPSX5tt27Z1v56QkCDbt28vUE5HHLle9xetuaxYsUI6dOhQ7HDR9dFmQQ1Sz1qQ1hzyL0tFRkZK9+7dz/q+sbGxcs8995hJf3lffvnl8vjjj5uDqTarffvtt/Laa695DWtfvnx5gXUrbF0Key5/Dc5FR5+pihUrntN6n4nWSnXkXNeuXU0TpYZQ//79i5xfa6s6clJH5k2ePLlAbdKXbeaiTY866chJDTb97ufMmWOGRet3pN+j1paaNm0q/qa13Hfffdc038XFxfn9/eEbmuBCkKu2owcU7RfJX/vp3bu3fPbZZ6avyLOP45VXXjFDbHU4sb/or2atTTz66KMFXvv999/l0KFDZ30PrRVozcNzSLL2Vfztb38rUPvTA9wzzzxT4KRE9dNPP5m/uj75hwVrLU0PWHoAU65f56f798X9/3/961+9ymkZHXb9+uuvey1Tm4E0xDzpkHCV/zPrsvWAqUPO9+/fX+R6nysNYO0301qT1gI0YIpS2OdUOmze07lsMx2er9+pJw0irY245tFTBXSZGnj5l6mPPYd+F2cYtvZv6val+S0wUAMKQa5zH7QZROX/x/jAAw+Ypjn91apNJNrHob/0d+3aZX49+vOkRe0z0XN+tBlGw1DPStdf+voLWwco6AFdz305Ey3/4osvmoOp9lXor3BtZtFf+541C11v7X/Qz6XnHGnzkw5e0PDSzm09MOvVIrSjX5uDdLmtW7c2zT5aS/vPf/5jmpCUNrlpmGmzmJbXsrpt8p+7pLTPpW/fvuaXvi5T59H11WDyDCWtAWq4v/322+bXv253nUcn7SvRQSF6wNaai9aKdFCB/kjQfrwvv/zSp+2uTZtaW9N10vO0NIS03yY//VydO3c2/TsnTpww20ubznRf8HQu20wHUujlgPTcKf18GkZvvPGGCRw9N0jpNtWakJ4kqwNedN30/DRdnjbt6UAY3eZKfyRpTU77wc51IILuF3qOkmt5sMyPI+pQhsyaNcsMQ9VzOQqzc+dOcz5L9erVzfk8Op+ez+LJNQy2sGG1Ogxbz+XJT4fMFrbb6fklOjxbzy/R8490yPH48eOdffv2uefRYcQ33HBDoev73Xffmde0fO3atc0w23fffdcsa8OGDQWGAw8YMMCpWbOmExERYd73lltuMecIuc5XGTdunDmPSNdFP4f+f/7zl3QIb/fu3Z2qVaua81T0PCY9byf/MGa1YMECMyxcl6fn/7z33nvmvCh9ztO6devMdtDzafIPMdbvRM/ViomJMedtXXjhhc6NN97o/POf/3TO9Tyg/LZt22bWPTo62pxrVNgw7L1795pzk3Rf0KHWN998s/lePNfvXLaZfkd6TlijRo3MPqXL7Nq1q7NixYoC66XfXceOHc376KTbSdd/+/btxR6GnZ2dbZar3z0CQ5j+x3YIAiVBm4n0ygRaQ9Bf7oFGO/RdNREgFNEHhKCQ//I32gekfSY6wMJ2+GjTVf6+D708kDablcZFR4FARR8QgoJ2Xus12bRWoZ3hei0x7aAuanh3adI+Ih29ptde0055XS8d9aUnV+Y/URcIJQQQgoKOhNMBBho4OiJLO/P1bPdbb73V9qqZk291BJ6un45Y0/OFbrjhBnM7BG59gVBGHxAAwAr6gAAAVhBAAAArAq4PSK8FpVfT1ZPPiro0CQAgcGnPjp6crINuznTiesAFkIaPXk0XAFC26V1s9QoZZaYJTms+AICy72zH8xILIL12lV64Uq/H1a5dO3PdpnNBsxsABIezHc9LJID0Yop64ym9SKDeMVEvTqjnafjjZlIAgCBREheY0wtXel748OTJk05cXJyTkpJyThcM1NViYmJiYpIyPenx/Ez8XgM6fvy4bN682evGWToKQh973l/GRe8DovcJ8ZwAAMHP7wGkN4fSS6Ho/eM96eOsrKwC8+t9YKKiotwTI+AAIDRYHwWnN57Si0e6Jh22BwAIfn4/D6hWrVrmDod6t0ZP+liv/puf3p1QJwBAaPF7DSg8PNxc+dfzPvN6dQN93L59e38vDgBQRpXIlRB0CPaQIUPkiiuuMPeZ1ztT5ubmyp133lkSiwMAlEElEkB6Dxa978nkyZPNwAO9SVhaWlqBgQkAgNAVcPcD0mHYOhoOAFC26cCyyMjIwB0FBwAITQQQAMAKAggAYAUBBACwggACAFhBAAEArCCAAABWEEAAACsIIACAFQQQAMAKAggAYAUBBACwggACAFhBAAEArCCAAABWEEAAACsIIACAFQQQAMAKAggAYAUBBACwggACAFhBAAEArCCAAABWEEAAACsIIACAFQQQAMAKAggAYAUBBACwggACAFhBAAEArCCAAABWEEAAACsIIACAFQQQAMAKAggAYAUBBACwggACAFhBAAEArCCAAABWEEAAACsIIACAFQQQAMAKAggAYAUBBACwggACAFhBAAEArCCAAABWEEAAACsIIACAFQQQAMAKAggAYAUBBACwggACAFhBAAEArCCAAADBEUCPPPKIhIWFeU3NmjXz92IAAGVchZJ40+bNm8uKFSv+fyEVSmQxAIAyrESSQQMnJiamJN4aABAkSqQPaMeOHRIXFycNGzaU22+/XXbv3l3kvMeOHZOcnByvCQAQ/PweQO3atZPU1FRJS0uT2bNny65du6RTp05y+PDhQudPSUmRqKgo9xQfH+/vVQIABKAwx3GcklzAoUOHJCEhQWbMmCHDhg0rtAakk4vWgAghACj7srOzJTIyssjXS3x0QPXq1aVp06aSmZlZ6OsRERFmAgCElhI/D+jIkSOyc+dOiY2NLelFAQBCOYDuv/9+SU9Pl++//17WrVsn/fv3l/Lly8ttt93m70UBAMowvzfB7d2714TNwYMHpXbt2tKxY0fZsGGD+X8AAEptEIKvdBCCjoYDAAT3IASuBQcAsIIAAgBYQQABAKwggAAAVhBAAAArCCAAgBUEEADACgIIAGAFAQQAsIIAAgBYQQABAKwggAAAVpT4DelQum666SafyyQlJRVrWfv27fO5TF5ens9l5s2b53OZrKwsKY6ibpwIwP+oAQEArCCAAABWEEAAACsIIACAFQQQAMAKAggAYAUBBACwggACAFhBAAEArCCAAABWEEAAACsIIACAFQQQAMCKMMdxHAkgOTk5EhUVZXs1yqzvvvvO5zINGjSQYHP48OFilfvvf//r93WBf+3du9fnMtOnTy/WsjZt2lSscjgtOztbIiMjpSjUgAAAVhBAAAArCCAAgBUEEADACgIIAGAFAQQAsIIAAgBYQQABAKwggAAAVhBAAAArCCAAgBUEEADAigp2FouSkpSU5HOZVq1aFWtZ27Zt87nMxRdf7HOZyy+/3OcyXbp0keK46qqrfC6zZ88en8vEx8dLIPv99999LvPTTz/5XCY2NlZKw+7du4tVjouRlixqQAAAKwggAIAVBBAAwAoCCABgBQEEALCCAAIAWEEAAQCsIIAAAFYQQAAAKwggAIAVBBAAwAoCCABgBRcjDTIrV64slTLFlZaWVirLqVGjRrHKXXrppT6X2bx5s89l2rZtK4EsLy/P5zLffvttqVzQNjo62ucyO3fu9LkMSh41IACAFQQQAKBsBNDatWulT58+EhcXJ2FhYbJkyRKv1x3HkcmTJ5v7fFSuXFm6d+8uO3bs8Oc6AwBCMYByc3OldevWMmvWrEJfnz59ujz//PMyZ84c2bhxo1SpUkV69uxZrDZlAEDw8nkQQq9evcxUGK39zJw5Ux5++GHp27evee7111+XunXrmprSoEGDzn+NAQBBwa99QLt27ZKs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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "predictions = model.predict(x_test)\n", + "plt.imshow(x_test[0].reshape(28, 28), cmap=\"gray\")\n", + "plt.title(f\"Vorhergesagte Klasse: {predictions[0].argmax()}\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "010a3735-c35e-4084-9f5e-5c0088e8d7e6", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/2deep_ml_ops/cnn-beispiel.rst b/docs/2deep_ml_ops/cnn-beispiel.rst deleted file mode 100644 index 4636807..0000000 --- a/docs/2deep_ml_ops/cnn-beispiel.rst +++ /dev/null @@ -1,57 +0,0 @@ -Praxisbeispiel – Bildklassifikation mit CNNs ------------------------------------------------------------- - -**Ziel:** Einführung in Convolutional Neural Networks mit TensorFlow/Keras anhand eines Bildklassifikationsproblems. - -.. note: - Code Beispiel auch mit pytorch! als "Gegenbeispiel" zu tensorflows - - -**Code-Beispiel: Klassifikation des MNIST-Datensatzes (Handgeschriebene Ziffern)** - -.. code-block:: python - - import tensorflow as tf - from tensorflow.keras import layers, models - from tensorflow.keras.datasets import mnist - import matplotlib.pyplot as plt - - # Daten laden - (x_train, y_train), (x_test, y_test) = mnist.load_data() - x_train, x_test = x_train / 255.0, x_test / 255.0 # Normalisierung - x_train = x_train[..., tf.newaxis] # Dimension erweitern - x_test = x_test[..., tf.newaxis] - - # Modell definieren - model = models.Sequential( - [ - layers.Conv2D(32, (3, 3), activation="relu", input_shape=(28, 28, 1)), - layers.MaxPooling2D((2, 2)), - layers.Conv2D(64, (3, 3), activation="relu"), - layers.MaxPooling2D((2, 2)), - layers.Conv2D(64, (3, 3), activation="relu"), - layers.Flatten(), - layers.Dense(64, activation="relu"), - layers.Dense(10, activation="softmax"), - ] - ) - - # Modell kompilieren - model.compile( - optimizer="adam", - loss="sparse_categorical_crossentropy", - metrics=["accuracy"], - ) - - # Training - model.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test)) - - # Evaluation - test_loss, test_acc = model.evaluate(x_test, y_test) - print(f"Testgenauigkeit: {test_acc}") - - # Beispielhafte Vorhersage - predictions = model.predict(x_test) - plt.imshow(x_test[0].reshape(28, 28), cmap="gray") - plt.title(f"Vorhergesagte Klasse: {predictions[0].argmax()}") - plt.show() diff --git a/docs/2deep_ml_ops/deduplicate.ipynb b/docs/2deep_ml_ops/deduplicate.ipynb new file mode 100644 index 0000000..bd21506 --- /dev/null +++ b/docs/2deep_ml_ops/deduplicate.ipynb @@ -0,0 +1,1563 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "da945f8f-ac13-4a5d-85e2-76618c5861f3", + "metadata": {}, + "source": [ + "# Praxisbeispiel - Datenverarbeitung - Deduplizieren\n", + "\n", + "## 1. Daten \n", + "## 1.1 Beispieldaten laden" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "b40d877a-7429-463b-9443-1f423d36121a", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "c5fca3df-d2c0-47a5-81e7-1ffa864bb90a", + "metadata": {}, + "outputs": [], + "source": [ + "customers = pd.read_csv(\n", + " \"https://raw.githubusercontent.com/kjam/data-cleaning-101/master/data/customer_data_duped.csv\",\n", + " encoding=\"utf-8\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c7bd864d-3e9d-4711-8003-2cd2dd4596b3", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "67b62ec8-4c31-4e77-b46d-32364b01a79b", + "metadata": {}, + "source": [ + "## 1.2 Daten verstehen \n", + "### 1.2.1. Daten anzeigen" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "c7cf08e8-bebd-47f7-824d-60f16c86c85b", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
namejobcompanystreet_addresscitystateemailuser_name
0Patricia SchaeferProgrammer, systemsEstrada-Best398 Paul DriveChristianviewDelawarelambdavid@gmail.comndavidson
1Olivie DuboisIngénieur recherche et développement en agroal...Morenorue Lucas BenardSaint Anastasie-les-BainsARberthelotjacqueline@mahe.frmanonallain
2Mary Davies-KirkPublic affairs consultantBaker LtdFlat 3\\nPugh mewsStanleyfurtZAmiddletonconor@hotmail.comcolemanmichael
3Miroslawa EckbauerDispensing opticianLadeck GmbHMijo-Lübs-Straße 12NeubrandenburgBerlinsophia01@yahoo.deromanjunitz
4Richard BauerAccountant, chartered certifiedHoffman-Rocha6541 Rodriguez WallCarlosmouthTexastross@jensen-ware.orgadam78
...........................
2075Maurice SteySystems developerLinke Margraf GmbH & Co. OHGLaila-Scheibe-Allee 2/0LuckenwaldeHamburggutknechtevelyn@niemeier.comdkreusel
2076Linda AlexanderCommrcil horiculuriWebb, Ballald and Vasquel5594 Persn CiffMooneyburyMarylandahleythoa@ail.cokennethrchn
2077Diane BaillyPharmacienVoisin527, rue DijouxDuval-les-BainsCHaruiz@reynaud.frdorothee41
2078Jorge Riba CerdánHotel managerAmador-DiegoRambla de Adriana Barceló 854 Puerta 3HuescaAsturiasmanuelamosquera@yahoo.comeugenia17
2079Ryan ThompsonBrewing technologistSmith-Sullivan136 Rodriguez PointBradfordboroughNorth Dakotalcruz@gmail.comcnewton
\n", + "

2080 rows × 8 columns

\n", + "
" + ], + "text/plain": [ + " name job \\\n", + "0 Patricia Schaefer Programmer, systems \n", + "1 Olivie Dubois Ingénieur recherche et développement en agroal... \n", + "2 Mary Davies-Kirk Public affairs consultant \n", + "3 Miroslawa Eckbauer Dispensing optician \n", + "4 Richard Bauer Accountant, chartered certified \n", + "... ... ... \n", + "2075 Maurice Stey Systems developer \n", + "2076 Linda Alexander Commrcil horiculuri \n", + "2077 Diane Bailly Pharmacien \n", + "2078 Jorge Riba Cerdán Hotel manager \n", + "2079 Ryan Thompson Brewing technologist \n", + "\n", + " company street_address \\\n", + "0 Estrada-Best 398 Paul Drive \n", + "1 Moreno rue Lucas Benard \n", + "2 Baker Ltd Flat 3\\nPugh mews \n", + "3 Ladeck GmbH Mijo-Lübs-Straße 12 \n", + "4 Hoffman-Rocha 6541 Rodriguez Wall \n", + "... ... ... \n", + "2075 Linke Margraf GmbH & Co. OHG Laila-Scheibe-Allee 2/0 \n", + "2076 Webb, Ballald and Vasquel 5594 Persn Ciff \n", + "2077 Voisin 527, rue Dijoux \n", + "2078 Amador-Diego Rambla de Adriana Barceló 854 Puerta 3 \n", + "2079 Smith-Sullivan 136 Rodriguez Point \n", + "\n", + " city state email \\\n", + "0 Christianview Delaware lambdavid@gmail.com \n", + "1 Saint Anastasie-les-Bains AR berthelotjacqueline@mahe.fr \n", + "2 Stanleyfurt ZA middletonconor@hotmail.com \n", + "3 Neubrandenburg Berlin sophia01@yahoo.de \n", + "4 Carlosmouth Texas tross@jensen-ware.org \n", + "... ... ... ... \n", + "2075 Luckenwalde Hamburg gutknechtevelyn@niemeier.com \n", + "2076 Mooneybury Maryland ahleythoa@ail.co \n", + "2077 Duval-les-Bains CH aruiz@reynaud.fr \n", + "2078 Huesca Asturias manuelamosquera@yahoo.com \n", + "2079 Bradfordborough North Dakota lcruz@gmail.com \n", + "\n", + " user_name \n", + "0 ndavidson \n", + "1 manonallain \n", + "2 colemanmichael \n", + "3 romanjunitz \n", + "4 adam78 \n", + "... ... \n", + "2075 dkreusel \n", + "2076 kennethrchn \n", + "2077 dorothee41 \n", + "2078 eugenia17 \n", + "2079 cnewton \n", + "\n", + "[2080 rows x 8 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "customers" + ] + }, + { + "cell_type": "markdown", + "id": "c4c0955c-a8cc-4fbe-b304-cecc97f41bea", + "metadata": {}, + "source": [ + "### 1.2.2. Datentypen anzeigen \n", + "Hierfür verwenden wir pandas.DataFrame.dtypes:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "578db81c-f9ad-47c1-bf1f-c4183e6498f4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "name object\n", + "job object\n", + "company object\n", + "street_address object\n", + "city object\n", + "state object\n", + "email object\n", + "user_name object\n", + "dtype: object" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "customers.dtypes\n" + ] + }, + { + "cell_type": "markdown", + "id": "c58db531-b981-43a2-ac1b-319eb321c767", + "metadata": {}, + "source": [ + "### 1.2.3. Fehlende Werte ermitteln\n", + "pandas.isnull zeigt für ein array-ähnliches Objekt an, ob Werte fehlen:\n", + "\n", + "- NaN in numerischen Arrays\n", + "\n", + "- None oder NaN in Objekt-Arrays\n", + "\n", + "- NaT in datetimelike\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "0540e3f9-4db0-4b91-9f7f-878f53dc1a44", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "name 0\n", + "job 0\n", + "company 0\n", + "street_address 0\n", + "city 0\n", + "state 0\n", + "email 0\n", + "user_name 0\n" + ] + } + ], + "source": [ + "for col in customers.columns:\n", + " print(col, customers[col].isnull().sum())" + ] + }, + { + "cell_type": "markdown", + "id": "799d56c7-a0e3-46a3-943c-befaacc5a74d", + "metadata": {}, + "source": [ + "## 2. Duplizierte Datensätze ermitteln und löschen\n", + "### 2.1. mit Pandas " + ] + }, + { + "cell_type": "markdown", + "id": "a53120ae-2f8a-4bb5-b7a3-4cb3e96f55c0", + "metadata": {}, + "source": [ + "#### 2.1.1 Duplizierte Datenpunkte ermitteln" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "1ae2365b-d980-409f-9f36-e2cee7525a35", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 False\n", + "1 False\n", + "2 False\n", + "3 False\n", + "4 False\n", + " ... \n", + "2075 False\n", + "2076 False\n", + "2077 False\n", + "2078 False\n", + "2079 False\n", + "Length: 2080, dtype: bool" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "customers.duplicated()\n" + ] + }, + { + "cell_type": "markdown", + "id": "30a1a1c0-839d-458c-8cce-853895cff9a8", + "metadata": {}, + "source": [ + "customers.duplicated() gibt uns noch nicht den gewünschten Hinweis, ob es doppelte Datensätze gibt. Im Folgenden lassen wir uns alle Datensätze ausgeben, für die True zurückgegeben wird:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "8857b4f6-ec55-4c24-8adc-1645eca3c1c1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
namejobcompanystreet_addresscitystateemailuser_name
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [name, job, company, street_address, city, state, email, user_name]\n", + "Index: []" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "customers[customers.duplicated()]\n" + ] + }, + { + "cell_type": "markdown", + "id": "5b07a4fd-a06c-4d6e-8b31-9600ff5b5726", + "metadata": {}, + "source": [ + "Offenbar gibt es keine identischen Datensätze.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "bd1c85e5-526b-4831-abba-77cab5d0d095", + "metadata": {}, + "source": [ + "### 2.1.2. Deduplizieren \n", + "\n", + "Da pandas keine Duplikate erkennen konnte, wird das Löschen doppelter Datensätzemit drop_duplicates demnach nichts ändern und die Anzahl des Datensatzes bei 2080 belassen.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "757fa2fb-381c-4a92-b001-6ddf0ea51d7e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(2080, 8)\n", + "(2080, 8)\n" + ] + } + ], + "source": [ + "print(customers.shape)\n", + "customers.drop_duplicates(inplace=True)\n", + "print(customers.shape)" + ] + }, + { + "cell_type": "markdown", + "id": "349b31db-dbe8-4fd1-b7a1-a6dea4192c04", + "metadata": {}, + "source": [ + "### 2.1.3. user_name-spezifische Ermittlung und Deduplizierung" + ] + }, + { + "cell_type": "markdown", + "id": "a219298d-9998-4540-9b9e-a7af85b4d47f", + "metadata": {}, + "source": [ + "Wir gehen einen Detailschritt weiter und lassen uns diejenigen Datensätze anzeigen, bei denen nur der user_name identisch ist:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "950221bf-7983-4bc7-bb80-8f250b6903fe", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
namejobcompanystreet_addresscitystateemailuser_name
337Aysel BinnerReccig officerKuhl Kalleww Swifwunw & Co. KGaABatix-Kanz-Staß 5/4FuldaBerlifrncoise@wgnercochristinefinke
377Jolanta RoggeAccommodation managrScholl e.V.Lrchplz 4/6MettmnnThüringeninrharff@yah.dwalentinabeier
506Mrs. Frances PetersFuiue desieRsgers, Lawrence and RichardsStudio \\nCarpntr kysWes SimnBOhalenewilliams@wilson-sandes.ogamy17
545Gerhart Krebs MBA.SurgeonRoskothKühnertweg 863StadeBayernolav44@bolander.debettyhahn
592Folkert GnatzMeteorologistBolnbachHeinfried-Austermühle-Ring 05EilenburgThüringenjaentschbirgitt@boerner.orgfrancesco44
633Manon JacquotIngénieur en aéronautiqueJacob8, chemin Éléonore EvrardMarechal-les-BainsARilemaitre@voila.frastrid58
658Austin WallerInsurance risk surveyorSexton Group11097 Hansen FieldDavidmouthTexaschristina74@doyle-baker.bizolynn
723Wanda MoranSolicitor, ScotlandEstes PLC08011 Hernandez Streets Apt. 149NatalieshireOregonhowardreginald@gmail.comdana91
762Charles RussellScientist, research (physical sciences)Preston-Wilson6709 Ashley Circle Apt. 309DanielbergSouth Dakotanancyescobar@brown.netruben71
772Waltrud WohlgemutDesigner, fashion/clothingNerger AGElmar-Ullmann-Allee 6SchlüchternRheinland-Pfalzauch-schlauchindietlind@gmx.dezitakuhl
783Caroline MataEngineer, elecricalGrimes Grrur80157 Whte Alley Sute 79Soh MarkIwjared52@aoo.comthomasthompson
889Ricardo Ripoll LucenaTeevisi camera peratrLuzq Estraqa anq GalinqqCaejón Rosario Viapana 16PalenciaLgoev0@oo.comcolomerenrique
928Sophie Letellier du CarpentierCnucteu e étValle7 SARL3, boulvard Jan AugrSaint DaviddanBSrdorm@dbmi.comanne28
979Irene Roda DávilaEitor, maazine featresDaza IncRoda Carla Miró 5ViyLa Rioasldrpére@ps.cmipeñalver
995Abigail HernandezMechanical engineerSmith Ltd766 Adrian RanchEllismouthColoradojordan60@gmail.commendozajody
1015Mr. Paul NewtonGovernment soa researh offerLemnardmWatsmnStudi 86\\nKaty illWest JueVEem@mil.cmbbennett
1043Anna AdamsProgrammer alcatonsJones Gjoup22 Kateen ovaNoth JoaKZasleig65@aisay.colloydann
1052Aurélie VidalMagistratMartins88, rue Stéphanie LetellierRouxnecSEboutineric@blin.friwagner
1062Regina Schacht-KuschHerbalistHartung GmbH & Co. KGaAWenke-Hörle-Ring 36EggenfeldenSachsen-Anhaltoluebs@troest.dexklotz
1120Jeffrey BenjaminPubl house managerChcn Inc27 Rodgrs Rdgs Apt. 269Suth JefferergIinoisstepanie90@rogers.colori67
1170Julio Agustín AmayaTax aviserPiñolk Belmonke and CodinaCalleón de Gregorio Bustamante 28 Piso 7La PalaSalamancausolana@jáuregui-pedraza.omgloriaolmo
1339Ing. Andrew Schleich B.A.LnHolt Putz GnRHugasse 8/8HainichnNeersachsenjun@putz.comjesselmaja
1360Frédérique Lejeune-DanielTecce cseSctmittchemin Denise FerrandSaint ChalotteVilleIEjchretien@costacomjoseph60
1384Kenneth MooreMagazine journalistCross, Bfll anf Diaz753 Lindsey PineThompsonsheColoraoashey28@rice.cotodd72
1423Thomas CoulonCollecteur de fondsLevy91, rue Laetitia ColletDias-sur-NormandSCdeschampsgabriel@guyot.frmichelepetit
1433Jerry BarnesTour mnerCol-Wllllams30 Mpy OvepassJeiferviewUtahinsnashl@gas-hais.cmchristopher62
1452Karen WeeksPsychotherapist, childRodriguez, Brady and Jackson233 Kevin StreetLarrysideIndianagregg39@hernandez-gomez.comknapprobert
1489Herr Johann EigenwilligImmigration officerSüßebier Hänel GmbHLangernplatz 0StadtsteinachThüringenhaasemarieluise@noack.comistoll
1544Pasquale SchwitalTrade mark attorneyFinkeDetlef-Binner-Platz 0/1BurgNiedersachsenhanne-lore98@gmx.dethomas14
1557Stephanie YoungHerpetologistBryant and Sons5163 Rebecca Creek Suite 421North TheresabergAlaskastephenwilliams@summers.comahawkins
1567Carolina Reguera SanzFam manaeCami77, C7aparr7 a7d N7gu7raVil e Imel Oorio 25MaddVicayamordóñ@cámara.infoeva16
1616Sonia AmoresSenir tax prfessina/tax inspectrJ5an-NúñezAvnida d Grgorio Manón 344 Prta 8PonevedrLugoicent4@montenero-brroso.infosanmartínguillermo
1647Juan Carlos Iker Boix RosPre phtgrapherPont, P44om4r4s 4nd Arjon4Pasadzo de Josep Bentez PsoLas PalmasMiasrgio24@gail.coluis-miguel23
1652Jörg HenschelChaity officeSchicke AGHennyLorchRng 484Hohensein-EnshBadenWürtteberghuerhes@hmal.deanne-katrin51
1703Marc TateShip brokerWagner, Mitchell and Grimes721 Christopher View Suite 840WatsonmouthConnecticutchenjessica@hotmail.compatricia34
1707Joseph HinesPyhiatri nreCr4ig, G4rci4 4nd Rich4rds85663 Savage GlesMcgeeonAlsbcaldern@htmail.cmemilytorres
1722Julie BaldwinSet deignerW5ll55mson-G5rz558513 Paricia Res Suie 45So MeAlaskadiuez@uess.cmoss
1759Sarah HoffmanExhibitin designeHensont Wiley and Ryan9490 Curts Spur Sute 82JseptwnArizonancole@yahoo.comcsmith
1796Valentine Devaux-RogerDireceur d'ôialLeiris57, enue de GrosBenadBouALrogrlro@munoz.omxherve
1809Slavica SeidelPsychotherapist, childWulff Hande KGPreißgasse 0/4SoestRheinland-Pfalztloos@krause.netabien
1820Wenke SchweitzerEnginr, automotiWesa4k KGEies. 7Ba LnwraThürigersthveriue@mies.rgkwernecke
1829Dr. Thomas HeinCopyGeiselLadeckgasse 11RockenhausenNordrhein-Westfalengrein-grotharnim@kallert.desiegmar08
1837Andrew HartEngineer, civil (contracting)Barnett LLC258 Day Hollow Suite 410KimberlyhavenColoradobrandy00@yahoo.comamy30
1914Shelby FowlerAir traffic controllerFields-Sanchez533 Fitzpatrick BypassFrancesbergMichiganterrystephen@anderson.orggcain
1938Susan AubryDirecteur d'agence bancairePayet Georges S.A.S.67, rue Inès ValentinNicolasFImilletedith@sfr.frtthierry
1948Richard Karge-KobeltJunalist maaineAbberb Keubeb AGMitschkeee 8SachsnAnhaltnrejwgner@gmx.emuehlehenni
1960Anna de LobatoMedcl techcl ocerMaciag PLCCalleón de Dolore Parea 21 At 7PalnciaCantariavázqzlornzo@al.omdaniel70
1968Zoltan Wähner B.A.Professor EmeritsTh8e8Stotr. 1SaulgauShlsg-Holstarlenpruschke@salz.orkklemm
1995Kenneth DunnProgrammer, systemsLeonard Inc5361 Patterson Mission Suite 504VillaburghRhode Islandkristen54@gmail.comjkent
2010Gertraude SchomberInsurance risk surveyorBruderChrista-Ullrich-Allee 0/1Schwäbisch HallHessengumprichalice@schmidt.defruppert
2075Maurice SteySystems developerLinke Margraf GmbH & Co. OHGLaila-Scheibe-Allee 2/0LuckenwaldeHamburggutknechtevelyn@niemeier.comdkreusel
\n", + "
" + ], + "text/plain": [ + " name job \\\n", + "337 Aysel Binner Reccig officer \n", + "377 Jolanta Rogge Accommodation managr \n", + "506 Mrs. Frances Peters Fuiue desie \n", + "545 Gerhart Krebs MBA. Surgeon \n", + "592 Folkert Gnatz Meteorologist \n", + "633 Manon Jacquot Ingénieur en aéronautique \n", + "658 Austin Waller Insurance risk surveyor \n", + "723 Wanda Moran Solicitor, Scotland \n", + "762 Charles Russell Scientist, research (physical sciences) \n", + "772 Waltrud Wohlgemut Designer, fashion/clothing \n", + "783 Caroline Mata Engineer, elecrical \n", + "889 Ricardo Ripoll Lucena Teevisi camera peratr \n", + "928 Sophie Letellier du Carpentier Cnucteu e ét \n", + "979 Irene Roda Dávila Eitor, maazine featres \n", + "995 Abigail Hernandez Mechanical engineer \n", + "1015 Mr. Paul Newton Government soa researh offer \n", + "1043 Anna Adams Programmer alcatons \n", + "1052 Aurélie Vidal Magistrat \n", + "1062 Regina Schacht-Kusch Herbalist \n", + "1120 Jeffrey Benjamin Publ house manager \n", + "1170 Julio Agustín Amaya Tax aviser \n", + "1339 Ing. Andrew Schleich B.A. Ln \n", + "1360 Frédérique Lejeune-Daniel Tecce cse \n", + "1384 Kenneth Moore Magazine journalist \n", + "1423 Thomas Coulon Collecteur de fonds \n", + "1433 Jerry Barnes Tour mner \n", + "1452 Karen Weeks Psychotherapist, child \n", + "1489 Herr Johann Eigenwillig Immigration officer \n", + "1544 Pasquale Schwital Trade mark attorney \n", + "1557 Stephanie Young Herpetologist \n", + "1567 Carolina Reguera Sanz Fam manae \n", + "1616 Sonia Amores Senir tax prfessina/tax inspectr \n", + "1647 Juan Carlos Iker Boix Ros Pre phtgrapher \n", + "1652 Jörg Henschel Chaity office \n", + "1703 Marc Tate Ship broker \n", + "1707 Joseph Hines Pyhiatri nre \n", + "1722 Julie Baldwin Set deigner \n", + "1759 Sarah Hoffman Exhibitin designe \n", + "1796 Valentine Devaux-Roger Direceur d'ôial \n", + "1809 Slavica Seidel Psychotherapist, child \n", + "1820 Wenke Schweitzer Enginr, automoti \n", + "1829 Dr. Thomas Hein Copy \n", + "1837 Andrew Hart Engineer, civil (contracting) \n", + "1914 Shelby Fowler Air traffic controller \n", + "1938 Susan Aubry Directeur d'agence bancaire \n", + "1948 Richard Karge-Kobelt Junalist maaine \n", + "1960 Anna de Lobato Medcl techcl ocer \n", + "1968 Zoltan Wähner B.A. Professor Emerits \n", + "1995 Kenneth Dunn Programmer, systems \n", + "2010 Gertraude Schomber Insurance risk surveyor \n", + "2075 Maurice Stey Systems developer \n", + "\n", + " company \\\n", + "337 Kuhl Kalleww Swifwunw & Co. KGaA \n", + "377 Scholl e.V. \n", + "506 Rsgers, Lawrence and Richards \n", + "545 Roskoth \n", + "592 Bolnbach \n", + "633 Jacob \n", + "658 Sexton Group \n", + "723 Estes PLC \n", + "762 Preston-Wilson \n", + "772 Nerger AG \n", + "783 Grimes Grrur \n", + "889 Luzq Estraqa anq Galinqq \n", + "928 Valle7 SARL \n", + "979 Daza Inc \n", + "995 Smith Ltd \n", + "1015 LemnardmWatsmn \n", + "1043 Jones Gjoup \n", + "1052 Martins \n", + "1062 Hartung GmbH & Co. KGaA \n", + "1120 Chcn Inc \n", + "1170 Piñolk Belmonke and Codina \n", + "1339 Holt Putz GnR \n", + "1360 Sctmitt \n", + "1384 Cross, Bfll anf Diaz \n", + "1423 Levy \n", + "1433 Col-Wllllams \n", + "1452 Rodriguez, Brady and Jackson \n", + "1489 Süßebier Hänel GmbH \n", + "1544 Finke \n", + "1557 Bryant and Sons \n", + "1567 Cami77, C7aparr7 a7d N7gu7ra \n", + "1616 J5an-Núñez \n", + "1647 Pont, P44om4r4s 4nd Arjon4 \n", + "1652 Schicke AG \n", + "1703 Wagner, Mitchell and Grimes \n", + "1707 Cr4ig, G4rci4 4nd Rich4rds \n", + "1722 W5ll55mson-G5rz5 \n", + "1759 Hensont Wiley and Ryan \n", + "1796 Leiris \n", + "1809 Wulff Hande KG \n", + "1820 Wesa4k KG \n", + "1829 Geisel \n", + "1837 Barnett LLC \n", + "1914 Fields-Sanchez \n", + "1938 Payet Georges S.A.S. \n", + "1948 Abberb Keubeb AG \n", + "1960 Maciag PLC \n", + "1968 Th8e8 \n", + "1995 Leonard Inc \n", + "2010 Bruder \n", + "2075 Linke Margraf GmbH & Co. OHG \n", + "\n", + " street_address city \\\n", + "337 Batix-Kanz-Staß 5/4 Fulda \n", + "377 Lrchplz 4/6 Mettmnn \n", + "506 Studio \\nCarpntr kys Wes Simn \n", + "545 Kühnertweg 863 Stade \n", + "592 Heinfried-Austermühle-Ring 05 Eilenburg \n", + "633 8, chemin Éléonore Evrard Marechal-les-Bains \n", + "658 11097 Hansen Field Davidmouth \n", + "723 08011 Hernandez Streets Apt. 149 Natalieshire \n", + "762 6709 Ashley Circle Apt. 309 Danielberg \n", + "772 Elmar-Ullmann-Allee 6 Schlüchtern \n", + "783 80157 Whte Alley Sute 79 Soh Mark \n", + "889 Caejón Rosario Viapana 16 Palencia \n", + "928 3, boulvard Jan Augr Saint Daviddan \n", + "979 Roda Carla Miró 5 Viy \n", + "995 766 Adrian Ranch Ellismouth \n", + "1015 Studi 86\\nKaty ill West Jue \n", + "1043 22 Kateen ova Noth Joa \n", + "1052 88, rue Stéphanie Letellier Rouxnec \n", + "1062 Wenke-Hörle-Ring 36 Eggenfelden \n", + "1120 27 Rodgrs Rdgs Apt. 269 Suth Jeffererg \n", + "1170 Calleón de Gregorio Bustamante 28 Piso 7 La Pala \n", + "1339 Hugasse 8/8 Hainichn \n", + "1360 chemin Denise Ferrand Saint ChalotteVille \n", + "1384 753 Lindsey Pine Thompsonshe \n", + "1423 91, rue Laetitia Collet Dias-sur-Normand \n", + "1433 30 Mpy Ovepass Jeiferview \n", + "1452 233 Kevin Street Larryside \n", + "1489 Langernplatz 0 Stadtsteinach \n", + "1544 Detlef-Binner-Platz 0/1 Burg \n", + "1557 5163 Rebecca Creek Suite 421 North Theresaberg \n", + "1567 Vil e Imel Oorio 25 Madd \n", + "1616 Avnida d Grgorio Manón 344 Prta 8 Ponevedr \n", + "1647 Pasadzo de Josep Bentez Pso Las Palmas \n", + "1652 HennyLorchRng 484 Hohensein-Ensh \n", + "1703 721 Christopher View Suite 840 Watsonmouth \n", + "1707 85663 Savage Gles Mcgeeon \n", + "1722 58513 Paricia Res Suie 45 So Me \n", + "1759 9490 Curts Spur Sute 82 Jseptwn \n", + "1796 57, enue de Gros BenadBou \n", + "1809 Preißgasse 0/4 Soest \n", + "1820 Eies. 7 Ba Lnwra \n", + "1829 Ladeckgasse 11 Rockenhausen \n", + "1837 258 Day Hollow Suite 410 Kimberlyhaven \n", + "1914 533 Fitzpatrick Bypass Francesberg \n", + "1938 67, rue Inès Valentin Nicolas \n", + "1948 Mitschkeee 8 Mß \n", + "1960 Calleón de Dolore Parea 21 At 7 Palncia \n", + "1968 Stotr. 1 Saulgau \n", + "1995 5361 Patterson Mission Suite 504 Villaburgh \n", + "2010 Christa-Ullrich-Allee 0/1 Schwäbisch Hall \n", + "2075 Laila-Scheibe-Allee 2/0 Luckenwalde \n", + "\n", + " state email user_name \n", + "337 Berli frncoise@wgnerco christinefinke \n", + "377 Thüringen inrharff@yah.d walentinabeier \n", + "506 BO halenewilliams@wilson-sandes.og amy17 \n", + "545 Bayern olav44@bolander.de bettyhahn \n", + "592 Thüringen jaentschbirgitt@boerner.org francesco44 \n", + "633 AR ilemaitre@voila.fr astrid58 \n", + "658 Texas christina74@doyle-baker.biz olynn \n", + "723 Oregon howardreginald@gmail.com dana91 \n", + "762 South Dakota nancyescobar@brown.net ruben71 \n", + "772 Rheinland-Pfalz auch-schlauchindietlind@gmx.de zitakuhl \n", + "783 Iw jared52@aoo.com thomasthompson \n", + "889 Lgo ev0@oo.com colomerenrique \n", + "928 BS rdorm@dbmi.com anne28 \n", + "979 La Rioa sldrpére@ps.cm ipeñalver \n", + "995 Colorado jordan60@gmail.com mendozajody \n", + "1015 VE em@mil.cm bbennett \n", + "1043 KZ asleig65@aisay.co lloydann \n", + "1052 SE boutineric@blin.fr iwagner \n", + "1062 Sachsen-Anhalt oluebs@troest.de xklotz \n", + "1120 Iinois stepanie90@rogers.co lori67 \n", + "1170 Salamanca usolana@jáuregui-pedraza.om gloriaolmo \n", + "1339 Neersachsen jun@putz.com jesselmaja \n", + "1360 IE jchretien@costacom joseph60 \n", + "1384 Colorao ashey28@rice.co todd72 \n", + "1423 SC deschampsgabriel@guyot.fr michelepetit \n", + "1433 Utah insnashl@gas-hais.cm christopher62 \n", + "1452 Indiana gregg39@hernandez-gomez.com knapprobert \n", + "1489 Thüringen haasemarieluise@noack.com istoll \n", + "1544 Niedersachsen hanne-lore98@gmx.de thomas14 \n", + "1557 Alaska stephenwilliams@summers.com ahawkins \n", + "1567 Vicaya mordóñ@cámara.info eva16 \n", + "1616 Lugo icent4@montenero-brroso.info sanmartínguillermo \n", + "1647 Mia srgio24@gail.co luis-miguel23 \n", + "1652 BadenWürtteberg huerhes@hmal.de anne-katrin51 \n", + "1703 Connecticut chenjessica@hotmail.com patricia34 \n", + "1707 Als bcaldern@htmail.cm emilytorres \n", + "1722 Alaska diuez@uess. cmoss \n", + "1759 Arizona ncole@yahoo.com csmith \n", + "1796 AL rogrlro@munoz.om xherve \n", + "1809 Rheinland-Pfalz tloos@krause.net abien \n", + "1820 Thürige rsthveriue@mies.rg kwernecke \n", + "1829 Nordrhein-Westfalen grein-grotharnim@kallert.de siegmar08 \n", + "1837 Colorado brandy00@yahoo.com amy30 \n", + "1914 Michigan terrystephen@anderson.org gcain \n", + "1938 FI milletedith@sfr.fr tthierry \n", + "1948 SachsnAnhalt nrejwgner@gmx.e muehlehenni \n", + "1960 Cantaria vázqzlornzo@al.om daniel70 \n", + "1968 Shlsg-Holst arlenpruschke@salz.or kklemm \n", + "1995 Rhode Island kristen54@gmail.com jkent \n", + "2010 Hessen gumprichalice@schmidt.de fruppert \n", + "2075 Hamburg gutknechtevelyn@niemeier.com dkreusel " + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "customers[customers.duplicated([\"user_name\"])]\n" + ] + }, + { + "cell_type": "markdown", + "id": "f268d35d-797f-49f3-9d24-63a83f62fc59", + "metadata": {}, + "source": [ + "Ein darauf den user_name gefilterter Datensatz kann so aussehen:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "46e76915-de2b-4227-aba6-0d53c43b651b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
namejobcompanystreet_addresscitystateemailuser_name
236Aysel BinnerRecycling officerKuhl Kallert Stiftung & Co. KGaABeatrix-Kranz-Straße 5/4FuldaBerlinfrancoise22@wagner.comchristinefinke
337Aysel BinnerReccig officerKuhl Kalleww Swifwunw & Co. KGaABatix-Kanz-Staß 5/4FuldaBerlifrncoise@wgnercochristinefinke
\n", + "
" + ], + "text/plain": [ + " name job company \\\n", + "236 Aysel Binner Recycling officer Kuhl Kallert Stiftung & Co. KGaA \n", + "337 Aysel Binner Reccig officer Kuhl Kalleww Swifwunw & Co. KGaA \n", + "\n", + " street_address city state email \\\n", + "236 Beatrix-Kranz-Straße 5/4 Fulda Berlin francoise22@wagner.com \n", + "337 Batix-Kanz-Staß 5/4 Fulda Berli frncoise@wgnerco \n", + "\n", + " user_name \n", + "236 christinefinke \n", + "337 christinefinke " + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "customers[customers[\"user_name\"] == \"christinefinke\"]\n" + ] + }, + { + "cell_type": "markdown", + "id": "cd8ef668-a32a-41d7-840d-268baa03b2f7", + "metadata": {}, + "source": [ + "Nun können wir diejenigen Datenpunkte löschen, deren user_name identisch ist:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "fe3c078d-e6cc-403d-9443-9415a798327d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(2080, 8)\n", + "(2029, 8)\n" + ] + } + ], + "source": [ + "print(customers.shape)\n", + "customers.drop_duplicates([\"user_name\"], inplace=True)\n", + "print(customers.shape)" + ] + }, + { + "cell_type": "markdown", + "id": "65a4323b-c93d-447a-82fd-45b0c4d85532", + "metadata": {}, + "source": [ + "Dies hat 2080-2029=51 Original-Datenpunkte gelöscht." + ] + }, + { + "cell_type": "markdown", + "id": "78474f25-57ce-42e0-bed0-7f10fd6d61cc", + "metadata": {}, + "source": [ + "## 2.2. Deduplizieren mit fuzzywuzzy\n", + "\n", + "Als Alternative und zum Vergleich fürs Identifizieren von Duplikation und das entsprechende Deduplizieren schauen wir uns die Bibliothek fuzzywuzzy an: \n", + "\n", + "https://www.python4data.science/de/latest/clean-prep/string-matching.html\n" + ] + }, + { + "cell_type": "markdown", + "id": "68d6b9d4-0fd7-4416-bca2-b6a2e42781ea", + "metadata": {}, + "source": [ + "\n", + " " + ] + }, + { + "cell_type": "markdown", + "id": "31089ed7-9186-4c8d-86ff-5542cd444b1f", + "metadata": {}, + "source": [ + "## 2.3. Deduplizieren mit Dedupe\n", + "\n", + "Alternativ können wir die duplizierte Daten mit der Dedupe-Bibliothek (https://docs.dedupe.io/en/latest/) erkennen, die ein flaches neuronales Netzwerk verwendet, um aus einem kleinen Training zu lernen.\n", + "\n", + "Das entsprechende Notebook finden wir hier: \n", + "\n", + "https://www.python4data.science/de/latest/clean-prep/deduplicate.html#3.-Dedupe" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "41592878-3dac-4a9b-9929-1bd5c11f2de9", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/2deep_ml_ops/index.rst b/docs/2deep_ml_ops/index.rst index 8c96597..3d5e632 100644 --- a/docs/2deep_ml_ops/index.rst +++ b/docs/2deep_ml_ops/index.rst @@ -5,12 +5,51 @@ Vertiefung: Neuronale Netze, Deep Learning, Systemüberblick, Use Case Fallgrube - Zusammenfassung der Konzepte aus Tag 1: Überwachtes, unüberwachtes und bestärkendes Lernen. -- Wichtige Begriffe: **Modell, Trainingsdaten, Testdaten, Overfitting, Regularisierung, Optimierung.** +- Wichtige Begriffe: **Modell, Trainingsdaten, Testdaten.** - Diskussion der zentralen Herausforderungen im ML: **Bias, Datenqualität, Modellinterpretierbarkeit.** - Offene Fragen und Klarstellungen + + +* Logistic Regression +* Decision Tree => Random Forest +* SVM () + +.. list-table:: Vergleich von Regression, Klassifikation, Clustering und autonomen Aufgaben + :header-rows: 1 + + * - Merkmal + - :ref:`regression` + - :ref:`classification` + - :ref:`clustering` + - :ref:`autonomous` + - :ref:`generative` + * - Art der Vorhersage + - Kontinuierlicher Wert + - Diskrete Klassen + - Gruppenbildung ohne Labels + - Eigenständige Entscheidungsfindung + - Erzeugung neuer Daten + * - Use Case Beispiele + - Preisprognosen, Finanzanalysen + - Bilderkennung, Spam-Filter + - Kundensegmentierung, Anomalieerkennung + - Selbstfahrende Autos, Industrieroboter + - KI-generierte Bilder, Texte, Musik + * - Gängige "Klassischen" Algorithmen + - Lineare Regression, neuronale Netze + - Decision Trees (Entscheidungsbäume), Random Forest, SVM + - K-Means Clustering, K-nearest neighbour (kNN), DBSCAN + - Reinforcement Learning, Deep Learning + - GANs, VAEs, Transformer + + +Heutiger Kursinhalt +~~~~~~~~~~~~~~~~~~~~ + + .. list-table:: :header-rows: 1 @@ -18,6 +57,8 @@ Vertiefung: Neuronale Netze, Deep Learning, Systemüberblick, Use Case Fallgrube - Inhalte * - Recap der wichtigsten Themen - Wiederholung der ML-Konzepte, Diskussion, Quiz + * - Modellverhalten + - Overfitting, Regularisierung und Optimierung * - Theorie: Neuronale Netze und Deep Learning - Aufbau, Backpropagation, Aktivierungsfunktionen * - Praxis: Bildklassifikation mit CNNs @@ -31,7 +72,9 @@ Vertiefung: Neuronale Netze, Deep Learning, Systemüberblick, Use Case Fallgrube :titlesonly: :maxdepth: 0 + deduplicate + modellverhalten neural-net + neural-net-optimize cnn-beispiel mlops - usecase-pitfalls diff --git a/docs/2deep_ml_ops/modellverhalten.rst b/docs/2deep_ml_ops/modellverhalten.rst new file mode 100644 index 0000000..c07d957 --- /dev/null +++ b/docs/2deep_ml_ops/modellverhalten.rst @@ -0,0 +1,243 @@ +Modellverhalten: Overfitting, Regularisierung und Optimierung +================================================================ + +Einführung +--------------- + +Nachdem wir uns am ersten Tag mit **Regression und Klassifikation** beschäftigt haben, wenden wir uns nun einem zentralen Problem im maschinellen Lernen zu: +**Wie stellen wir sicher, dass unser Modell nicht nur auf Trainingsdaten gut funktioniert, sondern auch auf unbekannte Daten?** + +Dazu müssen wir drei wichtige Konzepte verstehen: + +1. **Overfitting und Underfitting** – Wann ist ein Modell zu komplex oder zu einfach? +2. **Regularisierung** – Wie können wir Overfitting verhindern? + +1. Overfitting und Underfitting +---------------------------------- + +Beim Training von ML-Modellen kann es vorkommen, dass ein Modell entweder **zu gut auf Trainingsdaten passt (Overfitting)** oder **nicht gut genug trainiert wird (Underfitting)**. + +- **Overfitting** tritt auf, wenn das Modell die Trainingsdaten **zu stark auswendig lernt** und nicht auf neue Daten generalisiert. +- **Underfitting** tritt auf, wenn das Modell **zu simpel ist**, um die Muster in den Daten zu erfassen. + + +Underfitting +------------ + +**Underfitting** tritt auf, wenn ein Modell zu einfach ist, um die zugrunde liegenden Muster in den Daten zu erfassen. +Dies geschieht oft, wenn das Modell zu wenige Parameter hat oder wenn es nicht ausreichend trainiert wurde. +Ein unterangepasstes Modell zeigt sowohl auf den Trainingsdaten als auch auf den Testdaten hohe Fehlerwerte, weil es die Struktur der Daten nicht richtig abbilden kann. +Ein typisches Beispiel ist die Verwendung einer linearen Regression für eine stark nicht-lineare Beziehung, wodurch das Modell die Zusammenhänge nicht ausreichend erfasst. + + +Overfitting +-------------- + +Overfitting ist eines der größten Probleme im maschinellen Lernen. + +Was ist Overfitting? +:::::::::::::::::::::::: + +Es tritt auf, wenn ein Modell die Trainingsdaten **zu stark auswendig lernt**, anstatt die zugrunde liegenden Muster zu erkennen. +Dies führt dazu, dass das Modell auf neuen, unbekannten Daten schlecht generalisiert. + +Das passiert leicht, wenn das ausgewählte und trainierte Modell zu komplex ist und sich **zu stark an den Trainingsdatensatz anpasst**, sodass es auf neuen Daten nicht mehr gut funktioniert. + +**Beispiel:** + +Stellen wir uns vor, wir möchten den Zusammenhang zwischen der Körpergröße und dem Gewicht von Personen vorhersagen. + +- Ein einfaches Modell (z. B. lineare Regression) könnte sagen: **„Größere Menschen wiegen tendenziell mehr.“** +- Ein überangepasstes Modell könnte sich jedoch **zu stark an zufällige Ausreißer anpassen** und unnötig komplexe Regeln aufstellen wie: + +**„Personen mit einer Körpergröße von 1,78m wiegen exakt 73,2kg, aber bei 1,79m sinkt das Gewicht plötzlich auf 71,5kg.“** + +Das überangepasste Modell wird zwar auf den Trainingsdaten eine sehr niedrige Fehlerquote haben, +**aber es wird auf neuen, unbekannten Daten sehr schlecht funktionieren**. + +.. figure:: ../_static/images/day2-overfitting.png + :alt: Illustration von Overfitting und Underfitting + :align: center + :width: 400px + + **Abbildung 1:** Overfitting, citation: By Chabacano - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=3610704 + +Eine gute Darstellung von Overfitting, Underfitting und einem gut generalisierten Modell kann `hier `_ gefunden werden. + + +Wie erkennt man überangepasste Modelle? +---------------------------------------- + +**Overfitting** ist nicht immer sofort sichtbar, aber es gibt einige **Hinweise**, anhand derer man es erkennen kann: + +1. **Großer Unterschied zwischen Trainings- und Testfehler** + - Wenn der Fehler auf den Trainingsdaten sehr niedrig, aber auf den Testdaten hoch ist, liegt meist Overfitting vor. + +2. **Zu hohe Modellkomplexität** + - Wenn ein Modell sehr viele Parameter (Gewichte) hat, ist das Risiko hoch, dass es Overfitting betreibt. + +3. **Sehr gute Leistung auf bekannten, aber schlechte Leistung auf neuen Daten** + - Wenn das Modell sich perfekt an die Trainingsdaten anpasst, aber auf neuen Daten katastrophale Fehler macht. + +1. Trainings- und Testverlust: +::::::::::::::::::::::::::::::: + +Definition +~~~~~~~~~~~~ + +**Training Loss (Trainingsverlust)** + +Der Trainingsverlust ist eine Metrik, mit der bewertet wird, wie gut ein Deep-Learning-Modell zu den Trainingsdaten passt. Das heißt, er bewertet den Fehler des Modells in der Trainingsmenge. Beachten Sie, dass der Trainingssatz ein Teil eines Datensatzes ist, der für das anfängliche Training des Modells verwendet wird. Rechnerisch wird der Trainingsverlust durch die Summe der Fehler für jedes Beispiel im Trainingssatz berechnet. + +Es ist auch wichtig zu beachten, dass der Trainingsverlust nach jedem Stapel gemessen wird. Dies wird in der Regel durch das Aufzeichnen einer Kurve des Trainingsverlustes veranschaulicht. + + +**Validierungsverlust (Validation Loss)** + +Im Gegensatz dazu ist der Validierungsverlust eine Metrik, die verwendet wird, um die Leistung eines Deep-Learning-Modells auf dem Validierungsset zu bewerten. Der Validierungssatz ist ein Teil des Datensatzes, der beiseite gelegt wird, um die Leistung des Modells zu validieren. Der Validierungsverlust ist ähnlich wie der Trainingsverlust und wird aus der Summe der Fehler für jedes Beispiel im Validierungssatz berechnet. + +Zusätzlich wird der Validierungsverlust nach jeder Epoche gemessen. Dies gibt Aufschluss darüber, ob das Modell weiter optimiert oder angepasst werden muss oder nicht. Zu diesem Zweck wird normalerweise eine Lernkurve für den Validierungsverlust erstellt. + +Darstellung +~~~~~~~~~~~~ + +Eine typische Methode, um Overfitting zu erkennen, ist die **Lernkurve**, die zeigt, wie sich der Fehler für Trainings- und Testdaten über die Trainingszeit hinweg entwickelt: + +.. figure:: ../_static/images/day2-learning_curve.png + :alt: Lernkurve für Overfitting + :align: center + :width: 600px + + **Abbildung 3:** Lernkurve – Overfitting zeigt sich durch eine große Lücke zwischen Training- und Testfehler. + +**Interpretation des Trainingsverlustes (Training Loss)** + +Die Lernkurve eines Overfit-Modells weist zu Beginn einen sehr niedrigen Training-Loss auf, der mit dem Hinzufügen von Trainingsbeispielen allmählich leicht ansteigt und nicht abflacht. + +**Interpretieren des Validierungsverlustes (Validation Loss)** + +Die Lernkurve eines Overfit-Modells weist zu Beginn einen hohen Validierungsverlust auf, der mit dem Hinzufügen von Trainingsbeispielen allmählich sinkt und nicht abflacht. +Das deutet darauf hin, dass das Hinzufügen weiterer Trainingsbeispiele die Leistung des Modells bei ungesehenen Daten verbessern kann. +Es ist auch zu erkennen, dass die Trainings- und Validierungsverluste weit voneinander entfernt sind, die sich bei Hinzufügen zusätzlicher Trainingsdaten einander annähern können + + +2. Modelkomplexität +:::::::::::::::::::: + +Bei der Entscheidung der Modellkomplexität sind zwei Faktoren ausschlaggebend: +**Bias** vs. **Varianz** + +**Bias** + +Sei Y der wahre Wert eines Parameters, und sei +Y hat sei ein Schätzer von Y auf der Grundlage einer Datenstichprobe. Dann ist die Verzerrung des Schätzers Y-hat ist gegeben durch: + + .. math:: + Bias(\hat{Y}) = E(\hat{Y}) - Y + +wobei + +.. math:: E(\hat{Y}) + +der Erwartungswert des Schätzers + +.. math:: \hat{Y} + +ist. Es ist die Messung des Modells, wie gut es zu den Daten passt. + +**Geringe Verzerrung:** + +Eine geringe Verzerrung bedeutet, dass weniger Annahmen getroffen werden, um die Zielfunktion zu erstellen. +In diesem Fall stimmt das Modell gut mit dem Trainingsdatensatz überein. +Hohe Verzerrung: Ein hoher Verzerrungswert bedeutet, dass mehr Annahmen zur Erstellung der Zielfunktion getroffen werden. +In diesem Fall stimmt das Modell nicht genau mit dem Trainingsdatensatz überein. + +**Varianz** + +Die Varianz ist ein Streuungsmaß. Sie ist das Quadrat der Standardabweichung und stellt die Werte-Verteilung um den Mittelwert herum dar. +Berechnet wird die Varianz, indem die Summe der quadrierten Abweichungen aller Messwerte vom arithmetischen Mittel durch die Anzahl der Messwerte dividiert wird. + + .. math:: + Var(X) = \sigma^2 = \sum_{i=1}^{n} (x_i - \mu)^2 * p_i + +Das Zusammenspiel zwischen Bias und Varianz in Bezug auf Modelkomplexität kann wiefolgt dargestellt werden: + +.. figure:: ../_static/images/day2-model_complexity-bias_and_variance.png + :alt: Modelkomplexität - Bias vs Varianz + :align: center + :width: 500px + + **Abbildung 1:** Modelkomplexität - Bias vs Varianz, citation: By Bigbossfarin - Own work, CC0, https://commons.wikimedia.org/w/index.php?curid=105307219 + + + +2. Regularisierung: Verhinderung von Overfitting +--------------------------------------------------------- + +Methoden zur Regularisierung: +::::::::::::::::::::::::::::: + +* **Mehr Trainingsdaten verwenden** + * Je mehr Daten ein Modell sieht, desto besser kann es generalisieren. + * Besonders wichtig bei Deep Learning. + + +* **L1-Regularisierung (Lasso Regression)** + Setzt einige Koeffizienten auf 0, um unwichtige Merkmale zu eliminieren. + + .. math:: + L_1 = \sum{|x_i|} + +* **L2-Regularisierung (Ridge Regression)** + Bestraft große Koeffizienten, um ein stabileres Modell zu erzeugen. + + .. math:: + L_1 = \sqrt{\sum{{x_i}^2}} + + +* **Cross-Validation** + * K-Fold Cross Validation hilft, das Modell auf mehreren Trainings/Test-Splits zu überprüfen. + + +* **Dropout (bei neuronalen Netzen)** + Deaktiviert zufällig einige Neuronen während des Trainings. + +* **Early Stopping** + * Stoppt das Training, sobald sich die Testfehler nicht weiter verbessern. + +* **Datenaugmentierung** + Erhöht die Datenvielfalt (besonders nützlich in Computer Vision). + + +Code-Beispiel: Ridge & Lasso Regression +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: python + + from sklearn.linear_model import Ridge, Lasso + from sklearn.model_selection import train_test_split + from sklearn.metrics import mean_squared_error + + # Trainings- und Testsplit + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) + + # Ridge Regression + ridge = Ridge(alpha=1.0) + ridge.fit(X_train, y_train) + y_pred_ridge = ridge.predict(X_test) + + # Lasso Regression + lasso = Lasso(alpha=0.1) + lasso.fit(X_train, y_train) + y_pred_lasso = lasso.predict(X_test) + + # Fehlervergleich + print("MSE Ridge:", mean_squared_error(y_test, y_pred_ridge)) + print("MSE Lasso:", mean_squared_error(y_test, y_pred_lasso)) + + +Fazit & Ausblick +----------------- + +* Overfitting kann Modelle unbrauchbar machen – Regularisierung hilft. +* Ridge und Lasso sind wichtige Werkzeuge für lineare Modelle. diff --git a/docs/2deep_ml_ops/neural-net-optimize.rst b/docs/2deep_ml_ops/neural-net-optimize.rst new file mode 100644 index 0000000..6da2281 --- /dev/null +++ b/docs/2deep_ml_ops/neural-net-optimize.rst @@ -0,0 +1,123 @@ +Neuronale Netze und Deep Learning – Optimierung +============================================ + +Optimierung: Modellparameter effizient anpassen +--------------------------------------------------- + +Die Wahl der richtigen **Optimierungsmethode** ist entscheidend für die Leistung eines Modells. Optimierung bedeutet, dass wir die **Modellparameter so anpassen, dass der Fehler minimiert wird** und das Modell möglichst gut generalisiert. Dabei gibt es verschiedene Ansätze, die in den folgenden Unterabschnitten erklärt werden. + +Grundlagen der Optimierung +::::::::::::::::::::::::::::::::::::::::::::: + +* Jedes Machine-Learning-Modell hat eine **Kosten- oder Verlustfunktion (Loss Function)**, die misst, wie gut oder schlecht das Modell Vorhersagen trifft. +* Ziel der Optimierung ist es, diese Verlustfunktion zu minimieren. +* Dabei suchen wir die optimalen Modellparameter (z. B. Gewichte in neuronalen Netzen oder Koeffizienten in linearen Modellen), sodass der Fehler möglichst klein ist. + +Gradient Descent – Das Fundament der Optimierung +:::::::::::::::::::::::::::::::::::::::::::::::::: + +**Gradient Descent (Gradientenabstieg)** ist eine der häufigsten Optimierungstechniken. + +* Dessen Ziel liegt darin, den minimalen Verlustwert (Loss) zu finden. +* Dabei wird die **Ableitung der Verlustfunktion** verwendet, um herauszufinden, in welche Richtung sich die Parameter ändern müssen, um den Fehler zu minimieren. + +.. math:: + w := w - \alpha \frac{\partial L}{\partial w} + +* **w**: Modellparameter (z. B. Gewichte in einem neuronalen Netz) +* **L**: Verlustfunktion (Loss Function) +* **\alpha**: Lernrate – bestimmt, wie große Schritte das Modell bei der Optimierung macht + +Varianten von Gradient Descent +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +1. **Batch Gradient Descent:** + + * Verwendet **den gesamten Trainingsdatensatz**, um den Gradienten zu berechnen. + * **Vorteil:** Konvergiert stabil. + * **Nachteil:** Kann sehr langsam sein, insbesondere bei großen Datensätzen. + +2. **Stochastic Gradient Descent (SGD):** + + * wird als **stochastische Approximation** der Gradientenabstiegsoptimierung betrachtet: + * sie ersetzt den tatsächlichen Gradient (berechnet aus dem gesamten Datensatz) durch eine Schätzung davon (berechnet aus einer **zufällig selektierten Teilmenge** der Daten) + * **Vorteil:** Schneller als Batch Gradient Descent, da es nach jeder Instanz ein Update gibt. + * **Nachteil:** Kann aufgrund der ständigen Updates stark schwanken (stochastisches Verhalten). + +3. **Mini-Batch Gradient Descent:** + + * Ein **Kompromiss zwischen Batch und SGD** – nutzt kleine **Gruppen (Batches)** von Daten. + * **Vorteil:** Stabiler als SGD, aber effizienter als Batch. + * **Nachteil:** Erfordert eine optimale Wahl der **Batch-Größe**. + + +**Beispiel:** Auswirkungen der Lernrate auf das Training + +.. figure:: ../_static/images/day2-learning_rate_effect.png + :alt: Einfluss der Lernrate + :align: center + :width: 500px + + **Abbildung 2:** Eine zu hohe Lernrate konvergiert nicht, eine zu niedrige dauert zu lange. + +Erweiterte Optimierungsverfahren** +::::::::::::::::::::::::::::::::::::::::::::: + +Neben Gradient Descent gibt es weiterentwickelte Algorithmen, die schneller oder stabiler konvergieren: + +Momentum-based Methoden +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Momentum Optimizer:** + +* Verwendet einen **Impulswert**, um den Lernprozess zu beschleunigen und Schwankungen zu verringern. +* Formell wird ein "Momentumeffekt" hinzugefügt, der die Aktualisierung der Gewichte glättet. + +.. math:: + v_t = \beta v_{t-1} + (1-\beta) \nabla L(w) + +* **v_t**: Beschleunigung in Richtung des Minimums +* **\beta**: Momentum-Faktor (meist um 0.9) + +Adaptiven Lernraten-Methoden +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Adagrad:** + +* Passt die Lernrate individuell für jede Modellparameter-Aktualisierung an. +* **Vorteil:** Funktioniert gut für spärliche Daten. +* **Nachteil:** Lernrate kann zu stark abfallen. + +**RMSprop:** + +* Eine Erweiterung von Adagrad mit **gleitendem Durchschnitt der Gradienten**. +* Funktioniert besonders gut für **tiefe neuronale Netze**. + +**Adam-Optimizer (Adaptive Moment Estimation):** + +* Kombiniert die Vorteile von Momentum und RMSprop, d.h. passt eigenständig die Lernrate individuell für jede Modellparameter-Aktualisierung an, ohne dass die Lernrate zu stark abfällt. +* **Vorteil:** Stabile und schnelle Konvergenz, besonders in Deep Learning. +* **Nachteil:** Kann für einige Probleme eine zu hohe Variabilität aufweisen. + + +Hyperparameter-Tuning – Die richtige Balance finden +------------------------------------------------------ + +Neben der Optimierung der Modellparameter selbst müssen wir oft **Hyperparameter optimieren** (z. B. die Lernrate \( \alpha \)). Dazu gibt es verschiedene Methoden: + +**Grid Search:** + +* Testet systematisch alle möglichen Kombinationen von Hyperparametern. +* **Nachteil:** Sehr rechenintensiv. + +**Random Search:** + +* Wählt zufällige Kombinationen von Hyperparametern aus. +* **Vorteil:** Spart Rechenzeit, oft ähnlich gute Ergebnisse wie Grid Search. + +**Bayesian Optimization:** + +* Verwendet probabilistische Modelle zur effizienten Auswahl von Hyperparametern. +* **Vorteil:** Schneller als Grid Search bei komplexen Modellen. + + diff --git a/docs/2deep_ml_ops/neural-net.rst b/docs/2deep_ml_ops/neural-net.rst index 8f35807..609d28c 100644 --- a/docs/2deep_ml_ops/neural-net.rst +++ b/docs/2deep_ml_ops/neural-net.rst @@ -1,17 +1,52 @@ Neuronale Netze und Deep Learning – Theorie ----------------------------------------------------------- +============================================ -**Grundlagen:** +Grundlagen: +---------------------------------------------------------- Was sind künstliche neuronale Netze? Wie unterscheiden sie sich von klassischen ML-Modellen? -- Künstliche neuronale Netze bestehen aus **Schichten von Neuronen**, die durch gewichtete Verbindungen miteinander verbunden sind. +* Künstliche neuronale Netze bestehen aus **Schichten von Neuronen**, die durch gewichtete Verbindungen miteinander verbunden sind. +* Aufbau eines neuronalen Netzes: **Eingabeschicht, versteckte Schichten, Aktivierungsfunktionen, Ausgangsschicht.** +* Jedes Neuron führt eine Berechnung basierend auf einer **Aktivierungsfunktion** durch und gibt das Ergebnis an die nächste Schicht weiter. + + +.. figure:: ../_static/images/day2-deepLearn.png + :alt: Illustration von Deep Neural Networks + :align: center + :width: 700px + + **Abbildung 1:** Deep Neural Networks, source: `Lamarr-Institute `_, https://lamarr-institute.org/wp-content/uploads/deepLearn_2_EN.png + + +Wichtige Aktivierungsfunktionen: +:::::::::::::::::::::::::::::::: + +* **ReLU (Rectified Linear Unit):** + +Häufig in CNNs verwendet, eliminiert negative Werte. -- Aufbau eines neuronalen Netzes: **Eingabeschicht, versteckte Schichten, Aktivierungsfunktionen, Ausgangsschicht.** +* **Sigmoid:** -- Jedes Neuron führt eine Berechnung basierend auf einer **Aktivierungsfunktion** durch und gibt das Ergebnis an die nächste Schicht weiter. +Wandelt Werte in einen Bereich zwischen 0 und 1 um, nützlich für Wahrscheinlichkeitsprognosen. -**Forwardpropagation (Vorwärtsdurchlauf):** +* **Softmax:** + +Wird in Klassifikationsproblemen für mehr als zwei Klassen genutzt. + + +Fortgeschrittene Deep-Learning-Techniken: +:::::::::::::::::::::::::::::::::::::::::: + +* Convolutional Neural Networks (CNNs) für **Bildverarbeitung**. + +* Recurrent Neural Networks (RNNs) für **Sequenz- und Textverarbeitung**. + +* Transformer-Modelle für **NLP (z. B. BERT, GPT).** + + +Forwardpropagation (Vorwärtsdurchlauf): +---------------------------------------------------------- 1. Die Eingabedaten werden in das Netzwerk eingespeist. @@ -27,83 +62,77 @@ Was sind künstliche neuronale Netze? Wie unterscheiden sie sich von klassischen 5. Am Ende der Forward Propagation wird die Loss Function berechnet. -**Loss Functions (Verlustfunktionen) und ihre Rolle:** +Loss Functions (Verlustfunktionen) und ihre Rolle: +---------------------------------------------------------- -- Eine **Loss Function** misst die Differenz zwischen der Vorhersage des Modells und dem tatsächlichen Wert. +Eine **Loss Function** -- Sie gibt an, wie gut oder schlecht das Modell arbeitet. +* misst die Differenz zwischen der Vorhersage des Modells und dem tatsächlichen Wert. +* gibt an, wie gut oder schlecht das Modell arbeitet. +* wird während der Backpropagation genutzt, um die Gewichte des Netzwerks zu aktualisieren. -- Wird während der Backpropagation genutzt, um die Gewichte des Netzwerks zu aktualisieren. +Typische Loss Functions: +::::::::::::::::::::::::: -**Typische Loss Functions:** +Mean Squared Error (MSE) +~~~~~~~~~~~~~~~~~~~~~~~~ -1. **Mean Squared Error (MSE)** – Wird für **Regressionsprobleme** verwendet: +Wird für **Regressionsprobleme** verwendet: .. math:: MSE = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 - - Bestraft größere Fehler überproportional. +* Bestraft größere Fehler überproportional. + +* Gut für kontinuierliche Werte wie Preisprognosen. - - Gut für kontinuierliche Werte wie Preisprognosen. +Cross-Entropy Loss +~~~~~~~~~~~~~~~~~~~~~~ -2. **Cross-Entropy Loss** – Wird für **Klassifikationsprobleme** verwendet: +Wird für **Klassifikationsprobleme** verwendet: .. math:: L = -\sum y_i \log(\hat{y}_i) - - Erhöht die Strafe, wenn das Modell sehr sicher, aber falsch ist. +* Erhöht die Strafe, wenn das Modell sehr sicher, aber falsch ist. - - Wird z. B. bei **Softmax-Klassifikationen** genutzt. +* Wird z. B. bei **Softmax-Klassifikationen** genutzt. -**Zusammenhang zwischen Loss Function und Gradient Descent:** +Zusammenhang zwischen Loss Function und Gradient Descent: +---------------------------------------------------------- -- Gradient Descent ist der Algorithmus, der die Gewichte des Modells so anpasst, dass die Loss Function minimiert wird. +* Gradient Descent ist der Algorithmus, der die Gewichte des Modells so anpasst, dass die Loss Function minimiert wird. -- Die Ableitung der Loss Function bestimmt die Richtung, in die die Gewichte aktualisiert werden. +* Die Ableitung der Loss Function bestimmt die Richtung, in die die Gewichte aktualisiert werden. -- **Formel für das Gewicht-Update:** +Formel für das Gewicht-Update: +::::::::::::::::::::::::::::::: + +Das Wichtigste an einem Modell sind die **Gewichte (weights)**. +Diese werden während der **Backwardpropagation (Rückwärtsdurchlauf)**-Phase aktualisiert, +indem man das Produkt der Learning-Rate (\alpha) und der Ableitung der Loss-Funktion +von den aktuellen Gewichten subtrahiert: .. math:: w := w - \alpha \frac{\partial L}{\partial w} - wobei \( \alpha \) die Lernrate ist. - -- Dies passiert während der **Backwardpropagation (Rückwärtsdurchlauf):** -**Backwardpropagation (Rückwärtsdurchlauf):** -1. Der Fehler des Netzwerks wird berechnet, indem die Differenz zwischen der vorhergesagten und der tatsächlichen Ausgabe bestimmt wird, d.h. indem die Loss Function evaluiert wird. +Backwardpropagation (Rückwärtsdurchlauf): +---------------------------------------------------------- -2. Die Fehler werden von der letzten Schicht zurück durch das Netzwerk propagiert, um **die Gewichte der Neuronen zu aktualisieren**. +* Nachdem in der Forwardpropagation die Input-Daten durch das Neural Network propagiert sind, werden die Ausgaben des Networks mit den gewünschten Ausgaben verglichen. +* Deren Differenz wird als der Fehler des Netzwerks in diesem Durchgang erachtet, d.h. Loss. +* Dieser Fehler wird dann in der `Backwardpropagation `_ über die letzten Schicht (Ausgabeschicht) zurück zur Eingabeschicht durch das Netzwerk propagiert, um **die Gewichte der Neuronen zu aktualisieren**. -3. Die Berechnung erfolgt mit Hilfe der **Kettenregel der Ableitungen**, um die Gradienten für jedes Gewicht zu bestimmen: +* Die Berechnung erfolgt mit Hilfe der **Kettenregel der Ableitungen**, um die Gradienten für jedes Gewicht zu bestimmen: .. .. math:: .. rac{\partial L}{\partial w} = rac{\partial L}{\partial y} \cdot rac{\partial y}{\partial z} \cdot rac{\partial z}{\partial w} -4. Durch die Anwendung des **Gradientenabstiegsverfahrens (Gradient Descent)** werden die Gewichte so angepasst, dass der Gesamtfehler des Netzwerks iterativ minimiert und somit das Modell optimiert wird. - -**Optimierungstechniken:** - -- **Stochastischer Gradientenabstieg (SGD):** Berechnet Gradienten basierend auf einer zufälligen Stichprobe aus den Trainingsdaten. - -- **Adam-Optimizer:** Eine erweiterte Form des SGD, die adaptives Lernen ermöglicht und schneller konvergiert. - -- **Momentum-Methoden:** Nutzen vergangene Gradienteninformationen, um stabilere Updates durchzuführen. - -**Wichtige Aktivierungsfunktionen:** - -- **ReLU (Rectified Linear Unit):** Häufig in CNNs verwendet, eliminiert negative Werte. - -- **Sigmoid:** Wandelt Werte in einen Bereich zwischen 0 und 1 um, nützlich für Wahrscheinlichkeitsprognosen. - -- **Softmax:** Wird in Klassifikationsproblemen für mehr als zwei Klassen genutzt. - - -**Fortgeschrittene Deep-Learning-Techniken:** - -- Convolutional Neural Networks (CNNs) für **Bildverarbeitung**. +* In jeder Epoche passt das Modell diese Parameter an und verringert so den Verlust, indem es dem Fehlergradienten folgt. +`Backpropagation `_ verwendet häufig Optimierungsalgorithmen wie Gradientenabstieg (Gradient Descent) oder stochastischer Gradientenabstieg (stochastic Gradient Descent). +* Der Algorithmus berechnet den Gradienten mit Hilfe der Kettenregel aus der Infinitesimalrechnung und kann so effektiv durch komplexe Schichten im neuronalen Netz navigieren, um die Kostenfunktion zu minimieren. -- Recurrent Neural Networks (RNNs) für **Sequenz- und Textverarbeitung**. +* Somit werden während der Backpropagation-Phase durch die Anwendung von z.B. **Gradientenabstiegsverfahrens (Gradient Descent)** die Gewichte so angepasst, dass der Gesamtfehler des Netzwerks iterativ minimiert und somit das Modell optimiert wird. -- Transformer-Modelle für **NLP (z. B. BERT, GPT).** diff --git a/docs/4gen_ai/cusy_genai.ipynb b/docs/4gen_ai/cusy_genai.ipynb deleted file mode 100644 index c55a287..0000000 --- a/docs/4gen_ai/cusy_genai.ipynb +++ /dev/null @@ -1,10 +0,0 @@ -{ - "cells": [], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/_static/images/day2-deepLearn.png b/docs/_static/images/day2-deepLearn.png new file mode 100644 index 0000000..9b530c0 Binary files /dev/null and b/docs/_static/images/day2-deepLearn.png differ diff --git a/docs/_static/images/day2-learning_curve.png b/docs/_static/images/day2-learning_curve.png new file mode 100644 index 0000000..54a257f Binary files /dev/null and b/docs/_static/images/day2-learning_curve.png differ diff --git a/docs/_static/images/day2-learning_rate_effect.png b/docs/_static/images/day2-learning_rate_effect.png new file mode 100644 index 0000000..e031476 Binary files /dev/null and b/docs/_static/images/day2-learning_rate_effect.png differ diff --git a/docs/_static/images/day2-model_complexity-bias_and_variance.png b/docs/_static/images/day2-model_complexity-bias_and_variance.png new file mode 100644 index 0000000..b9c9b45 Binary files /dev/null and b/docs/_static/images/day2-model_complexity-bias_and_variance.png differ diff --git a/docs/_static/images/day2-overfitting.png b/docs/_static/images/day2-overfitting.png new file mode 100644 index 0000000..66850b5 Binary files /dev/null and b/docs/_static/images/day2-overfitting.png differ