diff --git a/notes/Notizen_CAS_PML_1.md b/Einfuehrung/notizen/L1_Notizen.md similarity index 100% rename from notes/Notizen_CAS_PML_1.md rename to Einfuehrung/notizen/L1_Notizen.md diff --git a/Einfuehrung/unterlagen/01_ML_Overview_v05.pdf b/Einfuehrung/unterlagen/01_ML_Overview_v05.pdf new file mode 100644 index 0000000..36e77b0 Binary files /dev/null and b/Einfuehrung/unterlagen/01_ML_Overview_v05.pdf differ diff --git a/Einfuehrung/unterlagen/02_Python_v06.pdf b/Einfuehrung/unterlagen/02_Python_v06.pdf new file mode 100644 index 0000000..3b10a63 Binary files /dev/null and b/Einfuehrung/unterlagen/02_Python_v06.pdf differ diff --git a/Einfuehrung/unterlagen/03_Python_ML_Intro_project_v04.pdf b/Einfuehrung/unterlagen/03_Python_ML_Intro_project_v04.pdf new file mode 100644 index 0000000..9e16b12 Binary files /dev/null and b/Einfuehrung/unterlagen/03_Python_ML_Intro_project_v04.pdf differ diff --git a/Einfuehrung/unterlagen/03_decisiontree.ipynb b/Einfuehrung/unterlagen/03_decisiontree.ipynb new file mode 100644 index 0000000..827a42f --- /dev/null +++ b/Einfuehrung/unterlagen/03_decisiontree.ipynb @@ -0,0 +1,417 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# data prep" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from sklearn import datasets\n", + "iris = datasets.load_iris()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# data understanding" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "600\n", + "150\n" + ] + } + ], + "source": [ + "print(iris.data.size)\n", + "print(iris.target.size)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 5.1 3.5 1.4 0.2]\n", + " [ 4.9 3. 1.4 0.2]\n", + " [ 4.7 3.2 1.3 0.2]\n", + " [ 4.6 3.1 1.5 0.2]\n", + " [ 5. 3.6 1.4 0.2]\n", + " [ 5.4 3.9 1.7 0.4]\n", + " [ 4.6 3.4 1.4 0.3]\n", + " [ 5. 3.4 1.5 0.2]\n", + " [ 4.4 2.9 1.4 0.2]\n", + " [ 4.9 3.1 1.5 0.1]\n", + " [ 5.4 3.7 1.5 0.2]\n", + " [ 4.8 3.4 1.6 0.2]\n", + " [ 4.8 3. 1.4 0.1]\n", + " [ 4.3 3. 1.1 0.1]\n", + " [ 5.8 4. 1.2 0.2]\n", + " [ 5.7 4.4 1.5 0.4]\n", + " [ 5.4 3.9 1.3 0.4]\n", + " [ 5.1 3.5 1.4 0.3]\n", + " [ 5.7 3.8 1.7 0.3]\n", + " [ 5.1 3.8 1.5 0.3]\n", + " [ 5.4 3.4 1.7 0.2]\n", + " [ 5.1 3.7 1.5 0.4]\n", + " [ 4.6 3.6 1. 0.2]\n", + " [ 5.1 3.3 1.7 0.5]\n", + " [ 4.8 3.4 1.9 0.2]\n", + " [ 5. 3. 1.6 0.2]\n", + " [ 5. 3.4 1.6 0.4]\n", + " [ 5.2 3.5 1.5 0.2]\n", + " [ 5.2 3.4 1.4 0.2]\n", + " [ 4.7 3.2 1.6 0.2]\n", + " [ 4.8 3.1 1.6 0.2]\n", + " [ 5.4 3.4 1.5 0.4]\n", + " [ 5.2 4.1 1.5 0.1]\n", + " [ 5.5 4.2 1.4 0.2]\n", + " [ 4.9 3.1 1.5 0.1]\n", + " [ 5. 3.2 1.2 0.2]\n", + " [ 5.5 3.5 1.3 0.2]\n", + " [ 4.9 3.1 1.5 0.1]\n", + " [ 4.4 3. 1.3 0.2]\n", + " [ 5.1 3.4 1.5 0.2]\n", + " [ 5. 3.5 1.3 0.3]\n", + " [ 4.5 2.3 1.3 0.3]\n", + " [ 4.4 3.2 1.3 0.2]\n", + " [ 5. 3.5 1.6 0.6]\n", + " [ 5.1 3.8 1.9 0.4]\n", + " [ 4.8 3. 1.4 0.3]\n", + " [ 5.1 3.8 1.6 0.2]\n", + " [ 4.6 3.2 1.4 0.2]\n", + " [ 5.3 3.7 1.5 0.2]\n", + " [ 5. 3.3 1.4 0.2]\n", + " [ 7. 3.2 4.7 1.4]\n", + " [ 6.4 3.2 4.5 1.5]\n", + " [ 6.9 3.1 4.9 1.5]\n", + " [ 5.5 2.3 4. 1.3]\n", + " [ 6.5 2.8 4.6 1.5]\n", + " [ 5.7 2.8 4.5 1.3]\n", + " [ 6.3 3.3 4.7 1.6]\n", + " [ 4.9 2.4 3.3 1. ]\n", + " [ 6.6 2.9 4.6 1.3]\n", + " [ 5.2 2.7 3.9 1.4]\n", + " [ 5. 2. 3.5 1. ]\n", + " [ 5.9 3. 4.2 1.5]\n", + " [ 6. 2.2 4. 1. ]\n", + " [ 6.1 2.9 4.7 1.4]\n", + " [ 5.6 2.9 3.6 1.3]\n", + " [ 6.7 3.1 4.4 1.4]\n", + " [ 5.6 3. 4.5 1.5]\n", + " [ 5.8 2.7 4.1 1. ]\n", + " [ 6.2 2.2 4.5 1.5]\n", + " [ 5.6 2.5 3.9 1.1]\n", + " [ 5.9 3.2 4.8 1.8]\n", + " [ 6.1 2.8 4. 1.3]\n", + " [ 6.3 2.5 4.9 1.5]\n", + " [ 6.1 2.8 4.7 1.2]\n", + " [ 6.4 2.9 4.3 1.3]\n", + " [ 6.6 3. 4.4 1.4]\n", + " [ 6.8 2.8 4.8 1.4]\n", + " [ 6.7 3. 5. 1.7]\n", + " [ 6. 2.9 4.5 1.5]\n", + " [ 5.7 2.6 3.5 1. ]\n", + " [ 5.5 2.4 3.8 1.1]\n", + " [ 5.5 2.4 3.7 1. ]\n", + " [ 5.8 2.7 3.9 1.2]\n", + " [ 6. 2.7 5.1 1.6]\n", + " [ 5.4 3. 4.5 1.5]\n", + " [ 6. 3.4 4.5 1.6]\n", + " [ 6.7 3.1 4.7 1.5]\n", + " [ 6.3 2.3 4.4 1.3]\n", + " [ 5.6 3. 4.1 1.3]\n", + " [ 5.5 2.5 4. 1.3]\n", + " [ 5.5 2.6 4.4 1.2]\n", + " [ 6.1 3. 4.6 1.4]\n", + " [ 5.8 2.6 4. 1.2]\n", + " [ 5. 2.3 3.3 1. ]\n", + " [ 5.6 2.7 4.2 1.3]\n", + " [ 5.7 3. 4.2 1.2]\n", + " [ 5.7 2.9 4.2 1.3]\n", + " [ 6.2 2.9 4.3 1.3]\n", + " [ 5.1 2.5 3. 1.1]\n", + " [ 5.7 2.8 4.1 1.3]\n", + " [ 6.3 3.3 6. 2.5]\n", + " [ 5.8 2.7 5.1 1.9]\n", + " [ 7.1 3. 5.9 2.1]\n", + " [ 6.3 2.9 5.6 1.8]\n", + " [ 6.5 3. 5.8 2.2]\n", + " [ 7.6 3. 6.6 2.1]\n", + " [ 4.9 2.5 4.5 1.7]\n", + " [ 7.3 2.9 6.3 1.8]\n", + " [ 6.7 2.5 5.8 1.8]\n", + " [ 7.2 3.6 6.1 2.5]\n", + " [ 6.5 3.2 5.1 2. ]\n", + " [ 6.4 2.7 5.3 1.9]\n", + " [ 6.8 3. 5.5 2.1]\n", + " [ 5.7 2.5 5. 2. ]\n", + " [ 5.8 2.8 5.1 2.4]\n", + " [ 6.4 3.2 5.3 2.3]\n", + " [ 6.5 3. 5.5 1.8]\n", + " [ 7.7 3.8 6.7 2.2]\n", + " [ 7.7 2.6 6.9 2.3]\n", + " [ 6. 2.2 5. 1.5]\n", + " [ 6.9 3.2 5.7 2.3]\n", + " [ 5.6 2.8 4.9 2. ]\n", + " [ 7.7 2.8 6.7 2. ]\n", + " [ 6.3 2.7 4.9 1.8]\n", + " [ 6.7 3.3 5.7 2.1]\n", + " [ 7.2 3.2 6. 1.8]\n", + " [ 6.2 2.8 4.8 1.8]\n", + " [ 6.1 3. 4.9 1.8]\n", + " [ 6.4 2.8 5.6 2.1]\n", + " [ 7.2 3. 5.8 1.6]\n", + " [ 7.4 2.8 6.1 1.9]\n", + " [ 7.9 3.8 6.4 2. ]\n", + " [ 6.4 2.8 5.6 2.2]\n", + " [ 6.3 2.8 5.1 1.5]\n", + " [ 6.1 2.6 5.6 1.4]\n", + " [ 7.7 3. 6.1 2.3]\n", + " [ 6.3 3.4 5.6 2.4]\n", + " [ 6.4 3.1 5.5 1.8]\n", + " [ 6. 3. 4.8 1.8]\n", + " [ 6.9 3.1 5.4 2.1]\n", + " [ 6.7 3.1 5.6 2.4]\n", + " [ 6.9 3.1 5.1 2.3]\n", + " [ 5.8 2.7 5.1 1.9]\n", + " [ 6.8 3.2 5.9 2.3]\n", + " [ 6.7 3.3 5.7 2.5]\n", + " [ 6.7 3. 5.2 2.3]\n", + " [ 6.3 2.5 5. 1.9]\n", + " [ 6.5 3. 5.2 2. ]\n", + " [ 6.2 3.4 5.4 2.3]\n", + " [ 5.9 3. 5.1 1.8]]\n" + ] + } + ], + "source": [ + "print(iris.data)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2\n", + " 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " 2 2]\n" + ] + } + ], + "source": [ + "print(iris.target)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']\n", + "['setosa' 'versicolor' 'virginica']\n" + ] + } + ], + "source": [ + "print(iris.feature_names)\n", + "print(iris.target_names)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.hist(iris.target, bins=(0,1,2,3), edgecolor='black')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "X = iris.data[:, :2] # we only take the first two features.\n", + "y = iris.target\n", + "plt.figure(2, figsize=(8, 6))\n", + "plt.clf()\n", + "plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Set1, edgecolor='k')\n", + "plt.xlabel('Sepal length')\n", + "plt.ylabel('Sepal width')\n", + "plt.xticks(())\n", + "plt.yticks(())\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# train model" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,\n", + " max_features=None, max_leaf_nodes=None,\n", + " min_impurity_decrease=0.0, min_impurity_split=None,\n", + " min_samples_leaf=1, min_samples_split=2,\n", + " min_weight_fraction_leaf=0.0, presort=False, random_state=None,\n", + " splitter='best')" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.tree import DecisionTreeClassifier\n", + "classifier = DecisionTreeClassifier()\n", + "classifier.fit(iris.data[:-1], iris.target[:-1]) # use all but the last sample for training" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# use model for prediction" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "predicted [2] vs. real [2]\n" + ] + } + ], + "source": [ + "print(\"predicted\",classifier.predict(iris.data[-1:]),\"vs. real\",iris.target[-1:])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# export model for visual inspection" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from sklearn import tree\n", + "tree.export_graphviz(classifier,out_file='tree.dot', \n", + " feature_names=iris.feature_names, \n", + " class_names=iris.target_names, \n", + " filled=True, rounded=True, \n", + " special_characters=True) " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.7.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Einfuehrung/unterlagen/03_tree.png b/Einfuehrung/unterlagen/03_tree.png new file mode 100644 index 0000000..b11005f Binary files /dev/null and b/Einfuehrung/unterlagen/03_tree.png differ diff --git a/Einfuehrung/unterlagen/04_Evaluation_v08.pdf b/Einfuehrung/unterlagen/04_Evaluation_v08.pdf new file mode 100644 index 0000000..5c77de6 Binary files /dev/null and b/Einfuehrung/unterlagen/04_Evaluation_v08.pdf differ diff --git a/Einfuehrung/unterlagen/05_UnsupervisedLearning_v01.pdf b/Einfuehrung/unterlagen/05_UnsupervisedLearning_v01.pdf new file mode 100644 index 0000000..e43479d Binary files /dev/null and b/Einfuehrung/unterlagen/05_UnsupervisedLearning_v01.pdf differ diff --git a/Einfuehrung/unterlagen/06_KMeans_project_v02.pdf b/Einfuehrung/unterlagen/06_KMeans_project_v02.pdf new file mode 100644 index 0000000..e4c75da Binary files /dev/null and b/Einfuehrung/unterlagen/06_KMeans_project_v02.pdf differ diff --git a/Einfuehrung/unterlagen/06_Kmeans_Digits.ipynb b/Einfuehrung/unterlagen/06_Kmeans_Digits.ipynb new file mode 100644 index 0000000..b2fc5e5 --- /dev/null +++ b/Einfuehrung/unterlagen/06_Kmeans_Digits.ipynb @@ -0,0 +1,479 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(1797, 64)\n", + "10\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "from sklearn import datasets\n", + "digits = datasets.load_digits()\n", + "print(digits.data.shape)\n", + "print(len(np.unique(digits.target)))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ 0. 0. 5. 13. 9. 1. 0. 0. 0. 0. 13. 15. 10. 15. 5. 0. 0. 3.\n", + " 15. 2. 0. 11. 8. 0. 0. 4. 12. 0. 0. 8. 8. 0. 0. 5. 8. 0.\n", + " 0. 9. 8. 0. 0. 4. 11. 0. 1. 12. 7. 0. 0. 2. 14. 5. 10. 12.\n", + " 0. 0. 0. 0. 6. 13. 10. 0. 0. 0.]\n" + ] + }, + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n" + ] + }, + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n" + ] + }, + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2\n" + ] + }, + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3\n" + ] + }, + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4\n" + ] + }, + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5\n" + ] + }, + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6\n" + ] + }, + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "7\n" + ] + }, + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8\n" + ] + }, + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "9\n" + ] + } + ], + "source": [ + "import matplotlib.pyplot as plt \n", + "\n", + "print(digits.data[0])\n", + "\n", + "for i in range(0,10):\n", + " plt.gray() \n", + " plt.matshow(digits.images[i]) \n", + " plt.show() \n", + "\n", + " print(digits.target[i])" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.cluster import KMeans\n", + "from sklearn import metrics" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "KMeans(algorithm='auto', copy_x=True, init='random', max_iter=300,\n", + " n_clusters=10, n_init=1, n_jobs=None, precompute_distances='auto',\n", + " random_state=None, tol=0.0001, verbose=0)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "kmeans = KMeans(n_clusters=10, init='random', n_init=1)\n", + "kmeans.fit(digits.data)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.14635503617139678\n", + "0.7117994427381035\n", + "0.7404373985051501\n", + "0.6093357932301648\n", + "0.1853690111150615\n" + ] + } + ], + "source": [ + "print(metrics.accuracy_score(digits.target, kmeans.labels_))\n", + "print(metrics.homogeneity_score(digits.target, kmeans.labels_))\n", + "print(metrics.completeness_score(digits.target, kmeans.labels_))\n", + "print(metrics.adjusted_rand_score(digits.target, kmeans.labels_))\n", + "print(metrics.silhouette_score(digits.data, kmeans.labels_))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,\n", + " n_clusters=10, n_init=10, n_jobs=None, precompute_distances='auto',\n", + " random_state=None, tol=0.0001, verbose=0)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "kmeans2 = KMeans(n_clusters=10)\n", + "kmeans2.fit(digits.data)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.1686143572621035\n", + "0.7399357778524577\n", + "0.7482872629927889\n", + "0.6705937130774368\n", + "0.1823418956707715\n" + ] + } + ], + "source": [ + "print(metrics.accuracy_score(digits.target, kmeans2.labels_))\n", + "print(metrics.homogeneity_score(digits.target, kmeans2.labels_))\n", + "print(metrics.completeness_score(digits.target, kmeans2.labels_))\n", + "print(metrics.adjusted_rand_score(digits.target, kmeans2.labels_))\n", + "print(metrics.silhouette_score(digits.data, kmeans2.labels_))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[(0, 6), (1, 8), (2, 8), (3, 0), (4, 7), (5, 0), (6, 4), (7, 3), (8, 0), (9, 0), (0, 6), (1, 1), (2, 9), (3, 0), (4, 7), (5, 2), (6, 4), (7, 3), (8, 8), (9, 0), (0, 6), (1, 1), (2, 9), (3, 0), (4, 7), (5, 2), (6, 4), (7, 3), (8, 8), (9, 0), (0, 6), (9, 0), (5, 5), (5, 2), (6, 4), (5, 2), (0, 6), (9, 0), (8, 2), (9, 0), (8, 8), (4, 7), (1, 1), (7, 3), (7, 3), (3, 0), (5, 2), (1, 1), (0, 6), (0, 6), (2, 8), (2, 8), (7, 3), (8, 8), (2, 3), (0, 6), (1, 1), (2, 8), (6, 4), (3, 0), (3, 0), (7, 3), (3, 0), (3, 0), (4, 7), (6, 4), (6, 4), (6, 4), (4, 7), (9, 8), (1, 1), (5, 5), (0, 6), (9, 0), (5, 5), (2, 1), (8, 8), (2, 1), (0, 6), (0, 6), (1, 1), (7, 3), (6, 4), (3, 0), (2, 9), (1, 1), (7, 3), (4, 7), (6, 4), (3, 0), (1, 1), (3, 0), (9, 0), (1, 8), (7, 3), (6, 8), (8, 8), (4, 7), (3, 0), (1, 8), (4, 7), (0, 6), (5, 5), (3, 2), (6, 4), (9, 0), (6, 4), (1, 1), (7, 3), (5, 2), (4, 7), (4, 7), (7, 3), (2, 9), (8, 8), (2, 8), (2, 8), (5, 2), (7, 3), (9, 0), (5, 5), (4, 7), (8, 8), (8, 8), (4, 7), (9, 0), (0, 6), (8, 8), (9, 0), (8, 8), (0, 6), (1, 1), (2, 9), (3, 0), (4, 7), (5, 2), (6, 4), (7, 3), (8, 8), (9, 0), (0, 6), (1, 1), (2, 9), (3, 0), (4, 7), (5, 2), (6, 4), (7, 3), (8, 8), (9, 0), (0, 6), (1, 1), (2, 9), (3, 0), (4, 7), (5, 2), (6, 4), (7, 3), (8, 8), (9, 0), (0, 6), (9, 0), (5, 2), (5, 2), (6, 4), (5, 2), (0, 6), (9, 0), (8, 8), (9, 0), (8, 8), (4, 7), (1, 1), (7, 3), (7, 3), (3, 0), (5, 2), (1, 1), (0, 6), (0, 6), (2, 9), (2, 9), (7, 3), (8, 8), (2, 9), (0, 6), (1, 1), (2, 9), (6, 4), (3, 0), (3, 0), (7, 8), (3, 0), (3, 0), (4, 7), (6, 4), (6, 4), (6, 4), (4, 8), (9, 0), (1, 1), (5, 2), (0, 6), (9, 0), (5, 2), (2, 9), (8, 8), (2, 9), (0, 6), (0, 6), (1, 1), (7, 8), (6, 4), (3, 0), (2, 9), (1, 1), (7, 3), (3, 0), (1, 1), (3, 0), (9, 0), (1, 1), (7, 3), (6, 4), (8, 8), (4, 7), (3, 3), (1, 1), (4, 7), (0, 6), (5, 2), (3, 3), (6, 4), (9, 0), (6, 4), (1, 1), (7, 3), (5, 2), (4, 8), (4, 7), (7, 3), (2, 9), (8, 8), (2, 9), (2, 9), (5, 2), (5, 2), (4, 1), (8, 8), (8, 8), (4, 7), (9, 0), (0, 6), (8, 8), (9, 0), (8, 8), (0, 6), (1, 8), (2, 9), (3, 0), (4, 7), (5, 5), (6, 4), (7, 3), (8, 0), (9, 3), (0, 6), (1, 8), (2, 9), (3, 0), (4, 7), (5, 2), (6, 4), (7, 3), (8, 8), (9, 3), (0, 6), (1, 8), (2, 9), (3, 0), (4, 7), (5, 5), (6, 4), (7, 3), (8, 2), (9, 0), (0, 6), (9, 0), (5, 5), (5, 5), (6, 4), (5, 5), (0, 6), (9, 0), (8, 8), (9, 0), (8, 8), (4, 7), (1, 8), (7, 3), (7, 3), (3, 0), (5, 5), (1, 8), (0, 6), (0, 6), (2, 9), (2, 9), (7, 3), (8, 0), (2, 9), (0, 6), (1, 1), (2, 9), (6, 4), (3, 0), (3, 0), (7, 3), (3, 0), (3, 0), (4, 7), (6, 4), (6, 4), (6, 4), (4, 7), (9, 3), (1, 8), (5, 5), (0, 6), (9, 3), (5, 5), (2, 9), (8, 0), (2, 9), (0, 6), (0, 6), (1, 8), (7, 3), (6, 4), (3, 0), (2, 9), (1, 8), (7, 3), (4, 7), (6, 4), (3, 0), (1, 8), (3, 0), (9, 3), (1, 8), (7, 3), (6, 4), (8, 8), (4, 7), (3, 9), (1, 8), (4, 7), (0, 6), (5, 5), (3, 0), (6, 4), (9, 3), (6, 4), (1, 8), (7, 3), (5, 5), (4, 7), (4, 7), (7, 3), (2, 9), (8, 0), (2, 9), (2, 9), (5, 5), (7, 3), (9, 1), (5, 2), (4, 7), (8, 0), (8, 0), (4, 7), (9, 1), (0, 6), (8, 8), (9, 3), (3, 0), (0, 6), (1, 1), (2, 9), (3, 0), (4, 7), (5, 5), (6, 4), (7, 3), (8, 0), (9, 0), (0, 6), (1, 1), (2, 9), (3, 0), (4, 7), (5, 2), (6, 4), (7, 3), (8, 8), (9, 0), (0, 6), (1, 1), (2, 9), (3, 0), (4, 7), (5, 5), (6, 4), (7, 3), (8, 6), (9, 0), (0, 6), (9, 0), (5, 5), (5, 5), (6, 4), (5, 0), (0, 6), (9, 0), (8, 0), (9, 0), (8, 0), (4, 7), (1, 1), (7, 3), (7, 3), (3, 0), (5, 5), (1, 1), (0, 6), (0, 6), (2, 9), (2, 9), (7, 3), (8, 0), (2, 9), (0, 6), (1, 9), (2, 9), (6, 4), (3, 0), (3, 0), (7, 3), (3, 0), (3, 0), (4, 7), (6, 4), (6, 4), (6, 4), (4, 7), (9, 0), (1, 1), (5, 5), (0, 6), (9, 0), (5, 5), (2, 9), (8, 0), (2, 9), (0, 6), (0, 6), (1, 1), (7, 3), (6, 4), (3, 0), (2, 9), (1, 1), (7, 3), (4, 1), (6, 4), (3, 0), (1, 1), (3, 0), (9, 0), (1, 1), (7, 3), (6, 4), (8, 0), (4, 7), (3, 0), (1, 1), (4, 7), (0, 6), (5, 5), (3, 0), (6, 4), (9, 0), (6, 8), (1, 1), (7, 3), (5, 5), (4, 1), (4, 7), (7, 3), (2, 9), (8, 0), (2, 9), (2, 8), (5, 2), (7, 3), (9, 0), (5, 5), (4, 7), (8, 8), (8, 8), (4, 7), (9, 0), (0, 6), (8, 0), (9, 0), (8, 0), (0, 6), (1, 9), (2, 9), (3, 0), (4, 7), (5, 5), (6, 4), (7, 8), (8, 8), (9, 0), (0, 6), (1, 9), (2, 9), (3, 0), (4, 3), (5, 5), (6, 4), (7, 3), (8, 8), (9, 0), (0, 6), (1, 9), (2, 9), (3, 0), (4, 7), (5, 5), (6, 4), (7, 3), (8, 8), (9, 0), (0, 6), (9, 8), (5, 5), (5, 5), (6, 4), (5, 5), (0, 6), (9, 0), (8, 8), (9, 0), (8, 8), (4, 7), (1, 9), (7, 3), (7, 3), (3, 0), (5, 5), (1, 4), (0, 6), (0, 6), (2, 9), (2, 9), (7, 3), (8, 4), (2, 9), (0, 6), (1, 9), (2, 9), (6, 4), (3, 0), (3, 0), (7, 3), (3, 0), (3, 0), (4, 7), (6, 4), (6, 4), (6, 4), (4, 7), (9, 0), (1, 4), (5, 5), (0, 6), (9, 0), (5, 5), (2, 9), (8, 8), (2, 9), (0, 6), (0, 6), (1, 9), (7, 3), (6, 4), (3, 0), (2, 9), (1, 9), (7, 3), (4, 7), (6, 4), (3, 0), (1, 9), (3, 0), (9, 0), (1, 9), (7, 3), (6, 4), (8, 8), (4, 7), (3, 0), (1, 8), (4, 7), (0, 6), (5, 5), (3, 0), (6, 4), (9, 0), (6, 4), (1, 9), (7, 3), (5, 5), (4, 7), (4, 7), (7, 3), (2, 9), (8, 8), (2, 9), (2, 9), (5, 5), (7, 3), (9, 0), (5, 5), (4, 3), (8, 1), (8, 8), (4, 3), (9, 0), (0, 6), (8, 8), (9, 0), (8, 8), (0, 6), (1, 8), (2, 9), (3, 0), (4, 7), (5, 5), (6, 4), (7, 3), (8, 0), (9, 1), (0, 6), (1, 8), (2, 9), (3, 0), (4, 7), (5, 2), (6, 4), (7, 3), (8, 8), (9, 1), (0, 6), (1, 8), (2, 9), (3, 0), (4, 1), (5, 2), (6, 4), (7, 3), (8, 0), (9, 1), (0, 6), (9, 1), (5, 7), (5, 2), (6, 4), (5, 2), (0, 6), (9, 1), (8, 8), (9, 1), (8, 8), (4, 7), (1, 8), (7, 3), (7, 3), (3, 0), (5, 2), (1, 8), (0, 6), (0, 6), (2, 9), (2, 9), (7, 3), (8, 8), (2, 8), (0, 6), (1, 8), (2, 0), (6, 4), (3, 0), (3, 0), (7, 3), (3, 0), (3, 0), (4, 7), (6, 4), (6, 4), (6, 4), (4, 7), (9, 1), (1, 8), (5, 5), (0, 6), (9, 1), (5, 5), (2, 9), (8, 0), (2, 9), (0, 6), (0, 6), (1, 8), (7, 3), (6, 4), (3, 0), (2, 9), (1, 8), (7, 3), (4, 7), (6, 4), (3, 0), (1, 8), (3, 0), (9, 1), (1, 8), (7, 3), (6, 4), (8, 8), (4, 7), (3, 0), (1, 8), (4, 3), (0, 6), (5, 5), (3, 0), (6, 4), (9, 1), (6, 4), (1, 8), (7, 3), (5, 2), (4, 7), (4, 3), (7, 3), (2, 9), (8, 8), (2, 9), (2, 9), (5, 2), (7, 3), (9, 1), (5, 2), (4, 7), (8, 0), (8, 8), (4, 3), (9, 1), (0, 6), (8, 8), (9, 1), (8, 8), (0, 6), (1, 8), (2, 9), (3, 5), (4, 7), (5, 2), (6, 4), (7, 3), (8, 4), (9, 0), (0, 6), (1, 8), (2, 9), (3, 0), (4, 7), (5, 2), (6, 6), (7, 3), (8, 1), (9, 0), (0, 6), (1, 8), (2, 9), (3, 0), (4, 7), (5, 2), (6, 4), (7, 3), (8, 8), (9, 0), (0, 6), (9, 0), (5, 2), (5, 2), (6, 4), (5, 2), (0, 6), (9, 0), (8, 0), (9, 0), (8, 0), (4, 7), (1, 8), (7, 3), (7, 3), (3, 0), (5, 2), (1, 8), (0, 6), (0, 6), (2, 9), (2, 9), (7, 3), (8, 1), (2, 9), (0, 6), (1, 9), (2, 9), (6, 4), (3, 0), (3, 0), (7, 3), (3, 0), (3, 0), (4, 7), (6, 4), (6, 4), (6, 4), (4, 7), (9, 0), (1, 8), (5, 2), (0, 6), (9, 0), (5, 2), (2, 9), (8, 8), (2, 9), (0, 6), (0, 6), (1, 8), (7, 3), (6, 4), (3, 0), (2, 3), (1, 8), (7, 3), (4, 7), (6, 4), (3, 0), (1, 8), (3, 0), (9, 0), (1, 8), (7, 3), (6, 4), (8, 9), (4, 7), (3, 0), (1, 8), (4, 7), (0, 6), (5, 2), (3, 0), (6, 4), (9, 0), (6, 4), (1, 8), (7, 3), (5, 2), (4, 7), (4, 7), (7, 3), (2, 9), (8, 1), (2, 3), (2, 9), (5, 2), (7, 3), (9, 0), (5, 2), (4, 7), (8, 1), (8, 0), (4, 7), (9, 0), (0, 6), (8, 8), (9, 0), (8, 8), (1, 9), (2, 9), (3, 0), (4, 7), (5, 5), (6, 4), (7, 3), (8, 0), (9, 0), (0, 6), (1, 9), (2, 9), (3, 0), (4, 7), (5, 5), (6, 4), (7, 3), (8, 0), (9, 0), (0, 6), (1, 9), (2, 9), (3, 0), (4, 7), (5, 0), (6, 4), (7, 3), (8, 0), (9, 0), (0, 6), (9, 0), (5, 5), (5, 5), (6, 4), (5, 5), (0, 6), (9, 0), (8, 0), (9, 0), (8, 0), (4, 7), (1, 9), (7, 3), (7, 3), (3, 0), (5, 0), (1, 9), (2, 9), (7, 3), (8, 0), (2, 9), (0, 6), (1, 9), (2, 9), (6, 4), (3, 0), (3, 0), (7, 3), (3, 0), (3, 0), (4, 7), (6, 4), (6, 4), (6, 4), (4, 7), (9, 0), (1, 9), (5, 5), (0, 6), (9, 0), (5, 5), (2, 9), (8, 0), (2, 9), (0, 6), (0, 6), (1, 9), (7, 3), (6, 4), (3, 0), (2, 9), (1, 9), (4, 7), (6, 4), (3, 0), (1, 9), (3, 0), (9, 0), (1, 9), (7, 3), (6, 4), (8, 0), (4, 7), (3, 0), (1, 9), (4, 7), (0, 6), (5, 5), (3, 0), (6, 4), (9, 0), (6, 4), (1, 9), (7, 3), (5, 5), (4, 7), (4, 7), (7, 3), (2, 9), (8, 0), (2, 9), (2, 9), (5, 0), (7, 3), (9, 0), (5, 5), (4, 7), (4, 7), (9, 0), (0, 6), (8, 0), (9, 0), (8, 0), (0, 6), (1, 8), (2, 9), (3, 0), (4, 7), (5, 2), (6, 4), (7, 3), (8, 3), (9, 0), (0, 6), (1, 8), (2, 9), (3, 0), (4, 7), (5, 5), (6, 4), (7, 3), (8, 8), (9, 0), (0, 6), (1, 8), (2, 9), (3, 0), (4, 7), (5, 5), (6, 4), (7, 3), (8, 0), (9, 0), (0, 6), (9, 0), (5, 5), (5, 2), (6, 4), (5, 2), (0, 6), (9, 0), (8, 9), (9, 5), (8, 8), (4, 7), (1, 8), (7, 3), (7, 3), (3, 0), (5, 5), (1, 8), (0, 6), (0, 6), (7, 3), (8, 8), (2, 9), (0, 6), (1, 8), (2, 9), (6, 4), (3, 0), (3, 0), (7, 3), (3, 0), (3, 0), (4, 7), (6, 4), (6, 4), (6, 4), (4, 3), (9, 0), (1, 8), (5, 5), (0, 6), (9, 2), (5, 2), (2, 9), (8, 0), (2, 0), (0, 6), (0, 6), (1, 8), (7, 3), (6, 4), (3, 0), (2, 9), (1, 8), (7, 3), (4, 7), (6, 4), (3, 0), (1, 8), (3, 3), (9, 0), (1, 8), (7, 3), (6, 4), (8, 8), (4, 7), (3, 0), (1, 8), (4, 7), (0, 6), (5, 5), (3, 0), (6, 4), (9, 0), (6, 4), (1, 8), (7, 3), (5, 5), (4, 7), (4, 7), (7, 3), (2, 9), (8, 8), (2, 9), (2, 9), (5, 2), (7, 3), (9, 0), (5, 5), (4, 7), (8, 9), (8, 0), (4, 7), (9, 0), (0, 6), (8, 8), (9, 0), (8, 8), (0, 6), (1, 1), (2, 9), (3, 0), (4, 7), (5, 5), (6, 4), (7, 3), (8, 0), (9, 0), (0, 6), (1, 1), (2, 9), (3, 0), (4, 7), (5, 5), (6, 4), (7, 3), (8, 8), (9, 0), (0, 6), (1, 8), (2, 9), (3, 0), (4, 7), (5, 2), (6, 4), (7, 3), (8, 8), (9, 0), (0, 6), (9, 0), (5, 5), (5, 2), (6, 4), (5, 2), (0, 6), (9, 0), (8, 2), (9, 0), (8, 2), (4, 7), (1, 8), (7, 3), (7, 3), (3, 2), (5, 5), (1, 8), (0, 6), (0, 6), (2, 9), (2, 9), (7, 3), (8, 2), (2, 9), (0, 6), (1, 8), (2, 9), (6, 4), (3, 0), (3, 0), (7, 3), (3, 0), (3, 0), (4, 7), (6, 4), (6, 4), (6, 4), (4, 7), (9, 0), (1, 8), (5, 2), (0, 6), (9, 0), (5, 5), (2, 9), (8, 2), (2, 9), (0, 6), (0, 6), (1, 8), (7, 3), (6, 4), (3, 0), (2, 9), (1, 8), (7, 3), (4, 7), (6, 4), (3, 0), (1, 8), (3, 0), (9, 0), (1, 8), (7, 3), (6, 4), (8, 8), (4, 7), (3, 0), (1, 8), (4, 7), (0, 6), (5, 2), (3, 0), (6, 4), (9, 0), (6, 4), (1, 2), (7, 3), (5, 2), (4, 7), (4, 7), (7, 3), (2, 9), (8, 9), (2, 9), (2, 9), (5, 2), (7, 3), (9, 0), (5, 2), (4, 7), (8, 8), (8, 8), (4, 7), (9, 0), (0, 6), (8, 8), (9, 0), (8, 8), (0, 6), (1, 1), (2, 9), (3, 0), (4, 7), (5, 5), (6, 4), (7, 3), (8, 8), (9, 0), (0, 6), (1, 8), (2, 9), (3, 0), (4, 7), (5, 5), (6, 4), (7, 3), (8, 8), (9, 0), (0, 6), (1, 1), (2, 9), (3, 0), (4, 7), (5, 5), (6, 4), (7, 3), (8, 8), (9, 0), (0, 6), (9, 0), (5, 5), (5, 5), (6, 4), (5, 5), (0, 6), (9, 0), (8, 8), (9, 0), (8, 8), (4, 7), (1, 8), (7, 3), (7, 3), (3, 0), (5, 5), (1, 8), (0, 6), (0, 6), (2, 0), (2, 0), (7, 3), (8, 8), (2, 0), (0, 6), (1, 1), (2, 0), (6, 4), (3, 0), (3, 0), (7, 3), (3, 0), (3, 0), (4, 7), (6, 4), (6, 4), (6, 4), (4, 7), (9, 0), (1, 8), (5, 5), (0, 6), (9, 0), (5, 4), (2, 9), (8, 8), (2, 0), (0, 6), (0, 6), (1, 1), (7, 3), (6, 4), (3, 0), (2, 9), (1, 8), (7, 3), (4, 7), (6, 4), (3, 0), (1, 8), (3, 0), (9, 0), (1, 8), (7, 3), (6, 4), (8, 8), (4, 7), (3, 0), (1, 8), (4, 7), (0, 6), (5, 2), (3, 0), (6, 4), (9, 0), (6, 4), (1, 8), (7, 3), (5, 2), (4, 7), (4, 7), (7, 3), (2, 0), (8, 8), (2, 9), (2, 9), (5, 5), (7, 3), (9, 0), (5, 5), (4, 7), (8, 8), (8, 8), (4, 7), (9, 0), (0, 6), (8, 8), (0, 6), (1, 1), (2, 9), (3, 0), (4, 7), (5, 5), (6, 4), (7, 3), (8, 0), (9, 0), (0, 6), (1, 1), (2, 9), (3, 0), (4, 7), (5, 5), (6, 4), (7, 3), (8, 0), (9, 0), (0, 6), (1, 1), (2, 9), (3, 0), (4, 7), (5, 5), (6, 4), (7, 3), (8, 0), (9, 0), (0, 6), (9, 0), (5, 5), (5, 5), (6, 4), (5, 5), (0, 6), (9, 0), (8, 0), (9, 0), (8, 0), (4, 7), (1, 1), (7, 3), (7, 3), (3, 0), (5, 5), (1, 1), (0, 6), (0, 6), (2, 9), (2, 9), (7, 3), (8, 1), (2, 9), (0, 6), (1, 1), (2, 9), (6, 4), (3, 0), (3, 0), (7, 3), (3, 0), (3, 0), (4, 7), (6, 4), (6, 4), (6, 4), (4, 7), (9, 0), (1, 1), (5, 5), (0, 6), (9, 0), (5, 5), (2, 9), (8, 0), (2, 9), (0, 6), (0, 6), (1, 1), (7, 3), (6, 4), (3, 0), (2, 9), (1, 1), (7, 3), (4, 7), (6, 4), (3, 0), (1, 1), (3, 0), (9, 0), (1, 1), (7, 3), (6, 4), (8, 0), (4, 7), (3, 0), (1, 1), (4, 7), (0, 6), (5, 5), (3, 0), (6, 4), (9, 0), (6, 4), (1, 1), (7, 3), (5, 5), (4, 7), (4, 7), (7, 3), (2, 9), (8, 5), (2, 9), (2, 9), (5, 5), (7, 3), (9, 0), (5, 5), (4, 7), (8, 3), (8, 3), (4, 7), (9, 0), (0, 6), (8, 3), (9, 0), (8, 3), (0, 6), (1, 8), (2, 9), (3, 0), (4, 7), (5, 2), (6, 1), (7, 8), (8, 8), (9, 1), (0, 6), (1, 8), (2, 0), (3, 0), (4, 7), (5, 2), (6, 4), (9, 1), (0, 6), (1, 8), (2, 9), (3, 0), (4, 7), (5, 2), (6, 4), (7, 8), (8, 2), (9, 1), (0, 7), (9, 1), (5, 2), (5, 2), (6, 4), (5, 2), (0, 6), (9, 2), (8, 3), (9, 2), (8, 8), (4, 7), (1, 8), (7, 3), (7, 8), (3, 8), (5, 2), (1, 8), (0, 6), (0, 6), (2, 6), (2, 9), (7, 8), (8, 8), (2, 0), (0, 6), (1, 8), (2, 9), (6, 4), (3, 8), (3, 3), (7, 3), (3, 3), (3, 8), (4, 7), (6, 4), (6, 4), (6, 4), (4, 8), (9, 1), (1, 8), (5, 2), (0, 6), (9, 0), (5, 5), (2, 0), (8, 8), (0, 6), (1, 8), (7, 3), (6, 4), (3, 0), (2, 9), (1, 8), (7, 8), (4, 8), (6, 4), (3, 0), (1, 8), (3, 0), (9, 3), (1, 8), (7, 3), (6, 4), (8, 8), (4, 7), (3, 0), (1, 8), (4, 7), (0, 6), (5, 2), (3, 0), (6, 4), (9, 0), (6, 4), (1, 8), (7, 3), (5, 2), (4, 7), (4, 7), (7, 3), (2, 9), (2, 0), (5, 2), (7, 3), (9, 0), (5, 2), (4, 2), (4, 7), (9, 2), (0, 6), (8, 8), (9, 2), (8, 3), (0, 6), (1, 8), (2, 9), (3, 0), (4, 1), (5, 5), (6, 4), (7, 3), (8, 0), (9, 0), (0, 6), (1, 8), (2, 9), (3, 8), (4, 7), (5, 5), (6, 4), (7, 3), (8, 8), (9, 0), (0, 6), (1, 8), (2, 9), (3, 8), (4, 7), (5, 5), (6, 4), (7, 3), (8, 8), (9, 0), (0, 6), (9, 0), (5, 5), (5, 5), (6, 4), (5, 5), (0, 6), (9, 0), (8, 0), (9, 0), (8, 8), (4, 7), (1, 8), (7, 3), (7, 3), (3, 3), (5, 5), (1, 8), (0, 6), (0, 6), (2, 9), (2, 9), (7, 3), (8, 8), (2, 9), (0, 6), (1, 8), (2, 9), (6, 4), (3, 8), (3, 8), (7, 3), (3, 5), (3, 8), (4, 7), (6, 4), (6, 4), (6, 4), (4, 7), (9, 0), (1, 8), (5, 5), (0, 6), (9, 0), (5, 5), (2, 9), (8, 8), (2, 9), (0, 6), (0, 6), (1, 8), (7, 3), (6, 4), (3, 0), (2, 9), (1, 8), (7, 3), (4, 7), (6, 4), (3, 0), (1, 8), (3, 0), (9, 0), (1, 8), (7, 3), (6, 4), (8, 8), (4, 7), (3, 5), (1, 8), (4, 7), (0, 6), (5, 5), (3, 0), (6, 4), (9, 0), (6, 4), (1, 8), (7, 3), (5, 5), (4, 7), (4, 7), (7, 3), (2, 9), (8, 8), (2, 9), (2, 9), (5, 5), (7, 3), (9, 0), (5, 5), (4, 7), (8, 8), (8, 8), (4, 7), (9, 0), (0, 6), (8, 8), (9, 0), (8, 0)]\n" + ] + } + ], + "source": [ + "print(list(zip(digits.target,kmeans.labels_)))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.7.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Einfuehrung/unterlagen/06_Kmeans_Iris.ipynb b/Einfuehrung/unterlagen/06_Kmeans_Iris.ipynb new file mode 100644 index 0000000..fd15671 --- /dev/null +++ b/Einfuehrung/unterlagen/06_Kmeans_Iris.ipynb @@ -0,0 +1,255 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn import datasets\n", + "iris = datasets.load_iris()\n", + "\n", + "from sklearn.cluster import KMeans\n", + "from sklearn import metrics" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", + " 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", + " 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2\n", + " 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", + " 2 2]\n" + ] + } + ], + "source": [ + "print(iris.target)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "KMeans(algorithm='auto', copy_x=True, init='random', max_iter=300,\n", + " n_clusters=3, n_init=1, n_jobs=None, precompute_distances='auto',\n", + " random_state=None, tol=0.0001, verbose=0)" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "kmeans = KMeans(n_clusters=3, init='random', n_init=1)\n", + "kmeans.fit(iris.data)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[(0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (1, 0), (1, 1), (1, 0), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 0), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (2, 0), (2, 1), (2, 0), (2, 0), (2, 0), (2, 0), (2, 1), (2, 0), (2, 0), (2, 0), (2, 0), (2, 0), (2, 0), (2, 1), (2, 1), (2, 0), (2, 0), (2, 0), (2, 0), (2, 1), (2, 0), (2, 1), (2, 0), (2, 1), (2, 0), (2, 0), (2, 1), (2, 1), (2, 0), (2, 0), (2, 0), (2, 0), (2, 0), (2, 1), (2, 0), (2, 0), (2, 0), (2, 0), (2, 1), (2, 0), (2, 0), (2, 0), (2, 1), (2, 0), (2, 0), (2, 0), (2, 1), (2, 0), (2, 0), (2, 1)]\n" + ] + } + ], + "source": [ + "print(list(zip(iris.target,kmeans.labels_)))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.7364192881252849\n", + "0.7474865805095326\n", + "0.7163421126838475\n", + "0.5511916046195915\n" + ] + } + ], + "source": [ + "print(metrics.homogeneity_score(iris.target, kmeans.labels_))\n", + "print(metrics.completeness_score(iris.target, kmeans.labels_))\n", + "print(metrics.adjusted_rand_score(iris.target, kmeans.labels_))\n", + "print(metrics.silhouette_score(iris.data, kmeans.labels_))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "KMeans(algorithm='auto', copy_x=True, init='random', max_iter=300,\n", + " n_clusters=3, n_init=10, n_jobs=None, precompute_distances='auto',\n", + " random_state=None, tol=0.0001, verbose=0)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "kmeans_init = KMeans(n_clusters=3, init='random', n_init=10)\n", + "kmeans_init.fit(iris.data)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[(0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (1, 0), (1, 1), (1, 0), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 0), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (2, 0), (2, 1), (2, 0), (2, 0), (2, 0), (2, 0), (2, 1), (2, 0), (2, 0), (2, 0), (2, 0), (2, 0), (2, 0), (2, 1), (2, 1), (2, 0), (2, 0), (2, 0), (2, 0), (2, 1), (2, 0), (2, 1), (2, 0), (2, 1), (2, 0), (2, 0), (2, 1), (2, 1), (2, 0), (2, 0), (2, 0), (2, 0), (2, 0), (2, 1), (2, 0), (2, 0), (2, 0), (2, 0), (2, 1), (2, 0), (2, 0), (2, 0), (2, 1), (2, 0), (2, 0), (2, 0), (2, 1), (2, 0), (2, 0), (2, 1)]\n" + ] + } + ], + "source": [ + "print(list(zip(iris.target,kmeans.labels_)))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.7514854021988338\n", + "0.7649861514489815\n", + "0.7302382722834697\n", + "0.5528190123564091\n" + ] + } + ], + "source": [ + "print(metrics.homogeneity_score(iris.target, kmeans_init.labels_))\n", + "print(metrics.completeness_score(iris.target, kmeans_init.labels_))\n", + "print(metrics.adjusted_rand_score(iris.target, kmeans_init.labels_))\n", + "print(metrics.silhouette_score(iris.data, kmeans_init.labels_))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,\n", + " n_clusters=3, n_init=10, n_jobs=None, precompute_distances='auto',\n", + " random_state=None, tol=0.0001, verbose=0)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "kmeans2 = KMeans(n_clusters=3)\n", + "kmeans2.fit(iris.data)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[(0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (0, 2), (1, 0), (1, 1), (1, 0), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 0), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (2, 0), (2, 1), (2, 0), (2, 0), (2, 0), (2, 0), (2, 1), (2, 0), (2, 0), (2, 0), (2, 0), (2, 0), (2, 0), (2, 1), (2, 1), (2, 0), (2, 0), (2, 0), (2, 0), (2, 1), (2, 0), (2, 1), (2, 0), (2, 1), (2, 0), (2, 0), (2, 1), (2, 1), (2, 0), (2, 0), (2, 0), (2, 0), (2, 0), (2, 1), (2, 0), (2, 0), (2, 0), (2, 0), (2, 1), (2, 0), (2, 0), (2, 0), (2, 1), (2, 0), (2, 0), (2, 0), (2, 1), (2, 0), (2, 0), (2, 1)]\n" + ] + } + ], + "source": [ + "print(list(zip(iris.target,kmeans.labels_)))" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.7514854021988338\n", + "0.7649861514489815\n", + "0.7302382722834697\n", + "0.5528190123564091\n" + ] + } + ], + "source": [ + "print(metrics.homogeneity_score(iris.target, kmeans2.labels_))\n", + "print(metrics.completeness_score(iris.target, kmeans2.labels_))\n", + "print(metrics.adjusted_rand_score(iris.target, kmeans2.labels_))\n", + "print(metrics.silhouette_score(iris.data, kmeans2.labels_))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.7.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Einfuehrung/unterlagen/07_SupervisedLearning_v02.pdf b/Einfuehrung/unterlagen/07_SupervisedLearning_v02.pdf new file mode 100644 index 0000000..77ce042 Binary files /dev/null and b/Einfuehrung/unterlagen/07_SupervisedLearning_v02.pdf differ diff --git a/Einfuehrung/unterlagen/08_NB_Digits.ipynb b/Einfuehrung/unterlagen/08_NB_Digits.ipynb new file mode 100644 index 0000000..cbfddb3 --- /dev/null +++ b/Einfuehrung/unterlagen/08_NB_Digits.ipynb @@ -0,0 +1,141 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(1797, 64)\n" + ] + } + ], + "source": [ + "from sklearn import datasets\n", + "digits = datasets.load_digits()\n", + "print(digits.data.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(1437, 64)\n", + "(1437,)\n" + ] + } + ], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.2, random_state=0)\n", + "print(X_train.shape)\n", + "print(y_train.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.82499999999999996" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.naive_bayes import GaussianNB\n", + "nb = GaussianNB()\n", + "nb.fit(X_train, y_train)\n", + "nb.score(X_test,y_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.85833333333333328" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.tree import DecisionTreeClassifier\n", + "dt = DecisionTreeClassifier()\n", + "dt.fit(X_train, y_train)\n", + "dt.score(X_test,y_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy 0.95 confidence interval: 0.81 (+/- 0.11)\n" + ] + } + ], + "source": [ + "from sklearn.naive_bayes import GaussianNB\n", + "from sklearn.model_selection import cross_val_score\n", + "nb2 = GaussianNB()\n", + "scores = cross_val_score(nb2, digits.data, digits.target, cv=10)\n", + "print(\"Accuracy 0.95 confidence interval: %0.2f (+/- %0.2f)\" % (scores.mean(), scores.std() * 2))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.7.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Einfuehrung/unterlagen/08_NB_Iris.ipynb b/Einfuehrung/unterlagen/08_NB_Iris.ipynb new file mode 100644 index 0000000..1e46423 --- /dev/null +++ b/Einfuehrung/unterlagen/08_NB_Iris.ipynb @@ -0,0 +1,141 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(150, 4)\n" + ] + } + ], + "source": [ + "from sklearn import datasets\n", + "iris = datasets.load_iris()\n", + "print(iris.data.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(120, 4)\n", + "(120,)\n" + ] + } + ], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=0)\n", + "print(X_train.shape)\n", + "print(y_train.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.96666666666666667" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.naive_bayes import GaussianNB\n", + "nb = GaussianNB()\n", + "nb.fit(X_train, y_train)\n", + "nb.score(X_test,y_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.0" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.tree import DecisionTreeClassifier\n", + "dt = DecisionTreeClassifier()\n", + "dt.fit(X_train, y_train)\n", + "dt.score(X_test,y_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy 0.95 confidence interval: 0.95 (+/- 0.09)\n" + ] + } + ], + "source": [ + "from sklearn.naive_bayes import GaussianNB\n", + "from sklearn.model_selection import cross_val_score\n", + "nb2 = GaussianNB()\n", + "scores = cross_val_score(nb2, iris.data, iris.target, cv=10)\n", + "print(\"Accuracy 0.95 confidence interval: %0.2f (+/- %0.2f)\" % (scores.mean(), scores.std() * 2))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.7.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Einfuehrung/unterlagen/08_NaiveBayes_project_v02.pdf b/Einfuehrung/unterlagen/08_NaiveBayes_project_v02.pdf new file mode 100644 index 0000000..390832b Binary files /dev/null and b/Einfuehrung/unterlagen/08_NaiveBayes_project_v02.pdf differ