diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 77f801397..0e98d54fc 100755 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -38,7 +38,7 @@ pages: - user_guide/classifier/Adaline.md - user_guide/classifier/LogisticRegression.md - user_guide/classifier/SoftmaxRegression.md - - user_guide/classifier/NeuralNetMLP.md + - user_guide/classifier/MultiLayerPerceptron.md - tf_classifier: - user_guide/tf_classifier/TfMultiLayerPerceptron.md - user_guide/tf_classifier/TfSoftmaxRegression.md diff --git a/docs/sources/CHANGELOG.md b/docs/sources/CHANGELOG.md index 77848dd2e..1acd94d83 100755 --- a/docs/sources/CHANGELOG.md +++ b/docs/sources/CHANGELOG.md @@ -2,7 +2,7 @@ --- -### Version 0.4.1dev +### Version 0.4.1 (2016-05-01) ##### New Features @@ -12,8 +12,13 @@ ##### Changes -- Adding optional `dropout` to the [`tf_classifier.TfMultiLayerPerceptron`](./user_guide/tf_classifier/TfMultiLayerPerceptron.md) classifier for regularization -- Adding an optional `decay` parameter to the [`tf_classifier.TfMultiLayerPerceptron`](./user_guide/tf_classifier/TfMultiLayerPerceptron.md) classifier for adaptive learning via an exponential decay of the learning rate eta +- Due to refactoring of the estimator classes, the `init_weights` parameter of the `fit` methods was globally renamed to `init_params` +- Overall performance improvements of estimators due to code clean-up and refactoring +- Added several additional checks for correct array types and more meaningful exception messages +- Added optional `dropout` to the [`tf_classifier.TfMultiLayerPerceptron`](./user_guide/tf_classifier/TfMultiLayerPerceptron.md) classifier for regularization +- Added an optional `decay` parameter to the [`tf_classifier.TfMultiLayerPerceptron`](./user_guide/tf_classifier/TfMultiLayerPerceptron.md) classifier for adaptive learning via an exponential decay of the learning rate eta +- Replaced old `NeuralNetMLP` by more streamlined `MultiLayerPerceptron` ([`classifier.MultiLayerPerceptron`](./user_guide/classifier/MultiLayerPerceptron.md)); now also with softmax in the output layer and categorical cross-entropy loss. +- Unified `init_params` parameter for fit functions to continue training where the algorithm left off (if supported) ### Version 0.4.0 (2016-04-09) diff --git a/docs/sources/USER_GUIDE_INDEX.md b/docs/sources/USER_GUIDE_INDEX.md index d6d966f29..ff9258a20 100755 --- a/docs/sources/USER_GUIDE_INDEX.md +++ b/docs/sources/USER_GUIDE_INDEX.md @@ -6,7 +6,7 @@ - [`Perceptron`](user_guide/classifier/Perceptron.md) - [`Adaline`](user_guide/classifier/Adaline.md) - [`LogisticRegression`](user_guide/classifier/LogisticRegression.md) - - [`NeuralNetMLP`](user_guide/classifier/NeuralNetMLP.md) + - [`MultiLayerPerceptron`](user_guide/classifier/MultiLayerPerceptron.md) - [`SoftmaxRegression`](user_guide/classifier/SoftmaxRegression.md) ## `tf_classifier` (TensorFlow Classifier) diff --git a/docs/sources/user_guide/classifier/Adaline.ipynb b/docs/sources/user_guide/classifier/Adaline.ipynb index 6502966e1..c75542ae1 100644 --- a/docs/sources/user_guide/classifier/Adaline.ipynb +++ b/docs/sources/user_guide/classifier/Adaline.ipynb @@ -25,14 +25,14 @@ "output_type": "stream", "text": [ "Sebastian Raschka \n", - "last updated: 2016-02-23 \n", + "last updated: 2016-05-01 \n", "\n", "CPython 3.5.1\n", "IPython 4.0.3\n", "\n", - "mlxtend 0.3.1.dev0\n", + "mlxtend 0.4.1.dev0\n", "matplotlib 1.5.1\n", - "numpy 1.10.4\n", + "numpy 1.11.0\n", "scipy 0.17.0\n" ] } @@ -200,7 +200,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 3, "metadata": { "collapsed": false }, @@ -209,7 +209,7 @@ "data": { "image/png": "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\n2r59O4sWXcPzzz9J8p0czdbB2LF788Y3nsHIkdnSr5O3mbWtBx9cyIEHTuDEEz/AqFGd1XdosG3b\ntnLHHfN58MGFHHnkyZna8py3mbWtdeuWc8wx/60lEjfAqFGdvOENx7Nu3fLMbTl5m1nb2r79ecaP\nn9jsMHYzYcJktm/fkrkdJ28za2sdHa2V5pJ4ss+/t9ZRmZlZTZy8zcxKyMnbzCwHa9eu5G1vm8a0\naSM58sjxXHHFxQ3tz8nbzCwH55wzh87OTu69989ceunX+cY3vsB99/2sYf05eZuZZbRx4waWL+/h\n4ou/zoQJk3jb205j2rTXcO21X25Yn/6QjplZH289dh92bH5ut+dG7DGO/7hrbb/bL116N5KYPv31\nu56bOvWvWLLk3obF6ORtZtbHjs3P8egeL9ntuUP7JPNKGzduoLNz9w8CjR8/iRdeeL4h8YGnTczM\nMps4cTJbt27d7blnntnAmDFjG9ank7eZWUbTpx9DRLB06T27nlux4jccfPChDevTydvMrI8Re4zj\n0M2bdvs3Yo9xA24/ceJkDjvs1Vx22UfYuHEDt9xyHcuX/5rTT/9Ew2L0nLeZWR8DXZgczJVX3sLf\n//1JvP71L2PMmLGcc85nmDnz+AZEl3DyNjPLwT77HMCtty4rrD9Pm5iZlZCTt5lZCTl5m5mVkJO3\nmVkJOXmbmZWQk7eZWQk5eZuZlZCTt5lZCTl5m5mVkJO3mVkOPve5D3Pssftw2GEjeO97Zza8v8zJ\nW9L+kn4m6SFJPZLOzSMwM7MymTLlYM4++5846qhjC+kvj5H3duC8iDgceD3wEUmvyqFdM7Om2bJl\nCxdf/CE2b95U0/Znn30hZ555PhMnTm5wZInMyTsi1kbE0vTxc8ByYErWds3Mmum73/0q8+d3c9VV\n/9bsUPqV65y3pIOB6cB9ebZrZlakLVu2cM01NzJy5AXccMMPah59Fym35C1pHHAz8PF0BG5mVkrf\n/e5X2bRpKmPHns2WLUe15Og7l/t5SxpJkrivi4j5/W3T09NNT0/3ruWurll0dc3Ko3szs9z0jroj\nPsy2bYuJmMUNN8zlrLPOZ48+X0rcTHl9GcNVwLKI+MpAGzhZm1kZrFu3lkmTXsKYMdcC1wLQ2TmJ\ntWsf55BDpg2437ZtW9my5QV27tzBjh072Lz5OUaN6mTUqM4B98kic/KWdAzwfqBH0hIggM9ExG1Z\n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\nZ9fyrK4uZnV11RFqueRx+9JqbdRSoletjVpK4ya//e2MrljeAmy45Zaa+6gl1lriqNZGESWLLiW0\nVlE1eUfEiXl01O7Juq88bl9atY0aSvSqtVFLadxoYG3F8j71xllDrDWV6FU73gJKFl1KaK0iz2mT\n/O8SZGZm/cpaKvgOSSuBo4FbJf04n7DMzGwwmUoFI+KHwA9ziqWt5HH70qpt1FCiV62NWkrjtrD7\nVMmWeuOsIdaaSvSqHW8BJYsuJbRW4VvCmpm1MpcKmpm1D9+YaojKUjJWLc4ivpG9ljjMrD5O3kNU\nlpKxanEW8Y3stcRhZvXxtImZWQk5eZuZlZCnTYaoLCVj1eIs4hvZa4nDzOrjUkEzs1bmUkEzs/bh\n5G1mVkJO3mZmJeTkbWZWQk7eZmYl5ORtZlZCTt5mZiXk5G1mVkJO3mZmJeTkbWZWQk7eZmYl5ORt\nZlZCTt5mZiXk5G1mVkJO3mZmJeTkbWZWQk7eZmYl5ORtZlZCTt5mZiXk5G1mVkJO3mZmJeTkbWZW\nQk7eZmYllCl5S5orabmkpZK+L2lCXoGZmdnAso68FwKHR8R04BHg09lDMjOzajIl74j4SUTsTBfv\nBfbPHpKZmVWT55z3WcCPc2zPzMwGMLLaBpLuAPaufAoI4KKIWJBucxGwLSKub0iUZma2m6rJOyJO\nHGy9pA8CJwPHD7Zdd08P3T09u5ZndXUxq6urtijNzGw3VZP3YCTNBs4H3hQRWwbb1snazCw/Wee8\nrwDGAXdIWizpyhxiMjOzKjKNvCPiL/MKxMzMaudPWJqZlZCTt5lZCTl5m5mVkJO3mVkJOXmbmZWQ\nIqKovgrryMysjai/Jz3yNjMrISdvM7MScvI2MyshJ28zsxJy8jYzKyEn70F0d3c3O4SGaMfjasdj\nAh9X2RR5XE7eg/APWHm04zGBj6tsnLzNzGxQTt5mZiVU5CcsS0fSrIjobnYceWvH42rHYwIfV9kU\neVxO3mZmJeRpEzOzEnLyNjMrISfvKiTNlbRc0lJJ35c0odkxZSXp3ZJ+I2mHpNc2O56sJM2W9LCk\nFZIubHY8eZA0T9KTkn7d7FjyJGl/ST+T9JCkHknnNjumPEgaLek+SUvS47qk0X06eVe3EDg8IqYD\njwCfbnI8eegB3gn8vNmBZCWpA/gacBJwOPA+Sa9qblS5uJrkmNrNduC8iDgceD3wkXZ4vSJiC/Dm\niDgCmA78taQZjezTybuKiPhJROxMF+8F9m9mPHmIiN9GxCMMcJ/gkpkBPBIRj0fENuBG4JQmx5RZ\nRNwFbGh2HHmLiLURsTR9/BywHJjS3KjyERGb04ejgZE0+DsMnLzrcxbw42YHYbuZAqysWH6CNkkG\n7U7SwSSj1PuaG0k+JHVIWgKsBe6IiAca2d/IRjZeFpLuAPaufIrkr+ZFEbEg3eYiYFtEXN+EEOtW\nyzGZNYukccDNwMfTEXjppe/Qj0ivi/1Q0rSIWNao/py8gYg4cbD1kj4InAwcX0hAOah2TG1kFXBg\nxfL+6XPWoiSNJEnc10XE/GbHk7eIeEbSncBsoGHJ29MmVUiaDZwPvD29KNFuyj7v/QBwqKSDJHUC\n7wVuaXJMeRHlf336cxWwLCK+0uxA8iLppZImpo/HAicCDzeyTyfv6q4AxgF3SFos6cpmB5SVpHdI\nWgkcDdwqqbTz+BGxA/goSVXQQ8CNEbG8uVFlJ+l64JfAVEl/lHRms2PKg6RjgPcDx6dldYvTAVLZ\n7QvcKWkpyRz+7RHxo0Z26I/Hm5mVkEfeZmYl5ORtZlZCTt5mZiXk5G1mVkJO3mZmJeTkbWZWQk7e\nZmYl5ORtZlZC/x/Th7LXU7AHPgAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -254,7 +254,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 5, "metadata": { "collapsed": false }, @@ -263,14 +263,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch: 30/30 | Cost 0.95 | Elapsed: 0:00:00 | ETA: 0:00:00" + "Iteration: 30/30 | Cost 3.79 | Elapsed: 0:00:00 | ETA: 0:00:00" ] }, { "data": { - "image/png": "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\n", + "image/png": "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\n2r59O4sWXcPzzz9J8p0czdbB2LF788Y3nsHIkdnSr5O3mbWtBx9cyIEHTuDEEz/AqFGd1XdosG3b\ntnLHHfN58MGFHHnkyZna8py3mbWtdeuWc8wx/60lEjfAqFGdvOENx7Nu3fLMbTl5m1nb2r79ecaP\nn9jsMHYzYcJktm/fkrkdJ28za2sdHa2V5pJ4ss+/t9ZRmZlZTZy8zcxKyMnbzCwHa9eu5G1vm8a0\naSM58sjxXHHFxQ3tz8nbzCwH55wzh87OTu69989ceunX+cY3vsB99/2sYf05eZuZZbRx4waWL+/h\n4ou/zoQJk3jb205j2rTXcO21X25Yn/6QjplZH289dh92bH5ut+dG7DGO/7hrbb/bL116N5KYPv31\nu56bOvWvWLLk3obF6ORtZtbHjs3P8egeL9ntuUP7JPNKGzduoLNz9w8CjR8/iRdeeL4h8YGnTczM\nMps4cTJbt27d7blnntnAmDFjG9ank7eZWUbTpx9DRLB06T27nlux4jccfPChDevTydvMrI8Re4zj\n0M2bdvs3Yo9xA24/ceJkDjvs1Vx22UfYuHEDt9xyHcuX/5rTT/9Ew2L0nLeZWR8DXZgczJVX3sLf\n//1JvP71L2PMmLGcc85nmDnz+AZEl3DyNjPLwT77HMCtty4rrD9Pm5iZlZCTt5lZCTl5m5mVkJO3\nmVkJOXmbmZWQk7eZWQk5eZuZlZCTt5lZCTl5m5mVkJO3mVkOPve5D3Pssftw2GEjeO97Zza8v8zJ\nW9L+kn4m6SFJPZLOzSMwM7MymTLlYM4++5846qhjC+kvj5H3duC8iDgceD3wEUmvyqFdM7Om2bJl\nCxdf/CE2b95U0/Znn30hZ555PhMnTm5wZInMyTsi1kbE0vTxc8ByYErWds3Mmum73/0q8+d3c9VV\n/9bsUPqV65y3pIOB6cB9ebZrZlakLVu2cM01NzJy5AXccMMPah59Fym35C1pHHAz8PF0BG5mVkrf\n/e5X2bRpKmPHns2WLUe15Og7l/t5SxpJkrivi4j5/W3T09NNT0/3ruWurll0dc3Ko3szs9z0jroj\nPsy2bYuJmMUNN8zlrLPOZ48+X0rcTHl9GcNVwLKI+MpAGzhZm1kZrFu3lkmTXsKYMdcC1wLQ2TmJ\ntWsf55BDpg2437ZtW9my5QV27tzBjh072Lz5OUaN6mTUqM4B98kic/KWdAzwfqBH0hIggM9ExG1Z\n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\nZ9fyrK4uZnV11RFqueRx+9JqbdRSoletjVpK4ya//e2MrljeAmy45Zaa+6gl1lriqNZGESWLLiW0\nVlE1eUfEiXl01O7Juq88bl9atY0aSvSqtVFLadxoYG3F8j71xllDrDWV6FU73gJKFl1KaK0iz2mT\n/O8SZGZm/cpaKvgOSSuBo4FbJf04n7DMzGwwmUoFI+KHwA9ziqWt5HH70qpt1FCiV62NWkrjtrD7\nVMmWeuOsIdaaSvSqHW8BJYsuJbRW4VvCmpm1MpcKmpm1D9+YaojKUjJWLc4ivpG9ljjMrD5O3kNU\nlpKxanEW8Y3stcRhZvXxtImZWQk5eZuZlZCnTYaoLCVj1eIs4hvZa4nDzOrjUkEzs1bmUkEzs/bh\n5G1mVkJO3mZmJeTkbWZWQk7eZmYl5ORtZlZCTt5mZiXk5G1mVkJO3mZmJeTkbWZWQk7eZmYl5ORt\nZlZCTt5mZiXk5G1mVkJO3mZmJeTkbWZWQk7eZmYl5ORtZlZCTt5mZiXk5G1mVkJO3mZmJeTkbWZW\nQk7eZmYllCl5S5orabmkpZK+L2lCXoGZmdnAso68FwKHR8R04BHg09lDMjOzajIl74j4SUTsTBfv\nBfbPHpKZmVWT55z3WcCPc2zPzMwGMLLaBpLuAPaufAoI4KKIWJBucxGwLSKub0iUZma2m6rJOyJO\nHGy9pA8CJwPHD7Zdd08P3T09u5ZndXUxq6urtijNzGw3VZP3YCTNBs4H3hQRWwbb1snazCw/Wee8\nrwDGAXdIWizpyhxiMjOzKjKNvCPiL/MKxMzMaudPWJqZlZCTt5lZCTl5m5mVkJO3mVkJOXmbmZWQ\nIqKovgrryMysjai/Jz3yNjMrISdvM7MScvI2MyshJ28zsxJy8jYzKyEn70F0d3c3O4SGaMfjasdj\nAh9X2RR5XE7eg/APWHm04zGBj6tsnLzNzGxQTt5mZiVU5CcsS0fSrIjobnYceWvH42rHYwIfV9kU\neVxO3mZmJeRpEzOzEnLyNjMrISfvKiTNlbRc0lJJ35c0odkxZSXp3ZJ+I2mHpNc2O56sJM2W9LCk\nFZIubHY8eZA0T9KTkn7d7FjyJGl/ST+T9JCkHknnNjumPEgaLek+SUvS47qk0X06eVe3EDg8IqYD\njwCfbnI8eegB3gn8vNmBZCWpA/gacBJwOPA+Sa9qblS5uJrkmNrNduC8iDgceD3wkXZ4vSJiC/Dm\niDgCmA78taQZjezTybuKiPhJROxMF+8F9m9mPHmIiN9GxCMMcJ/gkpkBPBIRj0fENuBG4JQmx5RZ\nRNwFbGh2HHmLiLURsTR9/BywHJjS3KjyERGb04ejgZE0+DsMnLzrcxbw42YHYbuZAqysWH6CNkkG\n7U7SwSSj1PuaG0k+JHVIWgKsBe6IiAca2d/IRjZeFpLuAPaufIrkr+ZFEbEg3eYiYFtEXN+EEOtW\nyzGZNYukccDNwMfTEXjppe/Qj0ivi/1Q0rSIWNao/py8gYg4cbD1kj4InAwcX0hAOah2TG1kFXBg\nxfL+6XPWoiSNJEnc10XE/GbHk7eIeEbSncBsoGHJ29MmVUiaDZwPvD29KNFuyj7v/QBwqKSDJHUC\n7wVuaXJMeRHlf336cxWwLCK+0uxA8iLppZImpo/HAicCDzeyTyfv6q4AxgF3SFos6cpmB5SVpHdI\nWgkcDdwqqbTz+BGxA/goSVXQQ8CNEbG8uVFlJ+l64JfAVEl/lHRms2PKg6RjgPcDx6dldYvTAVLZ\n7QvcKWkpyRz+7RHxo0Z26I/Hm5mVkEfeZmYl5ORtZlZCTt5mZiXk5G1mVkJO3mZmJeTkbWZWQk7e\nZmYl5ORtZlZC/x/Th7LXU7AHPgAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -279,18 +279,18 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 31, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n9l4pm4oAAAAASUVORK5CYII=\n", + "image/png": "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\nAf8fOHnwMfNBnwQAAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -340,7 +340,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 6, "metadata": { "collapsed": false }, @@ -349,14 +349,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch: 15/15 | Cost 0.95 | Elapsed: 0:00:00 | ETA: 0:00:00" + "Iteration: 15/15 | Cost 3.79 | Elapsed: 0:00:00 | ETA: 0:00:00" ] }, { "data": { - "image/png": "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\n", + "image/png": "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\nMbO2tX37dhYvvpLnn3+S5Ds5mq2D0aP35Q1vOI3hw7OlXydvM2tb99+/iIMOGscJJ3yQESM6qx/Q\nYNu2beW22xZw//2LOPLIkzK15TlvM2tb69at4Jhj/ltLJG6AESM6ef3rj2PduhWZ23LyNrO2tX37\n84wdO77ZYexm3LiJbN++JXM7Tt5m1tY6OlorzSXxZJ9/b62zMjOzmjh5m5mVkJO3mVkO1q5dydve\nNp3p04dz5JFjufTSCxran5O3mVkOzjprLp2dndx995+56KJv8q1vfYl77vl5w/pz8jYzy2jjxg2s\nWNHDBRd8k3HjJvC2t32A6dNfzVVXfbVhffpDOmZmfbz12P3Ysfm53R4bttcY/uOOtf3uv2zZnUhi\nxozX7Xps6tS/YunSuxsWo5O3mVkfOzY/xyN7vWS3xw7rk8wrbdy4gc7O3T8INHbsBF544fmGxAee\nNjEzy2z8+Ils3bp1t8eeeWYDo0aNblifTt5mZhnNmHEMEcGyZXfteuyhh37LIYcc1rA+nbzNzPoY\nttcYDtu8abd/w/YaM+D+48dPZNq0V3HxxR9l48YN3HTT1axY8RtOPfWTDYvRc95mZn0M9MbkYC67\n7Cb+/u9P5HWvexmjRo3mrLM+x6xZxzUguoSTt5lZDvbb70Buvnl5Yf152sTMrIScvM3MSsjJ28ys\nhJy8zcxKyMnbzKyEnLzNzErIydvMrIScvM3MSsjJ28yshJy8zcxy8IUvfIRjj92PadOG8d73zmp4\nf5mTt6QDJP1c0gOSeiSdnUdgZmZlMmXKIZx55j9x1FHHFtJfHiPv7cA5EXE48Drgo5JemUO7ZmZN\ns2XLFi644MNs3ryppv3PPPPTnH76uYwfP7HBkSUyJ++IWBsRy9LbzwErgClZ2zUza6bvfe/rLFjQ\nzeWX/1uzQ+lXrnPekg4BZgD35NmumVmRtmzZwpVXXs/w4edx3XU/rHn0XaTckrekMcCNwCfSEbiZ\nWSl973tfZ9OmqYwefSZbthzVkqPvXNbzljScJHFfHREL+tunp6ebnp7uXfe7umbT1TU7j+7NzHLT\nO+qO+Ajbti0hYjbXXTePM844l736fClxM+X1ZQyXA8sj4msD7eBkbWZlsG7dWiZMeAmjRl0FXAVA\nZ+cE1q59nEMPnT7gcdu2bWXLlhfYuXMHO3bsYPPm5xgxopMRIzoHPCaLzMlb0jHA+4EeSUuBAD4X\n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\nQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -364,9 +364,9 @@ }, { "data": { - "image/png": "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\nyjP/EukAAAAASUVORK5CYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAEPCAYAAABGP2P1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHcZJREFUeJzt3Xu0VWW9//H3B7YKiGAiIgoqXtAwr6Qg4GBlxzqoRzsj\nDTMz88YvK0sdntRTQ/KcypOn0sp+ykgtzdOxrNQStRy6f5VX5OINME1UNAERFBRULt/fH3NuXWuz\n9mZf1lxzzb0/rzHW2HPNNfdc381lffZ8nvk8jyICMzOzFn3yLsDMzBqLg8HMzCo4GMzMrIKDwczM\nKjgYzMysgoPBzMwqZBoMkkZLmitpTvr1DUnnVDnuh5KekTRP0oFZ1mRmZu1ryvLkEfE34CAASX2A\nl4DflR8jaQqwR0TsJWkccDUwPsu6zMysbfVsSvon4O8RsbjV/uOAGwAi4mFgsKRhdazLzMzK1DMY\npgK/rLJ/Z6A8LF5O95mZWQ7qEgyStgCOBX5dj/czM7Ouy7SPocwUYHZEvFrltZeBkWXPR6T7Kkjy\npE5mZl0QEerM8fVqSvo01ZuRAG4HTgGQNB54PSKWVjswIgr7uOSSS3KvwfXnX0dvrL/ItfeE+rsi\n8ysGSQNIOp7PKts3DYiImBERMyUdJelZ4C3g81nXZGZmbcs8GCJiDTC01b5rWj3/UtZ1mJlZx3jk\nc52USqW8S+gW15+vItdf5Nqh+PV3hbraBlVvkqIotZqZNQpJRIN2PpuZWUE4GMzMrIKDwczMKjgY\nzMysgoPBzMwqOBjMzKyCg8HMzCo4GMzMrIKDwczMKjgYzMysgoPBzMwqOBjMzKyCg8HMzCo4GMzM\nrIKDwczMKjgYzMysgoPBzMwqOBjMzKyCg8HMzCo4GMzMrIKDwczMKmQeDJIGS/q1pAWSnpI0rtXr\nkyW9LmlO+vh61jWZmVnbmurwHlcCMyPiBElNwIAqx/w5Io6tQy1mZrYZmQaDpEHA4RFxKkBErAdW\nVTs0yzrMzKzjsm5KGgUsl3R92kw0Q1L/KscdJmmepDskjWnrZEuWZFeomZklsm5KagIOBr4YEY9K\nugK4ELik7JjZwC4RsUbSFOBWYHS1k51zznTGpLFRKpUolUoZlm5mVjzNzc00Nzd36xyKiNpUU+3k\n0jDgwYjYPX0+CfhaRPxLO9+zCBgbESta7Y+vfjX4wQ8yK9fMrMeRRER0qrk+06akiFgKLJbUcgXw\nUWB++TFpeLRsH0oSVhWh0OKvf82qUjMza1GPu5LOAW6StAXwHPB5SdOAiIgZwPGSvgCsA9YCU9s6\n0fz58OabMHBgHao2M+ulMm1KqiVJMWFCcOml8NGP5l2NmVkxNFxTUq1NmuTmJDOzrBUuGO6/P+8q\nzMx6tkI1JS1fHowaBStWQFM9ekfMzAquxzclDRkCI0fC44/nXYmZWc9VqGAA9zOYmWXNwWBmZhUK\nGwwF6RoxMyucwgXDbrslXxctyrUMM7Meq3DBILk5ycwsS4ULBnAwmJllqbDB4IFuZmbZKNQAt5Za\n16+H7bZL+hmGDMm5MDOzBtbjB7i1aGqC8ePhgQfyrsTMrOcpZDCA+xnMzLLiYDAzswqF7GMAeOst\n2GEHWL4c+vfPsTAzswbWa/oYALbeGsaMgUcfzbsSM7OepbDBAG5OMjPLgoPBzMwqFLaPAWDJkqQ5\nafly6FPoiDMzy0av6mMA2HHHZIDb/Pl5V2Jm1nMUOhjAzUlmZrXmYDAzswqZB4OkwZJ+LWmBpKck\njatyzA8lPSNpnqQDO3N+B4OZWW3V44rhSmBmRHwQOABYUP6ipCnAHhGxFzANuLozJx89Ohnstnhx\nrco1M+vdMg0GSYOAwyPieoCIWB8Rq1oddhxwQ/r6w8BgScM6/h6ehtvMrJayvmIYBSyXdL2kOZJm\nSGo9gcXOQPnv+y+n+zps4kQ3J5mZ1UpTHc5/MPDFiHhU0hXAhcAlXTnZ9OnT39sulUqUSiUguWL4\nxS+6W6qZWfE1NzfT3NzcrXNkOsAtbRJ6MCJ2T59PAr4WEf9SdszVwH0RcXP6fCEwOSKWtjrXJgPc\nWrz7brJwz8svw+DBGf0wZmYF1HAD3NIP98WSRqe7Pgq0Ho52O3AKgKTxwOutQ2FzttwSPvxheOih\n7lZsZmb1uCvpHOAmSfNI7kr6tqRpks4CiIiZwCJJzwLXAGd35U1826qZWW0Ueq6kcnfdBf/1X3Df\nfXUsysyswXWlKanHBMMbb8DOO8OKFUnTkpmZNWAfQz0NHgx77glz5+ZdiZlZsfWYYAD3M5iZ1UKP\nCgYPdDMz674e08cAyXxJY8fC0qXJVBlmZr1dr+5jABg5Evr3h2eeybsSM7Pi6lHBAO5nMDPrLgeD\nmZlVcDCYmVmFHhcM++4Lr76adECbmVnn9bhg6NMHJkzwwj1mZl3V44IB3JxkZtYdPTIYPNDNzKzr\netQAtxZr18L228OyZbD11hkXZmbWwHr9ALcW/fvDAQfAI4/kXYmZWfH0yGAA9zOYmXWVg8HMzCr0\nyD4GgOXLYY894LXXoKkpw8LMzBqY+xjKbL99sqLbE0/kXYmZWbH02GAANyeZmXWFg8HMzCr0imAo\nSDeKmVlD6NHBMGoUbNwIzz+fdyVmZsWReTBIel7SY5LmStpkyJmkyZJelzQnfXy9du+dXDV4Qj0z\ns46rx42cG4FSRKxs55g/R8SxWbx5S3PSySdncXYzs56nHk1J6sD7dOoe285wB7SZWefUIxgC+JOk\nWZLObOOYwyTNk3SHpDG1fPMDDoAXX4QVK2p5VjOznqseTUkTI+IVSUNJAmJBRJT/Dj8b2CUi1kia\nAtwKjK52ounTp7+3XSqVKJVKm33zpiYYNw4eeACOOaYbP4WZWQE0NzfT3NzcrXPUdUoMSZcAqyPi\n++0cswgYGxErWu3v1JQY5b75zWQq7ssu69K3m5kVVsNNiSFpgKSB6fbWwMeAJ1sdM6xs+1CSsKpp\nw4/7GczMOi7rpqRhwO8kRfpeN0XEHyVNAyIiZgDHS/oCsA5YC0ytdRHjxsHcufD229CvX63PbmbW\ns/TY2VVb+/CH4YorkqsHM7PeouGakhqJB7qZmXVMrwoG9zOYmW1er2lKeuUV2HffZAGfPr0mDs2s\nt8usKUnSjR3Z18iGD4fttoMFC/KuxMyssXX0d+d9y59I6guMrX052XJzkpnZ5rUbDJIukrQa2F/S\nqvSxGlgG3FaXCmvIwWBmtnkd6mOQ9J2IuKgO9bRXQ7f6GAAWLoQpU2DRohoVZWbW4LK8XfUP6chl\nJJ0s6fuSdu10hTnbe29YvRpeeinvSszMGldHg+H/AmskHQCcD/wduCGzqjLihXvMzDavo8GwPm3H\nOQ74cURcBWyTXVnZmTjRwWBm1p6OBsNqSRcBnwXukNQH2CK7srLjDmgzs/Z1NBimAu8Ap0XEEmAE\ncHlmVWXo4IPhb3+DVavyrsTMrDF1KBjSMLgJGCzpGODtiChcHwPAVlvB2LHw0EN5V2Jm1pg6OvL5\nU8AjwAnAp4CHJR2fZWFZcnOSmVnbOroew78Dh0TEMoB0mc57gFuyKixLkybB5YVsCDMzy15H+xj6\ntIRC6rVOfG/DOewwmDUL1q3LuxIzs8bT0Q/3uyTdLelUSacCdwAzsysrW9tuC7vvnqzqZmZmlTY3\nV9KekiZGxAXANcD+6eNBYEYd6suM+xnMzKrb3BXDFcAqgIj4bUScFxHnAb9LXyssD3QzM6tuc8Ew\nLCKeaL0z3bdbJhXVScsVQ0HWKTIzq5vNBcO27bzWv5aF1NsuuyRjGp59Nu9KzMway+aC4VFJZ7be\nKekMYHY2JdWP+xnMzDbV7noMkoaR9Ce8y/tB8GFgS+Bf0xHRdVGL9Rha+8lPYPZsuPbamp7WzKxh\ndGU9ho4u1PMR4EPp06ci4t5OFPU88AawEVgXEYdWOeaHwBTgLeDUiJhX5ZiaB8Pjj8MJJ8DTT9f0\ntGZmDSOzYOgOSc8BYyNiZRuvTwG+FBFHSxoHXBkR46scV/Ng2LABhgxJJtXbYYeantrMrCFkuYJb\nd2gz73Mc6aI/EfEwyUR9w+pQF337woQJvm3VzKxcPYIhgD9JmlWtIxvYGVhc9vzldF9duAPazKxS\nRyfR646JEfFKOvHenyQtiIgufRRPnz79ve1SqUSpVOp+cRPha1/r9mnMzBpCc3Mzzc3N3TpH5n0M\nFW8mXQKsjojvl+27GrgvIm5Ony8EJkfE0lbfW/M+BoA1a2DoUHj1VRgwoOanNzPLVcP1MUgaIGlg\nur018DHgyVaH3Q6ckh4zHni9dShkacAA2H9/eOSRer2jmVljy7qPYRjwV0lzgYeA30fEHyVNk3QW\nQETMBBZJepZkor6zM65pE5MmwV/+Uu93NTNrTHVtSuqOrJqSAB54AE46CRYsgP6FnujDzKxSwzUl\nFcWECck60FcUer5YM7Pa8BVD6tlnYfx4eOopGFaXURRmZtlryJHPtZJ1MACcfz68+SZcc02mb2Nm\nVjcOhm5auRL22QfuuQf22y/TtzIzqwv3MXTTBz4A3/gGnHeeF/Axs97LwdDKtGmweDHceWfelZiZ\n5cPB0MoWW8B//3fS37BuXd7VmJnVn4OhiqOPhhEjYMaMvCsxM6s/dz634fHH4cgjk0V8tm1v5Wsz\nswbmu5Jq7Mwzk1C4/PK6vq2ZWc04GGpsyRL40Ifg4Ydhjz3q+tZmZjXh21VrbMcdk1tXvV6DmfUm\nvmLYjLVrk0Fvv/gFHH543d/ezKxbfMWQgf794bLL4NxzYePGvKsxM8ueg6EDTjwRmprgppvyrsTM\nLHtuSuqgBx6AqVOT21e9BKiZFYWbkjI0YQJMnJiMijYz68l8xdAJzz+fLOjzxBOw0065lmJm1iEe\nx1AHF14Iy5bBddflXYmZ2eY5GOpg1SrYe2+YORMOOijvaszM2uc+hjoYNAimT/eaDWbWczkYuuD0\n0+HVV+H22/OuxMys9tyU1EV33w1f/jI8+SRsuWXe1ZiZVdewTUmS+kiaI2mT37ElTZb0evr6HElf\nr0dN3fXxj8Oee8JPfpJ3JWZmtVWXKwZJ5wJjgUERcWyr1yYD57feX+UcDXXFADB/PpRKsHAhbLdd\n3tWYmW2qIa8YJI0AjgJ+2t5hWdeRhTFj4Pjj4dJL867EzKx26tGU9APgAqC9X/cPkzRP0h2SxtSh\nppr55jeTOZSefjrvSszMaqMpy5NLOhpYGhHzJJWofmUwG9glItZImgLcCoyudr7p06e/t10qlSiV\nSrUuudOGDoV/+7fkcdtteVdjZr1dc3Mzzc3N3TpHpn0Mkr4NnAysB/oD2wC/jYhT2vmeRcDYiFjR\nan/D9TG0eOcd+OAH4ac/hSOOyLsaM7P3NfTI57Y6mSUNi4il6fahwK8iYrcq39+wwQBwyy3wrW/B\no49C3755V2NmlmjIzudqJE2TdFb69HhJT0qaC1wBTM2jpu765Cdh663h5z/PuxIzs+7xALcamjUL\nPvGJpCN64MC8qzEzK9AVQ091yCFJH8N3v5t3JWZmXecrhhpbvBgOPBDmzYORI/Ouxsx6O18xNICR\nI+Hss+Hii/OuxMysa3zFkIE330zWbLj11qR5ycwsL75iaBADB8J//Aece67XbDCz4nEwZORzn0uu\nHH7zm7wrMTPrHDclZejee+GMM2DBAthqq7yrMbPeyE1JDeaII2C//eBHP8q7EjOzjvMVQ8aefhom\nTUrWbhg6NO9qzKy38RVDA9p7bzj5ZJg6NVkn2sys0TkY6uDyy2HcOBg7Fh58MO9qzMza56akOvr9\n75PO6IsvhnPOARVy3TozK5KGnna7u3pCMAA89xyccALssUeyfsOgQXlXZGY9mfsYCmD33eH++2Hb\nbZNR0U8+mXdFZmaVHAw56NcPZsxImpQ+8hG48ca8KzIze5+bknL2xBPJIj9HHAFXXJGEhplZrbgp\nqYD22y9ZDvS115LxDosW5V2RmfV2DoYGMGgQ/OpXyXiHcePgD3/IuyIz683clNRg7r8fTjwRPvtZ\nuPRSaGrKuyIzKzLfrtpDLFsGJ50EGzfCL38Jw4blXZGZFZX7GHqIHXaAu++GiROT0dJ/+UveFZlZ\nb+IrhgZ3551w6qlwwQVw/vkeLW1mneOmpB7qhReS0dI77ww/+xkMHpx3RWZWFA3blCSpj6Q5km5v\n4/UfSnpG0jxJB9ajpiLZddekOWmnnZKmpXnz8q7IzHqyevUxfAWYX+0FSVOAPSJiL2AacHWdaiqU\nrbaCq65K7lQ68ki47rq8KzKznirzmyEljQCOAr4FnFflkOOAGwAi4mFJgyUNi4ilWddWRCedBAce\nmIyWvv9++PGPoX//7p937drkbqjyx9Kl72/36ZM0YQ0alDxatlt/bXn4Nluz4qrHf98fABcAbbWM\n7wwsLnv+crrPwdCGMWPgkUfgzDPhsMPglltgzz0rj1m/PhlN3frDvq3HunXJ3VCtHzvtBAcckJxz\n1Sp4443kvM89lzxv2Vf+ddWqZGqPaqFRLVAGD4bDD4cdd6z/n6WZbSrTYJB0NLA0IuZJKgHduqdm\n+vTp722XSiVKpVJ3Tldo22yTjHG46iqYMCGZjK/8g37lSvjAByo/5IcNS74ecsimAbDNNrW74ykC\n3npr07BoHSAvvwwLFsDy5XDWWTB5Mpx+OkyZ4isOs65qbm6mubm5W+fI9K4kSd8GTgbWA/2BbYDf\nRsQpZcdcDdwXETenzxcCk1s3JfXmu5I257HHkjWlyz/ohwwp1ofr6tXJtCDXXgvPP5/convaaZte\nCZlZ5zT07aqSJgPnR8SxrfYfBXwxIo6WNB64IiLGV/l+B0MvMX9+EhA33pg0m51xRtKnUou+FLPe\npmFvV21N0jRJZwFExExgkaRngWuAs/OoyRrHmDHwve/BSy/Bl74EN90EI0bA2WfDnDl5V2fW83mA\nmxXC4sXJ4L7rrktWvzv9dPjMZ5J+FDNrW0M3JXWXg8EgmVjw3nuTpqY774Sjjkqamkql5JZaM6vk\nYLBe5bXXkmama69NOq9POy3ptB4xIu/KzBqHg8F6pQiYPTsJiJtvTsZ2nH46HHMMbLll3tWZ5cvB\nYL3emjXJgL9rr4WFC+GUU5IriX328cy01js5GMzKPPNM0ll9ww3JlB97773pY889k3moGs0bbyTj\nORYtSu7OAujbNxmbUuuvW20F229frHEv1nEOBrMqIuDVV+Hppzd9vPBCMp15tdAYPjy7q4w330w+\n+Fs+/Mu/Pv88vPsujBoFu+0GI0cmHevr18OGDbX5Wr799tvJSPkhQ5KfefjwZCqUlu3y5zvu6Oa5\nonEwmHXSunXJvE/VQuPtt2H06E0DY/RoGDCg/fOuXZuETvmHfXkAvPVWMp16y4d/669DhtS36Wv9\n+mQqlVdeSR7/+Mf72+XPly1L5rgqD462QqRfv+7VtHFj8vezfn3yteVR/nz9+uS4LbdMHlts8f52\ny6OpqXc3IzoYzGpo5crqgfH3v8PQoe8Hxe67J/M9lX/4r1wJu+xS/UN/t92SeauK+GG1cWPys7YO\njtZhsmRJMlJ9+PCkmWrDhrY/2Nv7wN9ii/cfTU3Vt6Xke959N3mUb7/7bnKutkKjvUBp2d/UlNQS\nkXwt325vX0eP79s3CdF+/ZI/s1pv9+vnYDDL3IYNydVAS1AsWpR8+JUHwPDhvXtcRQSsWJGExGuv\nJR+ubX2wt7Xdp09twrPlyqNaaJQ/2npt/fqklpaHVPm12r72Xmu9b8MGeOed5Crz7beTRy23161z\nMJiZWZnCzJVkZmaNy8FgZmYVHAxmZlbBwWBmZhUcDGZmVsHBYGZmFRwMZmZWwcFgZmYVHAxmZlbB\nwWBmZhUcDGZmVsHBYGZmFTINBklbSXpY0lxJT0i6pMoxkyW9LmlO+vh6ljWZmVn7Mg2GiHgH+EhE\nHAQcCEyRdGiVQ/8cEQenj//Msqa8NDc3511Ct7j+fBW5/iLXDsWvvysyb0qKiDXp5lZAE1Bt7uwC\nLlnSOUX/x+X681Xk+otcOxS//q7IPBgk9ZE0F1gC/CkiZlU57DBJ8yTdIWlM1jWZmVnb6nHFsDFt\nShoBjKvywT8b2CUiDgR+DNyadU1mZta2uq7gJukbwFsR8f12jlkEjI2IFa32e/k2M7Mu6OwKbk1Z\nFQIgaXtgXUS8Iak/cCRwWatjhkXE0nT7UJKwWtH6XJ39wczMrGsyDQZgOPBzSX1Imq1ujoiZkqYB\nEREzgOMlfQFYB6wFpmZck5mZtaOuTUlmZtb4CjHyWdI/S1oo6W+SvpZ3PZ0haYSkeyU9lQ7yOyfv\nmjorvbNsjqTb866lsyQNlvRrSQvSv4NxedfUGZLOlfSkpMcl3SRpy7xrao+kayUtlfR42b4PSPqj\npKcl3S1pcJ41tqeN+r+b/vuZJ+k3kgblWWN7qtVf9tr5kjZK2m5z52n4YEiboX4MfBzYF/i0pH3y\nrapT1gPnRcS+wGHAFwtWP8BXgPl5F9FFVwIzI+KDwAHAgpzr6TBJOwFfBg6OiP1Jmn5PzLeqzbqe\n5P9quQuBeyJib+Be4KK6V9Vx1er/I7BveufkMxSvfiSNIOnjfaEjJ2n4YAAOBZ6JiBciYh3wv8Bx\nOdfUYRGxJCLmpdtvknww7ZxvVR2X/oM6Cvhp3rV0Vvqb3eERcT1ARKyPiFU5l9VZfYGtJTUBA4B/\n5FxPuyLir8DKVruPA36ebv8c+ERdi+qEavVHxD0RsTF9+hDJrfcNqY0/f4AfABd09DxFCIadgcVl\nz1+iQB+s5STtRjI1yMP5VtIpLf+gitgZNQpYLun6tClsRnp3XCFExD+A7wEvAi8Dr0fEPflW1SU7\ntNx5GBFLgB1yrqc7TgPuzLuIzpB0LLA4Ip7o6PcUIRh6BEkDgVuAr6RXDg1P0tHA0vSKRxRv6pIm\n4GDgqog4GFhD0qxRCJK2Jflte1dgJ2CgpJPyraomivhLBpL+neT2+//Ju5aOSn8Ruhgon8B0s/+P\nixAMLwO7lD0fke4rjLQZ4Bbgxoi4Le96OmEicKyk54BfAh+RdEPONXXGSyS/KT2aPr+FJCiK4p+A\n5yJiRURsAH4LTMi5pq5YKmkYgKQdgWU519Npkk4laVItWjDvAewGPJYOHh4BzJbU7lVbEYJhFrCn\npF3TOzJOBIp2d8x1wPyIuDLvQjojIi6OiF0iYneSP/d7I+KUvOvqqLT5YrGk0emuj1KsTvQXgfGS\n+kkSSf1F6DxvfXV5O3Bquv05oNF/OaqoX9I/kzSnHpvOGN3o3qs/Ip6MiB0jYveIGEXyy9JBEdFu\nODd8MKS/KX2J5M6Ap4D/jYgi/OcAQNJE4DPAEem6FHPSf2hWH+cAN0maR3JX0rdzrqfDIuIRkquc\nucBjJP/ZZ+Ra1GZI+h/gAWC0pBclfZ5ktoMjJT1NEm6XtXeOPLVR/4+AgcCf0v+/P8m1yHa0UX+5\noANNSR7gZmZmFRr+isHMzOrLwWBmZhUcDGZmVsHBYGZmFRwMZmZWwcFgZmYVHAzWa0hanX7dVdKn\na3zui1o9/2stz29WTw4G601aBu2MopNTG0jqu5lDLq54o4hJnTm/WSNxMFhv9B1gUjqK9SvpQkTf\nlfRwuhjLmQCSJkv6s6TbSEbdI+l3kmaliy6dke77DtA/Pd+N6b7VLW8m6fL0+Mckfars3PeVLSJ0\nY9nxl6WL88yT9N26/amYpbJe89msEV0InB8RxwKkQfB6RIxL5+O6X9If02MPIlmk5cX0+ecj4nVJ\n/YBZkn4TERdJ+mI6g2uLSM/9SWD/iNgvnbhslqT/lx5zIDAGWJK+5wRgIfCJiNgn/f6GXS3Mei5f\nMZjBx4BTJM0lWStjO2Cv9LVHykIB4KvpvEstC7bsRfsmksxMSzpxWTNwSNm5X4lkXpp5JLNgvgGs\nlfRTSf8KrO3mz2bWaQ4Gs2RSsS9HxEHpY4+yBXHeeu8gaTJwBDAuXeZxHtCv7Bwdfa8W5TN1bgCa\n0kkjDyWZPO8Y4K5O/zRm3eRgsN6k5UN5NbBN2f67gbPTdTOQtJekAVW+fzCwMiLeSdftHl/22rst\n39/qvf4CTE37MYYChwOPtFlg8r7bRsRdwHnA/h3/8cxqw30M1pu03JX0OLAxbTr6WURcmS67Oidd\n92AZ1dclvgv4P5KeAp4GHix7bQbwuKTZEfHZlveKiN9JGk8ybfZG4IKIWCbpg23UNgi4Le3DADi3\n6z+uWdd42m0zM6vgpiQzM6vgYDAzswoOBjMzq+BgMDOzCg4GMzOr4GAwM7MKDgYzM6vgYDAzswr/\nHz4sVzZLWxxaAAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -417,7 +417,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 7, "metadata": { "collapsed": false }, @@ -426,14 +426,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch: 15/15 | Cost 0.95 | Elapsed: 0:00:00 | ETA: 0:00:00" + "Iteration: 15/15 | Cost 3.79 | Elapsed: 0:00:00 | ETA: 0:00:00" ] }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAW8AAAEKCAYAAADdBdT9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHd5JREFUeJzt3XucXGWd5/HPt5PuJJgrKLdwG2SihGkNIgkKaguLZNCI\n1xlFBYGZdUTFlRG8sMIiM76U2VUUF8fVgFwEXOClIYxCUGkF5DYmwZYEA6gYcgFNQoAEkk7y2z/O\n6abS291V3efUqTqV7/v1yit16px6nt851f3rp5761VOKCMzMrFzaGh2AmZmNnJO3mVkJOXmbmZWQ\nk7eZWQk5eZuZlZCTt5lZCTl5F0zSqZLurPHYCyRdnd7eX9IzklTfCBtH0hWSvlhAPydLurXe/YxW\n5XWQdIyk5Y2OyZqPk3dOJHVLWi+pvYbDR1JcHwARsTIiJkcDCvMlTZd0o6Q/S9og6TeSTkn3HShp\nh6Sm/FkaLL6IuDYi5o6yvddKWpg+1+sl/VbSRZKm5Bf1iyLirog4NI+2JP1B0rHD7H+TpO3pIOEZ\nSX+S9ANJr82j/3qQdIek0xsdRyM05S9c2Ug6EDgG2AG8vcHh1MPVwOPA/sAewIeAJ9N9IvkD06yv\nCHKLT9LrgTuAO4FXRMTuwFxgG/DqIR4zJmu/BVuVDhImA0cBDwN3Snpzg+OyAZy883EKcA/wPeDD\nlTsk7S7pZkkbJd0LvHzA/kvSEc5GSQ9IOmawDgaOINMRxxcl3ZWOkm6VtHvF8UdJujsdKS+R9KYM\n53ckcGVEvBAROyLiwYi4Ld33i/T/p9M45ijx3yX9UdJaSd+TNLkitmMqYnu8bxSf2l3SLWlb90j6\nq1qulaQj0/s2Sloj6X8OE99OU1eSDpO0SNK69LGfHeI6fAWYHxEXR8SfASLiiYi4MCJ+mbZ1avqc\nfFXSX4ALJB0s6WeS/iLpKUnXDLgeh0v6dRr79cD4in1vkrSyYnuf9FXQU5Iek/SJin0XpCPlK9Nz\n7ZH0mnTfVcABwMJ036eHOMd+EbE6Ii4Avpuee18/r6y4Xsslvbdi34mSHkr7WCnp7Ip9J6U/ixsl\nPSLpLen9kyV9V9Lq9DEXScn0YN9zJenflLzSeUzSCem+fwHeAHwz7e8b1c6ppUSE/2X8BzwCfAR4\nDbAVeFnFvuvTf+OBw4AngF9W7D8ZmEryh/RTwBqgI913AXBVevtAYDvQlm7fkfb7cmBcuv2ldN90\n4C/ACen2cen2HqM8v0XAXcDfA/sP2NcXlyruOx1Yke7bDbhpwHk8A/wdMAaYBrwq3XcF8GfgiPR6\nXANcW+O1+hXwgfT2bsDsYeI7te85ACYCq4H/BnQALwGOHOQa7EYywn5jlWt1KtALnJnGOS59jo4D\nxpK8cukGvpoe3w78ETgrvR7vTn+GvpjufxPwp/S2gP8EzkuPPQh4FDi+4udlM3BCeuyXgHsqYvsD\n8OZhYu/va8D9b07PfUJ6Hf5EMmARySuOPwOvTI9dDbw+vT0FmJXeng08DRybbu8DzEhv/xC4jOR3\n5KXAvcA/VlzPLSQ/UwL+ieTVQV9sdwCnNzoHNOJfwwMo+z+S6ZItwLR0exnwyfR2W/qL+NcVx/8r\nFcl7kPbWA53p7WrJ+/MVj/so8OP09rkkI+XKdm8FPjTKc5ySJoKeNDEtBl47WFzpfT8F/qlie0Z6\njdqAzwI3DdHPFcD/qdj+W2BZjdeqO71eeww4ZrD4KpP3+4Bf13ANppNMi82ouO8rwAbgub7nIm37\nj1XaOqmvT+CNwBMD9t/N4Ml7zsC20+s5v+LnZVHFvkOBTRXbfyBNnkPENVTyfkV6Dfch+aP7iwH7\n/x34Qnr7j8A/ApMGOeZ/DdL2nsALwLiK+94H/Lzieq6o2DchfR72rPg92CWTt6dNsjuF5BdmQ7p9\nHckPHMDLSEZIT1Qc/3jlgyV9WtKydAphAzCZZPRRi7UVtzeTjCIhSVh/pxffVNsAHE3yy7cTJZUX\nz6YvO/9jsE4iYmNEfD4iOoG9gAdJRktD2XfAeT5OMurci2Te/LFRnFO1a3UGSZJ5WNJ9kt46TB+V\nqsXTZwNJ0ui/hhHxmYiYRnItxlYcu7LygZL2lHSdpCckPU3yiqIv7n2AVQP6epzBHQBMH/C8fo4k\nAfYZeP3GK/ubydNJ3jd4muRn66gBMZxM8txC8srhrcDjSqb25qT3D3WdDyR59bGmor1/Z+ffgf5z\niojn05sT2cWNrX6IDUXSeJKRSJukNendHcBUSZ3AQyQvN/cnmUaA5Bew7/FvAM4heSm7LL1vPdnf\nXFtJMmL/SLUDI+Ja4NpaG46I9el88imSpjF45cxqkl/KPgeSXIcn09hm19pfn2rXKiIeI0kiSHo3\ncKOS9wCqVeesJBnpDSsiNku6D3gXL86jD3n4gO0vkST+wyJio6STgEvTfWtIkmOlA0imQwaL9fcR\n8Ypq8dYYV63eBSyOiOfT+ffuiDhh0A4ifg28Q8kbtZ8AbiA5n5UMeL8ntZJk5L1HpEPpERrtOZWe\nR97ZvJMkKR1KMvf36vT2XcApEbGDZFT2PyRNkDSTF0flkIweeoF1kjoknQ9MGqa/WpP6NcA8SW+R\n1CZpfPrG174jOru+TqUvp2/qjZE0iWQ+99H01cafSRJT5S/mdcCnJB0kaSLJVNH16fX4PnCcpPek\n7e0uadBKjQGGvVaSPiCpb7S2keSXescQ8VW6Bdhb0llpuxMlDfXH5VzgdEnnSnpZ2u9+wF8NcXyf\nSSRTK89Kmk7yR6jPPcA2SZ+QNFbSuxj6j9v9aRvnps/pmPR5Ga6Ur/JnZi1wcJVY+4+XtK+kC0jm\nmz+X3n0LMEPSB9N425WUT74yvX2ypMkRsR14lmS6BWA+cJqkNyuxr6RXRMRakvdUviZpUrrvYElv\nrBJnnydrOKeW5OSdzSnA5RGxKiKe6vsHfBP4QPpy9eMkv7xrgMvTf31uS/+tIJmP3MyAl9wDxBC3\ndz4o4gmSedXPkySvx4FPM/rnezeSP0IbSEaE+5OWRKYvY/8VuDt92Tub5ByvBn5J8lJ5M8kbckTE\nSuDENJ71wBLgVTXEUO1azQUekvQM8DXg7yNiyxDx9YuI54Dj0/NZm7bfNVgAEXE3cCzJ3PDv0pH/\nj0nmXS8d7DGpC0nehH0aWEjyBm5fm70kI9vTgHXAeyv3D+h/B/A2YFZ6DZ4CvkMyfTSUyp+TLwNf\nSK/D2UMcv086hfYsyR+Lw4A3RcTP0hieA95C8mpldfrvyySvOCEpI/1DOj30X0lfDUXEA+k5XkLy\nx7WbF1+FnpI+fhnJz8QNwN41ntPXgfcqqXy5ZJjHtByN7pWKmZk1kkfeZmYllPkNS0njSF4ed6Tt\n3RgRF2Zt18zMhpbLtImk3dJ348eQ1KieFRH3Z27YzMwGlcu0SURsTm+OIxl9eyLdzKyOcqnzTqsq\nfk1SjvW/03eWB3JCNzMbuUFLhHNJ3mkJ0+FKFtv5kaSZfR+k6NPd3U13d3f/dldXF11dXXl0b2a2\ny8m9VFDSF0jWU/jqgF0eeZuZjdygI+/Mc96SXqp0IXpJE0g+8PBw1nbNzGxoeUyb7ANcmc57twE/\niIgf59CumZkNochPWHraxMxs5OozbWJmZsVz8jYzKyEnbzOzEirsyxgWLiyqJzOz1jFv3uD3+5t0\nzKxlbdu2jTvvvJLnn3+S5Ds5Gq2NCRP24g1vOJWxY7OlXydvM2tZDz64iAMOmMzxx3+I9vaO6g+o\ns97erdx++wIefHARRxxxYqa2POdtZi1r3brlHH30f2mKxA3Q3t7B619/LOvWLc/clpO3mbWsbdue\nZ9KkKY0OYyeTJ09j27Ytmdtx8jazltbW1lxpLokn+/x7c52VmZnVxMnbzKyEnLzNzHKwdu1K3va2\nmcycOZYjjpjEpZeeX9f+nLzNzHJw5pnz6Ojo4N57/8KFF36Lb3/7y9x338/r1p+Tt5lZRhs3bmD5\n8h7OP/9bTJ48lbe97YPMnPlqrrrqa3Xr0x/SMTMb4K3H7M32zc/tdN+Y3SbyH3etHfT4pUvvRhKz\nZr2u/74ZM/6GJUvurVuMTt5mZgNs3/wcj+72kp3uO2RAMq+0ceMGOjp2/iDQpElTeeGF5+sSH3ja\nxMwssylTprF169ad7nvmmQ2MHz+hbn06eZuZZTRr1tFEBEuX3tN/34oVv+Wggw6pW59O3mZmA4zZ\nbSKHbN60078xu00c8vgpU6Zx6KGv4qKLPsbGjRu4+earWb78N5xyyqfqFqPnvM3MBhjqjcnhXHbZ\nzfzDP5zA6173MsaPn8CZZ36eOXOOrUN0CSdvM7Mc7L33/txyy7LC+vO0iZlZCTl5m5mVkJO3mVkJ\nOXmbmZWQk7eZWQk5eZuZlZCTt5lZCTl5m5mVkJO3mVkJOXmbmeXgi1/8KMccszeHHjqG971vTt37\ny5y8Je0n6eeSHpLUI+msPAIzMyuT6dMP4owz/pkjjzymkP7yGHlvA86OiMOA1wEfk/TKHNo1M2uY\nLVu2cP75H2Hz5k01HX/GGZ/htNPOYcqUaXWOLJE5eUfE2ohYmt5+DlgOTM/arplZI33/+99gwYJu\nLr/83xodyqBynfOWdBAwC7gvz3bNzIq0ZcsWrrzyesaOPZfrrvthzaPvIuWWvCVNBG4EPpmOwM3M\nSun73/8GmzbNYMKEM9iy5cimHH3nsp63pLEkifvqiFgw2DE9Pd309HT3b3d2dtHZ2ZVH92Zmuekb\ndUd8lN7exUR0cd11F3P66eew24AvJW6kvL6M4XJgWUR8fagDnKzNrAzWrVvL1KkvYfz4q4CrAOjo\nmMratY9z8MEzh3xcb+9Wtmx5gR07trN9+3Y2b36O9vYO2ts7hnxMFpmTt6SjgQ8APZKWAAF8PiJu\nzdq2mVnR9t33QBYs+OWIH3fOOSfzk5/c1L99+OGTOPHE9/C1r92QZ3j9MifviLgbGJNDLGZmpXXJ\nJTdyySXF9edPWJqZlZCTt1mdPPvs+kaHYC3MydusDlatWsFnPzuXVatWNDoUa1FO3mZ1sGDBd9i4\n8RBuvvm7jQ7FWpSTt1nOVq1awdKlv2GPPb7FkiUPevTdUG1s27at0UHsJIkne+p18jbL2YIF3wFO\nZcyYKcCpHn030Lhx01i69J6mSeDbtm1j6dJ7GDcu++JVeX1Ix8yA9evXsHTpHbS1reWFF35GW9tW\nlixZzvr1a9h9930aHd4uZ86c93Pffddx5513AjsaHQ7Qxrhx05gz5/2ZW1JE5BBQdQsXUkxHZg20\nY8cOVq5cxvbtL470xowZy/77z6StzS90beTmzUOD3e+Rt1mO2traOPDAv2l0GE3n2WfXM2nS7o0O\no6V4KGBmdeWyyfpw8jazunLZZH04eZtZ3bhssn6cvM2sblw2WT9+w9LM6sJlk/Xl5G1mdTF16l6c\nd973/r+yyalT92pgVK3DydusQdaseYx99nl5XftoZImeyybry3PeZg2wePFtfOxjR7F48W1168Ml\neq3NydusAebPv4jt2+cwf/6/1K0Pl+i1Nidvs4ItXnwbq1dvZOzYK1m9+um6jL5dotf6nLzNCjZ/\n/kXAx2lr2wP4eF1G3y7Ra31+w9KsQL///VJWr34UuIHt2xcAW1m9+hF+//ulHHzwrFz6cInersGr\nCpoVaNu2bTzwwEJ6e7f239fe3sGRR85j7Nh8xlJe2bC1DLWqoJO3lU7W8reiyueq9ZNHHHn00Qxx\nFtVGGQ2VvP1n2Eola/lbUeVz1frJI448+miGOItqo9U4eVupZC1/K6p8rlo/ecSRRx/NEGdRbbQa\nJ28rjazlb0WVz1XrJ4848uijGeIsqo1W5ORtpZG1/K2o8rlq/eQRRx59NEOcRbXRilwqaKWQtfyt\nqPK5av3kEUcefTRDnEW10apcbWKlkLX8rajyuWr95BFHHn00Q5xFtVF2LhW0prCrlnuNVhErD+ah\niJLFrDGUlUsFreFc7jUyRaw8mIciShazxtCKnLytMC73GpkiVh7MQxEli1ljaEW5JG9J8yU9Kek3\nebRnrcflXiNTxMqDeSiiZDFrDK0qr5H3FcAJObVlLcjlXiNTxMqDeSiiZDFrDK0ql1LBiLhL0oF5\ntGWtx+VeI1PEyoN5KKJkMWsMrSy3apM0eS+MiFcNtt/VJrsul3uNTBErD+ahiJLFrDG0grqXClZL\n3l/6Unf09HT3b3d2dtHZ2ZVL32ZmrWqo5F3Yn3EnaytKtdroRx/9NYcccsSwbdRyTBGy1k8XUV+d\nVxs2Mnm+rlD6z6xhqtVGL1o0n7PPPpZFi+YP2UYtxxQha/10EfXVebVhI5dXqeC1wK+AGZL+JOm0\nPNo1G6lqtdFXXPFl4Jj0/8HVckwRstZPF1FfnVcbNnK5JO+IODki9o2IcRFxQERckUe7ZiNRrTZ6\n0aL5bNo0FriKTZvGDjqyruWYImStny6ivjqvNmx0WuPtWDOq10YnI+mzkPYAzhp0ZF3LMUXIWj9d\nRH11Xm3Y6DRP3ZFZBtVqo5csuZ1NmzYA/5eIHwK9bNq0gSVLbufww48HqOmYImStny6ivjqvNmz0\nvKqgtYRqtdFbt27l1lsvY+vWLf37OzrGMXfumXR0dADUdEwRstZPF1FfnVcbVp2XhLVdRhGlb0Ut\n1eoSPPOSsLZLKKL0railWl2CZ8Nx8raWUkTpW1FLtboEz4bj5G0to4jSt6KWanUJnlXj5G0to4jS\nt6KWanUJnlXjUkFrCUWUvhW1VKtL8KwWrjaxllBE6VtRS7W6BM8quVTQ6q5ZytryWGnPrFm4VNDq\nqlnK2vJYac+sDJy8LRfNUtaWx0p7ZmXg5G2ZNUtZWx4r7ZmVhZO3ZdYsZW15rLRnVhYuFbRMmqWs\nLY+V9szKxNUmlkmzlLXlsdKeWTNyqaANq5byuaJW0suqiFUF/aW9VhSXCtqQaimfK2olvayKWFXQ\nX9przcDJ22oqnytqJb2silhV0F/aa83AyXsXV0v5XFEr6WVVxKqC/tJeaxZO3ru4WsrnilpJL6si\nVhX0l/Zas3Cp4C6slvK5olbSy6qIVQX9pb3WTFxtsgurpXyuqJX0sipiVUF/aa81gksFzcxKyKWC\nZmYtxMnbzKyEmmfS0syshV38mXWjety8eXsMer+Tt5nZMK65Blb/bFkubd153IWjeNQPBr3XydvM\nmtr992d7fPdN6+CpJzO1ce6hC5l37sxsgQDwwRzaSDh5m1ldXHNN9jb6Rrz7Ttgw6jb2BX7w0Vth\n9uwMkeSRuPOVS/KWNBe4hOQN0PkR8ZU82jWzxhjt/OxOnnqSrj2zTTd88NDHchrxZknczSlz8pbU\nBnwTOA5YDTwgaUFEPJy1bTMbufvvh+7v/WH0DTz/PDDa+dkKM2ZkHO1CM454m0UeI+/ZwCMR8TiA\npOuBkwAnb7MRuvgz2ednAbr2XMZF735w9A3Mnk2e87OWvzyS93RgZcX2E7TiaxRrefffDysyLPCX\nW0XCR6/LYcQ6Dv8atja/YWkt4eKLc2hk+bJMc7Qz9oSLvjIuh0CcdK26PJL3KuCAiu390vt20tPT\nTU9Pd/92Z2cXnZ1dOXRvZZZ5fhb652jPPXRhpmbmHbcYPuipAiuHzAtTSRoD/I7kDcs1wP3A+yNi\neeVxXpiq9TTN/CzkMM1g1qTmzRt0YarMI++I2C7p48AiXiwVXF7lYZZR1g8uAHR/K/scrednzRoj\nlznviLgVeEUebe0K8pqfzfLBBYCuPdfkMEfrpGvWCH7DcoQyf3ghnWZojvnZPN5cM7NG2KWS98UX\nA8uzTRXkNz+b9cMH/vCC2a6ssOSdeXGZHOZnIf3UWKYRq+dnzazxCkveK753d6bH7zsBfnDZ+hwi\ncSmYmZVfYck7n8RrZmbgr0EzMyslJ28zsxLapapNbHSOPftsntm4sX978pQp/PyrX21gRGbm5G1V\nPbNxI/85ZUr/9msrErmZNYanTczMSsjJ28yshDxtYlVNnjJlp6mSyRVTKGbWGE7eVpXfnDRrPp42\nMTMrIY+8LTOXEpoVz8nbMnMpoVnxPG1iZlZCTt5mZiXkaRPLzKWEZsVz8rbM/OakWfE8bWJmVkIe\neVtV1UoBp7/3vdDb++ID2ttZdcMNucexx0kn0R7Rv90rsW7Bglz7cNmjlYWTt1VVtRSwt5dV7e39\nm9MrE3mO2iNYK/Vv712RyPPiskcrC0+bmJmVkJO3mVkJedrEqqpaCtjevvNUScUUSp56pZ2mSnor\nplDy4rJHKwtFHeYNB7VwYUEdmZm1kHnzBh2leNrEzKyEnLzNzErIc94NVK2mOI+a4yLaKKrOuwiu\n87aycPJuoGo1xXnUHBfSRkF13kVwnbeVhadNzMxKKFPylvQeSb+VtF3Sa/IKyszMhpd12qQHeCfw\n7Rxi2eVUqynOo+a4kDYKqvMuguu8rSxyqfOWdAfwzxGxeMiDXOdtZjZyrvM2M2sdVadNJN0O7FV5\nFxDAeRGxsNaOunt66O7p6d/u6uykq7NzBKGWSx7Ll1Zro5YSvWpt1FIaN+3tb2dcxfYWYMPNN9fc\nRy2x1hJHtTaKKFl0KaE1i6rJOyKOz6OjVk/WA+WxfGnVNmoo0avWRi2lceOAtRXbe480zhpiralE\nr9r5FlCy6FJCaxZ5Tpvkv0qQmZkNKmup4DskrQSOAm6R9JN8wjIzs+FkKhWMiB8BP8oplpaSx/Kl\nVduooUSvWhu1lMZtYeepki0jjbOGWGsq0at2vgWULLqU0JqFl4Q1M2tmLhU0M2sdXphqlMpSMlYt\nziK+kb2WOMxsZJy8R6ksJWPV4iziG9lricPMRsbTJmZmJeTkbWZWQp42GaWylIxVi7OIb2SvJQ4z\nGxmXCpqZNTOXCpqZtQ4nbzOzEnLyNjMrISdvM7MScvI2MyshJ28zsxJy8jYzKyEnbzOzEnLyNjMr\nISdvM7MScvI2MyshJ28zsxJy8jYzKyEnbzOzEnLyNjMrISdvM7MScvI2MyshJ28zsxJy8jYzKyEn\nbzOzEnLyNjMrISdvM7MScvI2MyuhTMlb0sWSlktaKukmSZPzCszMzIaWdeS9CDgsImYBjwCfyx6S\nmZlVkyl5R8RPI2JHunkvsF/2kMzMrJo857xPB36SY3tmZjaEsdUOkHQ7sFflXUAA50XEwvSY84De\niLi2LlGamdlOqibviDh+uP2SPgycCBw73HHdPT109/T0b3d1dtLV2VlblGZmtpOqyXs4kuYC5wBv\njIgtwx3rZG1mlp+sc96XAhOB2yUtlnRZDjGZmVkVmUbeEfHXeQViZma18ycszcxKyMnbzKyEnLzN\nzErIydvMrIScvM3MSkgRUVRfhXVkZtZCNNidHnmbmZWQk7eZWQk5eZuZlZCTt5lZCTl5m5mVkJP3\nMLq7uxsdQl204nm14jmBz6tsijwvJ+9h+AesPFrxnMDnVTZO3mZmNiwnbzOzEiryE5alI6krIrob\nHUfeWvG8WvGcwOdVNkWel5O3mVkJedrEzKyEnLzNzErIybsKSRdLWi5pqaSbJE1udExZSXqPpN9K\n2i7pNY2OJytJcyU9LGmFpM80Op48SJov6UlJv2l0LHmStJ+kn0t6SFKPpLMaHVMeJI2TdJ+kJel5\nXVDvPp28q1sEHBYRs4BHgM81OJ489ADvBH7R6ECyktQGfBM4ATgMeL+kVzY2qlxcQXJOrWYbcHZE\nHAa8DvhYKzxfEbEFeHNEHA7MAv5W0ux69unkXUVE/DQidqSb9wL7NTKePETE7yLiEYZYJ7hkZgOP\nRMTjEdELXA+c1OCYMouIu4ANjY4jbxGxNiKWprefA5YD0xsbVT4iYnN6cxwwljp/h4GT98icDvyk\n0UHYTqYDKyu2n6BFkkGrk3QQySj1vsZGkg9JbZKWAGuB2yPigXr2N7aejZeFpNuBvSrvIvmreV5E\nLEyPOQ/ojYhrGxDiiNVyTmaNImkicCPwyXQEXnrpK/TD0/fFfiRpZkQsq1d/Tt5ARBw/3H5JHwZO\nBI4tJKAcVDunFrIKOKBie7/0PmtSksaSJO6rI2JBo+PJW0Q8I+kOYC5Qt+TtaZMqJM0FzgHenr4p\n0WrKPu/9AHCIpAMldQDvA25ucEx5EeV/fgZzObAsIr7e6EDyIumlkqaktycAxwMP17NPJ+/qLgUm\nArdLWizpskYHlJWkd0haCRwF3CKptPP4EbEd+DhJVdBDwPURsbyxUWUn6VrgV8AMSX+SdFqjY8qD\npKOBDwDHpmV1i9MBUtntA9whaSnJHP5tEfHjenboj8ebmZWQR95mZiXk5G1mVkJO3mZmJeTkbWZW\nQk7eZmYl5ORtZlZCTt5mZiXk5G1mVkL/D3RlkczMDHUKAAAAAElFTkSuQmCC\n", + "image/png": "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\nS09v78B2d1cX3V1ddYRaLnksX1qtjVpK9Kq1UUtp3PR3vIPxFdubgfU33VRzH7XEWksc1dooomTR\npYTWKqom74g4No+O2j1ZD5bH8qVV26ihRK9aG7WUxo0H1lRs71FvnDXEWlOJXrXzLaBk0aWE1iry\nnDbJf5UgMzMbUtZSwXdKWgEcAdws6cf5hGVmZiPJVCoYET8EfphTLG0lj+VLq7ZRQ4letTZqKY3b\nzI5TJZvrjbOGWGsq0at2vgWULLqU0FqFl4Q1M2tlLhU0M2sfXphqlMpSMlYtziK+kb2WOMysPk7e\no1SWkrFqcRbxjey1xGFm9fG0iZlZCTl5m5mVkKdNRqksJWPV4iziG9lricPM6uNSQTOzVuZSQTOz\n9uHkbWZWQk7eZmYl5ORtZlZCTt5mZiXk5G1mVkJO3mZmJeTkbWZWQk7eZmYl5ORtZlZCTt5mZiXk\n5G1mVkJO3mZmJeTkbWZWQk7eZmYl5ORtZlZCTt5mZiXk5G1mVkJO3mZmJeTkbWZWQk7eZmYl5ORt\nZlZCTt5mZiWUKXlLukjScklLJd0oaUpegZmZ2fCyjrwXAQdHxCHAI8DnsodkZmbVZEreEfGTiNie\nbt4D7J09JDMzqybPOe/TgB/n2J6ZmQ1jbLUDJN0G7F55FxDAuRGxMD3mXKAvIq5pSJRmZraDqsk7\nIo4dab+kDwPHA0ePdFxPby89vb0D291dXXR3ddUWpZmZ7aBq8h6JpLnA2cCbImLzSMc6WZuZ5Sfr\nnPclwCTgNkmLJV2aQ0xmZlZFppF3RPxlXoGYmVnt/AlLM7MScvI2MyshJ28zsxJy8jYzKyEnbzOz\nElJEFNVXYR2ZmbURDXWnR95mZiXk5G1mVkJO3mZmJeTkbWZWQk7eZmYl5OQ9gp6enmaH0BDteF7t\neE7g8yqbIs/LyXsE/gErj3Y8J/B5lY2Tt5mZjcjJ28yshIr8hGXpSOqOiJ5mx5G3djyvdjwn8HmV\nTZHn5eRtZlZCnjYxMyshJ28zsxJy8q5C0kWSlktaKulGSVOaHVNWkt4r6TeStkl6bbPjyUrSXEkP\nSXpY0meaHU8eJM2X9KSkXzc7ljxJ2lvSzyQ9KKlX0pnNjikPksZLulfSkvS8zm90n07e1S0CDo6I\nQ4BHgM81OZ489ALvAn7e7ECyktQBfAM4DjgY+ICkVzU3qlxcTnJO7WYrcFZEHAy8HvhYOzxfEbEZ\neEtEHAocAvy1pNmN7NPJu4qI+ElEbE837wH2bmY8eYiI30bEIwyzTnDJzAYeiYjHI6IPuA44ockx\nZRYRdwLrmx1H3iJiTUQsTW8/BywHZjQ3qnxExKb05nhgLA3+DgMn7/qcBvy42UHYDmYAKyq2n6BN\nkkG7k7Q/ySj13uZGkg9JHZKWAGuA2yLi/kb2N7aRjZeFpNuA3SvvIvmreW5ELEyPORfoi4hrmhBi\n3Wo5J7NmkTQJuAH4ZDoCL730Ffqh6ftiP5Q0KyKWNao/J28gIo4dab+kDwPHA0cXElAOqp1TG1kJ\n7FuxvXd6n7UoSWNJEvdVEbGg2fHkLSKekXQ7MBdoWPL2tEkVkuYCZwPvSN+UaDdln/e+HzhQ0n6S\nOoH3Azc1Oaa8iPI/P0O5DFgWEV9rdiB5kfRSSVPT2xOBY4GHGtmnk3d1lwCTgNskLZZ0abMDykrS\nOyWtAI4AbpZU2nn8iNgGfJykKuhB4LqIWN7cqLKTdA3wS2CmpD9KOrXZMeVB0pHAB4Gj07K6xekA\nqez2BG6XtJRkDv/WiPhRIzv0x+PNzErII28zsxJy8jYzKyEnbzOzEnLyNjMrISdvM7MScvI2Mysh\nJ28zsxJy8jYzK6H/D2NOu16iCeDQAAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -441,9 +441,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n8Om7SNUfDAAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -494,7 +494,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 8, "metadata": { "collapsed": false }, @@ -505,10 +505,13 @@ "text": [ "## Adaline\n", "\n", - "*Adaline(eta=0.01, epochs=50, solver='sgd', random_seed=None, shuffle=False, zero_init_weight=False, print_progress=0)*\n", + "*Adaline(eta=0.01, epochs=50, minibatches=None, random_seed=None, print_progress=0)*\n", "\n", "ADAptive LInear NEuron classifier.\n", "\n", + " Note that this implementation of Adaline expects binary class labels\n", + " in {0, 1}.\n", + "\n", "**Parameters**\n", "\n", "- `eta` : float (default: 0.01)\n", @@ -518,27 +521,21 @@ "- `epochs` : int (default: 50)\n", "\n", " Passes over the training dataset.\n", + " Prior to each epoch, the dataset is shuffled\n", + " if `minibatches > 1` to prevent cycles in stochastic gradient descent.\n", "\n", - "- `solver` : {'gd', 'sgd', 'normal equation'} (default: 'sgd')\n", - "\n", - " Method for solving the cost function. 'gd' for gradient descent,\n", - " 'sgd' for stochastic gradient descent, or 'normal equation' (default)\n", - " to solve the cost function analytically.\n", + "- `minibatches` : int (default: None)\n", "\n", - "- `shuffle` : bool (default: False)\n", - "\n", - " Shuffles training data every epoch if True to prevent circles.\n", + " The number of minibatches for gradient-based optimization.\n", + " If None: Normal Equations (closed-form solution)\n", + " If 1: Gradient Descent learning\n", + " If len(y): Stochastic Gradient Descent (SGD) online learning\n", + " If 1 < minibatches < len(y): SGD Minibatch learning\n", "\n", "- `random_seed` : int (default: None)\n", "\n", " Set random state for shuffling and initializing the weights.\n", "\n", - "- `zero_init_weight` : bool (default: False)\n", - "\n", - " If True, weights are initialized to zero instead of small random\n", - " numbers in the interval [-0.1, 0.1];\n", - " ignored if solver='normal equation'\n", - "\n", "- `print_progress` : int (default: 0)\n", "\n", " Prints progress in fitting to stderr if not solver='normal equation'\n", @@ -547,12 +544,15 @@ " 2: 1 plus time elapsed\n", " 3: 2 plus estimated time until completion\n", "\n", - "\n", "**Attributes**\n", "\n", - "- `w_` : 1d-array\n", + "- `w_` : 2d-array, shape={n_features, 1}\n", + "\n", + " Model weights after fitting.\n", "\n", - " Weights after fitting.\n", + "- `b_` : 1d-array, shape={1,}\n", + "\n", + " Bias unit after fitting.\n", "\n", "- `cost_` : list\n", "\n", @@ -562,15 +562,9 @@ "\n", "
\n", "\n", - "*activation(X)*\n", - "\n", - "Compute the linear activation from the net input.\n", - "\n", - "
\n", - "\n", - "*fit(X, y, init_weights=True)*\n", + "*fit(X, y, init_params=True)*\n", "\n", - "Learn weight coefficients from training data.\n", + "Learn model from training data.\n", "\n", "**Parameters**\n", "\n", @@ -583,10 +577,11 @@ "\n", " Target values.\n", "\n", - "- `init_weights` : bool (default: True)\n", + "- `init_params` : bool (default: True)\n", "\n", - " Re-initializes weights prior to fitting. Set False to continue\n", - " training with weights from a previous fitting.\n", + " Re-initializes model parametersprior to fitting.\n", + " Set False to continue training with weights from\n", + " a previous model fitting.\n", "\n", "**Returns**\n", "\n", @@ -595,15 +590,28 @@ "\n", "
\n", "\n", - "*net_input(X)*\n", + "*predict(X)*\n", + "\n", + "Predict targets from X.\n", + "\n", + "**Parameters**\n", + "\n", + "- `X` : {array-like, sparse matrix}, shape = [n_samples, n_features]\n", + "\n", + " Training vectors, where n_samples is the number of samples and\n", + " n_features is the number of features.\n", + "\n", + "**Returns**\n", + "\n", + "- `target_values` : array-like, shape = [n_samples]\n", "\n", - "Compute the linear net input.\n", + " Predicted target values.\n", "\n", "
\n", "\n", - "*predict(X)*\n", + "*score(X, y)*\n", "\n", - "Predict class labels of X.\n", + "Compute the prediction accuracy\n", "\n", "**Parameters**\n", "\n", @@ -612,11 +620,16 @@ " Training vectors, where n_samples is the number of samples and\n", " n_features is the number of features.\n", "\n", + "- `y` : array-like, shape = [n_samples]\n", + "\n", + " Target values (true class labels).\n", + "\n", "**Returns**\n", "\n", - "- `class_labels` : array-like, shape = [n_samples]\n", + "- `acc` : float\n", "\n", - " Predicted class labels.\n", + " The prediction accuracy as a float\n", + " between 0.0 and 1.0 (perfect score).\n", "\n", "\n" ] @@ -626,6 +639,15 @@ "with open('../../api_modules/mlxtend.classifier/Adaline.md', 'r') as f:\n", " print(f.read())" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/docs/sources/user_guide/classifier/Adaline_files/Adaline_20_1.png b/docs/sources/user_guide/classifier/Adaline_files/Adaline_20_1.png index 3df7a1237..259ab5ddf 100644 Binary files a/docs/sources/user_guide/classifier/Adaline_files/Adaline_20_1.png and b/docs/sources/user_guide/classifier/Adaline_files/Adaline_20_1.png differ diff --git a/docs/sources/user_guide/classifier/Adaline_files/Adaline_20_3.png b/docs/sources/user_guide/classifier/Adaline_files/Adaline_20_3.png index b1b457a32..bf018deba 100644 Binary files a/docs/sources/user_guide/classifier/Adaline_files/Adaline_20_3.png and b/docs/sources/user_guide/classifier/Adaline_files/Adaline_20_3.png differ diff --git a/docs/sources/user_guide/classifier/Adaline_files/Adaline_22_1.png b/docs/sources/user_guide/classifier/Adaline_files/Adaline_22_1.png index ad1ccf16d..b7d767824 100644 Binary files a/docs/sources/user_guide/classifier/Adaline_files/Adaline_22_1.png and b/docs/sources/user_guide/classifier/Adaline_files/Adaline_22_1.png differ diff --git a/docs/sources/user_guide/classifier/Adaline_files/Adaline_22_2.png b/docs/sources/user_guide/classifier/Adaline_files/Adaline_22_2.png index 5ecff8c0d..0eb13b91c 100644 Binary files a/docs/sources/user_guide/classifier/Adaline_files/Adaline_22_2.png and b/docs/sources/user_guide/classifier/Adaline_files/Adaline_22_2.png differ diff --git a/docs/sources/user_guide/classifier/Adaline_files/Adaline_24_1.png b/docs/sources/user_guide/classifier/Adaline_files/Adaline_24_1.png index af7179a38..02e935c81 100644 Binary files a/docs/sources/user_guide/classifier/Adaline_files/Adaline_24_1.png and b/docs/sources/user_guide/classifier/Adaline_files/Adaline_24_1.png differ diff --git a/docs/sources/user_guide/classifier/Adaline_files/Adaline_24_2.png b/docs/sources/user_guide/classifier/Adaline_files/Adaline_24_2.png index 3824411d5..52412efe6 100644 Binary files a/docs/sources/user_guide/classifier/Adaline_files/Adaline_24_2.png and b/docs/sources/user_guide/classifier/Adaline_files/Adaline_24_2.png differ diff --git a/docs/sources/user_guide/classifier/LogisticRegression.ipynb b/docs/sources/user_guide/classifier/LogisticRegression.ipynb index 47565e1a4..a88f22b40 100644 --- a/docs/sources/user_guide/classifier/LogisticRegression.ipynb +++ b/docs/sources/user_guide/classifier/LogisticRegression.ipynb @@ -15,7 +15,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 1, "metadata": { "collapsed": false }, @@ -25,15 +25,15 @@ "output_type": "stream", "text": [ "Sebastian Raschka \n", - "last updated: 2016-02-23 \n", + "last updated: 2016-05-01 \n", "\n", "CPython 3.5.1\n", "IPython 4.0.3\n", "\n", "matplotlib 1.5.1\n", - "numpy 1.10.4\n", + "numpy 1.11.0\n", "scipy 0.17.0\n", - "mlxtend 0.3.1.dev0\n" + "mlxtend 0.4.1.dev0\n" ] } ], @@ -44,7 +44,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 2, "metadata": { "collapsed": true }, @@ -459,7 +459,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 3, "metadata": { "collapsed": false }, @@ -468,14 +468,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch: 100/100 | Cost 0.27 | Elapsed: 0:00:00 | ETA: 0:00:00" + "Iteration: 100/100 | Cost 0.32 | Elapsed: 0:00:00 | ETA: 0:00:00" ] }, { "data": { - "image/png": "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\ncHELnbAUEemjrsm5usbPO01degPNs4ZlPZbkBS7yJm8zWwKMiz4EOHCdu7fkftaBWtvaaG1ryyw3\n1tfTWF/fh1DTJY7pS/O1UUiJXr42CimNG3PeeUTnl+sAtj38cMH7KCTWQuLI10YSJYsqJRzAuo2b\ndJ+c64I7p9M8c1fXBsfXlbRnnjd5u/tZceyo2pN1d3FMX5q3jQJK9PK1UUhp3FBgU2T5iL7GWUCs\nBZXo5TveBEoWVUooWSJnNH/YkD2XS9Zl50LRybkmTy7uhGicwybxzxIkIpJGM2YcMMvinNkd0NY1\nn0vr0jpaW/v/o6JiSwU/DHwLeAvwEzNb7e4fKqZNEZFqlOviFi2twzOLmR8VhZNz5bu4RVHJ290f\nAh4qpo1qFcf0pXnbKKBEL18bhZTGdZA9VNLRbX1Bx5on1oJK9PIdbwIliyollNg0NNAUGTZpomsM\nvaV1OM1Lm2heCk1/zX1BC81tIiJSyZqacvb8apKOQ0REiqc6735KS8lYvjiTuCJ7IXGISN8oefdT\nWkrG8sWZxBXZC4lDRPpGwyYiIimk5C0ikkIaNumntJSM5YsziSuyFxKHiPSNSgVFRCqZSgVFRKqH\nkreISAopeYuIpJCSt4hICil5i4ikkJK3iEgKKXmLiKSQkreISAopeYuIpJCSt4hICil5i4ikkJK3\niEgKKXmLiKSQkreISAopeYuIpJCSt4hICil5i4ikkJK3iEgKKXmLiKSQkreISAopeYuIpJCSt4hI\nCil5i4ikUFHJ28yazWytma02swfNbGRcgYmISM+K7XkvBqa4+4nAc8CXig9JRETyKSp5u/sv3H1/\nuPgUcFTxIYmISD5xjnlfCvw8xvZERKQHg/NtYGZLgHHRhwAHrnP3lnCb64A97n5vSaIUEZEseZO3\nu5/V23ozuwQ4B5jW23atbW20trVllhvr62msry8sShERyZI3effGzKYDVwN/7+4dvW2rZC0iEp9i\nx7y/BQwHlpjZSjO7LYaYREQkj6J63u7+d3EFIiIihdMvLEVEUkjJW0QkhZS8RURSSMlbRCSFlLxF\nRFLI3D2pfSW2IxGRKmK5HlTPW0QkhZS8RURSSMlbRCSFlLxFRFJIyVtEJIWUvHvR2tpa7hBKohqP\nqxqPCXRcaZPkcSl590IfsPSoxmMCHVfaKHmLiEivlLxFRFIoyV9Ypo6ZNbp7a7njiFs1Hlc1HhPo\nuNImyeNS8hYRSSENm4iIpJCSt4hICil552FmzWa21sxWm9mDZjay3DEVy8w+YmZ/MLN9ZnZyueMp\nlplNN7PXUCoSAAACWUlEQVRnzWydmc0udzxxMLN5ZrbZzH5f7ljiZGZHmdkvzeyPZtZmZleWO6Y4\nmNlQM1tuZqvC47qh1PtU8s5vMTDF3U8EngO+VOZ44tAG/BPwq3IHUiwzqwG+DZwNTAEuNLN3lDeq\nWMwnOKZqsxe4yt2nAKcBV1TD++XuHcD73f0k4ETgQ2bWUMp9Knnn4e6/cPf94eJTwFHljCcO7v4/\n7v4cPcwTnDINwHPu/md33wPcB5xf5piK5u5PANvKHUfc3H2Tu68O778BrAUmlDeqeLj7zvDuUGAw\nJb6GgZJ331wK/LzcQUiWCcD6yPIrVEkyqHZmNomgl7q8vJHEw8xqzGwVsAlY4u5Pl3J/g0vZeFqY\n2RJgXPQhgv81r3P3lnCb64A97n5vGULss0KOSaRczGw48ADw+bAHnnrhN/STwvNiD5lZnbuvKdX+\nlLwBdz+rt/VmdglwDjAtkYBikO+YqsgG4JjI8lHhY1KhzGwwQeK+x90XlTueuLn7a2b2GDAdKFny\n1rBJHmY2HbgaOC88KVFt0j7u/TRwnJlNNLNa4OPAw2WOKS5G+t+fXO4A1rj7N8odSFzM7C1mNiq8\nPww4C3i2lPtU8s7vW8BwYImZrTSz28odULHM7MNmth54L/ATM0vtOL677wM+R1AV9EfgPndfW96o\nimdm9wJPApPN7GUzm1numOJgZmcAnwCmhWV1K8MOUtodCTxmZqsJxvAfdfeflXKH+nm8iEgKqect\nIpJCSt4iIimk5C0ikkJK3iIiKaTkLSKSQkreIiIppOQtIpJCSt4iIin0/wFhbFUxO0URTQAAAABJ\nRU5ErkJggg==\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -483,9 +483,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\nAEmqqf8PT7AdEeN+HZcAAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -538,7 +538,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 4, "metadata": { "collapsed": false }, @@ -558,7 +558,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 6, "metadata": { "collapsed": false }, @@ -567,12 +567,12 @@ "name": "stdout", "output_type": "stream", "text": [ - "Last 3 Class Labels: [ 0.99999716 0.99547815 0.9999811 ]\n" + "Last 3 Class Labels: [ 0.99997968 0.99339873 0.99992707]\n" ] } ], "source": [ - "y_pred = lr.activation(X)\n", + "y_pred = lr.predict_proba(X)\n", "print('Last 3 Class Labels: %s' % y_pred[-3:])" ] }, @@ -592,7 +592,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 7, "metadata": { "collapsed": false }, @@ -601,14 +601,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch: 30/30 | Cost 0.27 | Elapsed: 0:00:00 | ETA: 0:00:00" + "Iteration: 30/30 | Cost 0.27 | Elapsed: 0:00:00 | ETA: 0:00:00" ] }, { "data": { - "image/png": "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\nRZUSSqNITN7uflwaHTV7su4vjcuXJrZRQYleUhuVlMYNA1YVLO8x0DgriLWiEr2k/c2gZFGlhNIo\n0pw2Sf8qQSIiUlS1pYLvNrNlwBHAD83snnTCEhGRcqoqFXT3u4C7UoqlqaRx+dLENioo0Utqo5LS\nuG76TpV0DzTOCmKtqEQvaX8zKFlUKaE0Cl0SVkSkkalUUESkeejCVDsoLyVjSXFm8YvslcQhIgOj\n5L2D8lIylhRnFr/IXkkcIjIwmjYREckhJW8RkRzStMkOykvJWFKcWfwieyVxiMjAqFRQRKSRqVRQ\nRKR5KHmLiOSQkreISA4peYuI5JCSt4hIDil5i4jkkJK3iEgOKXmLiOSQkreISA4peYuI5JCSt4hI\nDil5i4jkkJK3iEgOKXmLiOSQkreISA4peYuI5JCSt4hIDil5i4jkkJK3iEgOKXmLiOSQkreISA4p\neYuI5JCSt4hIDlWVvM1sppktMbNFZnanmY1KKzARESmt2pH3PGCyux8CPAF8qvqQREQkSVXJ291/\n5u7b4uLDwN7VhyQiIknSnPM+C7gnxfZERKSE1qQNzOxeYPfCmwAHLnP3uXGby4DN7n5LTaIUEZE+\nEpO3ux9Xbr2ZnQGcAEwtt11nVxedXV29yx3t7XS0t1cWpYiI9JGYvMsxs2nARcDb3L273LZK1iIi\n6al2zvurwAjgXjNbYGazUohJREQSVDXydvfXpRWIiIhUTt+wFBHJISVvEZEcUvIWEckhJW8RkRxS\n8hYRySFz96z6yqwjEZEmYsVu1MhbRCSHlLxFRHJIyVtEJIeUvEVEckjJW0Qkh5S8y+js7Kx3CDXR\njPvVjPsE2q+8yXK/lLzL0AmWH824T6D9yhslbxERKUvJW0Qkh7L8hmXumFmHu3fWO460NeN+NeM+\ngfYrb7LcLyVvEZEc0rSJiEgOKXmLiOSQkncCM5tpZkvMbJGZ3Wlmo+odU7XM7D1m9nsz22pmb6p3\nPNUys2lm9riZLTWzS+odTxrMbLaZPWdmv6t3LGkys73N7Bdm9gcz6zKz8+sdUxrMbJiZPWJmC+N+\nfabWfSp5J5sHTHb3Q4AngE/VOZ40dAH/APyy3oFUy8xagK8B7wQmA+8zs9fXN6pUXE/Yp2azBbjQ\n3ScDRwLnNcPj5e7dwLHufihwCHC8mU2pZZ9K3gnc/Wfuvi0uPgzsXc940uDu/+PuT1DiOsE5MwV4\nwt3/7O6bgduAk+scU9Xc/VfA2nrHkTZ3X+Xui+LfLwFLgPH1jSod7r4h/jkMaKXGv2Gg5D0wZwH3\n1DsI6WNlJI+hAAABdElEQVQ8sKxg+VmaJBk0OzObSBilPlLfSNJhZi1mthBYBdzr7o/Wsr/WWjae\nF2Z2L7B74U2EV83L3H1u3OYyYLO731KHEAeskn0SqRczGwHcAVwQR+C5F9+hHxo/F7vLzCa5++Ja\n9afkDbj7ceXWm9kZwAnA1EwCSkHSPjWR5cC+Bct7x9ukQZlZKyFx3+zuc+odT9rc/QUzuw+YBtQs\neWvaJIGZTQMuAk6KH0o0m7zPez8K7G9mE8ysDTgVuLvOMaXFyP/jU8x1wGJ3/3K9A0mLmb3KzEbH\nv4cDxwGP17JPJe9kXwVGAPea2QIzm1XvgKplZu82s2XAEcAPzSy38/juvhX4GKEq6A/Abe6+pL5R\nVc/MbgEeAg4ws2fM7Mx6x5QGMzsaeD8wNZbVLYgDpLzbE7jPzBYR5vB/6u4/rmWH+nq8iEgOaeQt\nIpJDSt4iIjmk5C0ikkNK3iIiOaTkLSKSQ0reIiI5pOQtIpJDSt4iIjn0vwSuZX7V87m+AAAAAElF\nTkSuQmCC\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -616,9 +616,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -676,7 +676,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 8, "metadata": { "collapsed": false }, @@ -685,14 +685,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch: 30/30 | Cost 0.21 | Elapsed: 0:00:00 | ETA: 0:00:00" + "Iteration: 30/30 | Cost 0.23 | Elapsed: 0:00:00 | ETA: 0:00:00" ] }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAW8AAAEKCAYAAADdBdT9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XucHFWd9/HPbzKZEMg9cksCCYhBBgYBJdzXIS4SkAH3\n8RJAFAKrjwQXHlECygOssro47gLegj4arhFQQAmjAsHISDRC0CQ4mrDhIhJyQUxiCAlMbuf545yZ\nVPd0T/ekq6u7er7v12te011dfepX1dW/rj71q9PmnENERNKlrtIBiIhI3yl5i4ikkJK3iEgKKXmL\niKSQkreISAopeYuIpJCSN2Bm55rZI7v43D+Z2T/FHVO1M7NfmNnHKx1HuZjZ+WY2P4Hl7Gdmr5uZ\nlXtZuyJ7O5jZRjObULmIpEvqkreZ/cXMJsfZpnPubufclCKWfZuZfTnruYc5557oy/LMbLyZ7Qhv\n2tfN7EUzu7KvcVeSc+5059xdSS/XzAaa2X+b2YrItrsx8nic+0fsF0Fkx+ecW+GcG+Z24YILM9vH\nzP6fma0M2+J5M7vVzCbGG/XO7eCcG+qce6nUBnO9l3LMsyN8WLxuZq+Z2WNm9tFSl10uZnadmd2Z\n1PJSl7xriAOGO+eGAR8BrjGz98W9EDMbEHebFfZF4CjgPWHbNQOLKhpRBZjZKGABMBg4IWyLo4Bf\nA6fkeU7a9gUHHB7W7WDgDuDbZnZNZcOqEs65VP0BfwEm53nsk8BzwN+BB4F9I4+9H3gWWA98B2gH\nLgyPnQ/Mj8x7E/AqsAF4BmgMbW8B3gJeB+Zkx4P/MPwi8Hx47tPA2Bxxjge2A3WRaU8Bn4vc3xe4\nH/gb8ALwb5HHdsPvyOuAPwNXACuyttGMEPubIa7e2js6xLoBWA38V5g+CLgrbM/1IcY9w2OPR7af\nAf8XeAlYA9wODIus6w7gE8Bfw/K/WMLr3wZcmuexO8N23RReo8+H6WcCfwrb61fAOyPPGQc8EOJ6\nDfhmdJ8Avh6e9wIwJfK8C4ClYTnPA5+KPDY6xLkeWAv8Ol98ke1TF+YZCdwKrAzP/Umedf0PYHGB\nbdXV9oVh27eH6T8Or/N6/PugMfKcUcBDYV94Evgy8ETk8R3AgeF2A/Bfoe3VwExgUHjsvcAK4HL8\ne2klcEHkfdrjvZQj/u5lRaZ9CL9Pjwz3hwE/AFaF5V0PWHjs7WH9/hFe33si7RwKzA3beDVwVWRf\nviq8pq8B9wIjCu3LwKlAZ/jbWOi1iSUXlnsBsQecJ3kDk8PGfhcwEPhm5E3ztrAznoVPZJeGjRxN\n3k+E2+/HJ7Kh4f7BwN7h9m3Al/PFg0+izwAHhftNXTtZjjfVdmBAuH8s8AZwVmQH+j1wNTAAmBB2\nplPC4zfgk+cwYExY5stZMS0Kjw0qor0FwMfC7d2BSeH2p4A5kTaOBIaEx6LJ+0JgeViv3fHJ8M6s\nHf57+Df74fg37cG7+PpfHd44FwOH5dk/To7cnxi27eSw7lfgP+Drw76wBJ+AdgvxHR/ZJ7aEdTPg\n08DKSLunARPC7ZPwCfmIcP+r+ERWF5Z5Qi/xZXyQAz8H7gmv7QDgpDzb4XfAtQW2Vde2vx1/hN6V\nWC8Ir9NA4EYiiQafrO4N2+NQ4BUyk/d2dibvm/AHScOBPcK+8pXw2HuBrcB1YT1OC9toeL73Uo74\ncyXv+tDuqeH+T8O23g3/Pn8S+GR47G7gC+F29LUdgk/2/ydM3wM4Ojx2Gf79sG/YPrcAdxezL4d1\nvTOxXJjUgmILOH/y/gFwQ+T+HvgEvT/wceC3WfO/TO7kfTL+CP0Ywid45DmFkvezwBlFrEPXTrAO\n2BzeEK2RxycBL2U95ypgVrj9AvDPkccuomfyPr8P7f067Hijs+aZBvwGaMqxDtHk/Uvg05HHJuIT\nXx07k1P0W9BTwEd38fU3fOKejz8CewX4RL79A/+N4N6s568A/gn/ofkqkW9AkfnOB5ZH7g8O67FX\nnrh+Svg2A3wp3H97of03sn26vh1tI3xrKbAdniPzaL8FfyT9OvBIVtvje2lnRNgXh4YYtgDviDz+\nFfIfeb8BHBB57DjgxXD7vfhkHf12+So7Dwx2KXmH6auBc4C98MlzUOSxs4F54fYdwHfJ+vYb5vlD\nnmUuJfPDdd9i92USTt611Oc9Bn9EBoBzbhM+OY4Nj63Imv+VXI045x4Hvo3vWnnVzL5rZkOKjGE/\n4MUi53X4r9d7AJ8Dms2sPjw2HhhrZuvC33rgC/idlbA+0fiz142sxwu1dyH+G8azZvaUmX0gTL8L\neBS418xeMbOv5ek3zdj24XY9sHdk2quR25vxRz8ZQuXFxq6TVDmWg/Nucc6dhE88XwVuNbODc82f\nHZvz77JX8PvFfsBfnXM78jx3TeR5b+IT/5AQ62lm9jszWxu252n4Iz/wXS0vAHPDScRiT0aPA9Y5\n53Kue5a1+MTSFV+bc24k8Fn8UWFU975gZnVmdkOI6x/4DxMXYt8Tf5Qc3Xf+Sg5mtif+6P0PXfsV\n8DB+n+6OMWvb5nzd+yK8R/bEv7fH44+OV0f26++Gx8F/y6oDFppZh5lNC9P3w78+uYwHfhpZp6X4\nI/0+7ctJqKXkvQq/4QEwsz3wO9JK/Cf1flnzj8vXkHPu28659+D7ug/G7wRQuPpgBb6frVgWktHN\n+G8J0yPtvOicGxX+RjrnhjvnWsLjq7Li3z/XamTFlbc959wLzrlznXN7Aq3A/WY22Dm3zTl3vXPu\nUOB44Ax8f1+2jG0fbm8lcycvyPnKi6Hhb1gR83c652bijzgbc6x3rtjA7wsr8dtlfzPr0/vAzBrw\n5w9a8ecARuITl4W43nDOfd4593Z8f/vlZnZynviiVgCjzKzgugPzgA8WGXJ0mefij9InO+dG4LvQ\nLPy9hj/yj75Xcu1b4M+DbAYOjexXI5xzw3chpr74IH7fWojfXm/hvzF27dcjnHOHAzjn/uac+5Rz\nbiy+22ummR1I7+/Tl4HTst4rezjnVpdxnXZJWpN3g5kNivwNwPcTTjOzw81sEP6I7Enn3Mv4fsTD\nzOxMMxtgZp8h85O0m5m9x8wmhU/4N/E7R9fRw6vAgb3E9QPgejM7KLTVZGYj88ybXdd7A3BlSAwL\ngY1mNsPMdgsxH2pm7wnz3gd8wcxGmNlY4JJeYqJQe2b2MTPrOmrcgN8Jd5hZs5kdFpLbG/g3zfYc\n7d8DfNbMJoRvKV/Bd1V0bbfYapjN7DIze29kPc7HH/l0VZxkv0Y/Bj5gZiebWb2ZfR7/mi7Ab5fV\nwA1mtnvYl44vIoyG8Pd359wOMzsNf66kK8YPmFlXctiIT4hd2y3XPtSV9NfgPwRmhte23sxOyhPD\njcBIM7srJCTMbChwRK62I4biDxTWhwOc/yQknfB6/QT4dzMbbGaN+O6jHsI3mO8DN4ejcMxsrJm9\nP9f8ORR6L2WuhNlIM/sY/lvxDc659WF7zQVuMrOh5h1o4boLM/tweH+AP2m5I/z9DNjHzC41swYz\nG2Jmk8J83wO+amb7hzb2NLMzo6EUWKcJZsnU7Kc1ef8c/6n/Zvh/nXNuHnANfudbCRyA79vCObcW\nX473dfwRwzvxJ/A6c7Q9DL9TrsN/pfx7eB7ALODQ8JXqJ2Fa9NP2RnyymGtmG/DJfHCedcj4lHbO\n/Tws85PhTXQG/o34F/xZ7e+H2MBXAKwMj83FJ/PoumS3Xai9KcCfQ1fFTcBU51wnsA/+CHMDvqrl\ncWB2jmXciu9ieQL/dXQz/qRwznhy3O+LzcB/45Pua/j+7//lnOv6ev+f+LLLdWZ2uXNuOXAe/k3/\nGvABoCV8q9iBPwp9B/6IawXQWx1xV5J7I6zffeGr9dn4k3Vd3gH80sw2Ar8FvuN2XguQEV+03eDj\n+GT/LD4ZXJYzEL9PH4v/IPpNeO0W4T/ILs6OOeLOsK4r8RU4C7Ie/zd8gl+Nf11vzbUNgivxJ76f\nDF0wc/HnO/KJPjfXeynX/M+EdXsO3713mXPuS5F5PoH/IF2Kf//ch99vwVdRPRWe/yC+Suml8Pqd\ngv9WtAZ/sr05POcb+Ney6z28AH/OKNc6ZN+/D5/c15rZ7/NuhZh0ldT0K+GT8RXgXOfcrysdT6nM\n7NP4hHtywZlFpCak9ci7z8zs/WY2PHSpXB0mP1nJmHaV+Svrjg9fEw/Gn/DMd/QiIjWovvAsvQvJ\n8An8V5d64P6srzXV4jh83edA/Fess0LXQBo14PvmJuD78u7B16OKSD8RS7eJme3unNscThz+Ft+3\ntLDkhkVEJKdYuk2cc5vDzUH4o+/+15EuIpKgkrtNwBf+A3/A105+xzn3dI7ZlNBFRPouZ+lhLMk7\nlFwdGS4ueNDMGp1zS6PztLe3097e3n2/ubmZ5ubmOBYvItLvxF4qaH64xk3OuRuzHtKRt4hI3+U8\n8i65z9vM3mZmw8Ptwfji92dLbVdERPKLo9tkX+CO0O9dB/zIOfeLGNoVEZE8krzCUt0mIiJ9V55u\nExERSZ6St4hICil5i4ikUCx13sVoa0tqSSIitaOlJff0xJK3iEjStm3bxvz5d/Dmm6+y8zdVKqmO\nwYP35qSTzqe+vrT0q+QtIjXrmWfmsv/+wzjllI8zcGD2T3smb+vWLTz22ByeeWYu73736SW1pT5v\nEalZa9cu44QT/rkqEjfAwIENHH/8ZNauXVZyW0reIlKztm17k6FDi/1N5GQMGzaSbdtK/ykBJW8R\nqWl1ddWV5nw8pfe/V9daiYhIUZS8RURSSMlbRCQGa9as4IwzGmlsrOfd7x7Kt751bVmXp+QtIhKD\n6dNbaGho4Mkn/86XvnQL3/veDTz11K/KtjwlbxGREm3YsJ5lyzq49tpbGDZsBGeccR6Nje/izjtv\nKtsydZGOiEiWD5y4D9s3v5ExbcDuQ/j5b9bknH/Jkt9iZhxxxHHd0yZOPIzFi58sW4xK3iIiWbZv\nfoPnd98jY9pBWck8asOG9TQ0ZF4INHToCN56682yxAfqNhERKdnw4SPZsmVLxrTXX1/PbrsNLtsy\nlbxFREp0xBEn4JxjyZLfdU9bvvxPTJhwUNmWqeQtIpJlwO5DOGjzpoy/AbsPyTv/8OEjOeSQw7n+\n+kvYsGE9Dz10F8uW/ZFPfOKzZYtRfd4iIlnynZjszcyZD/Gv/3oqxx23J7vtNpjp07/IMcdMLkN0\nnpK3iEgM9tlnP372s6WJLU/dJiIiKaTkLSKSQkreIiIppOQtIpJCSt4iIimk5C0ikkJK3iIiKaTk\nLSKSQkreIiIppOQtIhKDL3/5Yk48cR8OOWQAZ599TNmXV3LyNrNxZvYrM/uzmXWY2aVxBCYikiZj\nx07goos+x9FHn5jI8uI48t4GXO6cOxQ4DrjEzN4ZQ7siIhXT2dnJtdf+bzZv3lTU/BdddCXTpl3B\n8OEjyxyZV3Lyds6tcc4tCbffAJYBY0ttV0Skkn74w28yZ047t9769UqHklOsfd5mNgE4AngqznZF\nRJLU2dnJHXfcS339DO6556dFH30nKbbkbWZDgPuBy8IRuIhIKv3wh99k06aJDB58EZ2dR1fl0Xcs\n43mbWT0+cd/lnJuTa56OjnY6Otq77zc1NdPU1BzH4kVEYtN11O3cxWzdugjnmrnnnlYuvPAKds/6\nUeJKiuvHGG4FljrnvpFvBiVrEUmDtWvXMGLEHuy2253AnQA0NIxgzZq/cuCBjXmft3XrFjo732LH\nju1s376dzZvfYODABgYObMj7nFKUnLzN7ATgY0CHmS0GHPBF59wjpbYtIpK0MWPGM2fOE31+3hVX\nnMvDDz/Qff/II4dy+ukf5qab7oszvG4lJ2/n3G+BATHEIiKSWjfffD8335zc8nSFpYhICil5i5TJ\nxo3rKh2C1DAlb5EyWLlyOVddNYWVK5dXOhSpUUreImUwZ8732bDhIB566AeVDkVqlJK3SMxWrlzO\nkiV/ZPToW1i8+BkdfVdUHdu2bat0EBl8PKWnXiVvkZjNmfN94HwGDBgOnK+j7woaNGgkS5b8rmoS\n+LZt21iy5HcMGlT64FVxXaQjIsC6datZsuRx6urW8NZb86ir28LixctYt241o0btW+nw+p1jjjmH\np566h/nz5wM7Kh0OUMegQSM55phzSm7JnHMxBFRYWxvJLEikgnbs2MGKFUvZvn3nkd6AAfXst18j\ndXX6oit919KC5ZquI2+RGNXV1TF+/GGVDqPqbNy4jqFDR1U6jJqiQwERKSuVTZaHkreIlJXKJstD\nyVtEykZlk+Wj5C0iZaOyyfLRCUsRKQuVTZaXkreIlMWIEXtz9dW39yibHDFi7wpGVTuUvEUqZPXq\nF9h337eXdRmVLNFT2WR5qc9bpAIWLXqUSy45lkWLHi3bMlSiV9uUvEUqYNas69m+/RhmzfqPsi1D\nJXq1TclbJGGLFj3KqlUbqK+/g1Wr/lGWo2+V6NU+JW+RhM2adT3wGerqRgOfKcvRt0r0ap9OWIok\n6MUXl7Bq1fPAfWzfPgfYwqpVz/Hii0s48MAjYlmGSvT6B40qKJKgbdu28fTTbWzduqV72sCBDRx9\ndAv19fEcS2lkw9qSb1RBJW9JnVLL35Iqnyu0nDjiiGMZ1RBnUm2kUb7krY9hSZVSy9+SKp8rtJw4\n4ohjGdUQZ1Jt1Bolb0mVUsvfkiqfK7ScOOKIYxnVEGdSbdQaJW9JjVLL35Iqnyu0nDjiiGMZ1RBn\nUm3UIiVvSY1Sy9+SKp8rtJw44ohjGdUQZ1Jt1CKVCkoqlFr+llT5XKHlxBFHHMuohjiTaqNWqdpE\nUqHU8rekyucKLSeOOOJYRjXEmVQbaadSQakK/bXca1clMfJgHJIoWSw1hrRSqaBUnMq9+iaJkQfj\nkETJYqkx1CIlb0mMyr36JomRB+OQRMliqTHUoliSt5nNMrNXzeyPcbQntUflXn2TxMiDcUiiZLHU\nGGpVXEfetwGnxtSW1CCVe/VNEiMPxiGJksVSY6hVsZQKOud+Y2bj42hLao/KvfomiZEH45BEyWKp\nMdSy2KpNQvJuc84dnutxVZv0Xyr36pskRh6MQxIli6XGUAvKXipYKHl/9avtrqOjvft+U1MzTU3N\nsSxbRKRW5UveiX2MK1lLUgrVRj///B846KB399pGMfMkodT66STqq+NqQ/omzu8VFv5EKqZQbfTc\nubO4/PLJzJ07K28bxcyThFLrp5Oor46rDem7uEoF7wYWABPN7GUzmxZHuyJ9Vag2+rbbbgBODP9z\nK2aeJJRaP51EfXVcbUjfxZK8nXPnOufGOOcGOef2d87dFke7In1RqDZ67txZbNpUD9zJpk31OY+s\ni5knCaXWTydRXx1XG7JrauN0rAiFa6P9kfSlmI0GLs15ZF3MPEkotX46ifrquNqQXVM9dUciJShU\nG7148WNs2rQe+DHO/RTYyqZN61m8+DGOPPIUgKLmSUKp9dNJ1FfH1YbsOo0qKDWhUG30li1beOSR\nmWzZ0tn9eEPDIKZMmU5DQwNAUfMkodT66STqq+NqQwrTkLDSbyRR+pbUUK0qwRMNCSv9QhKlb0kN\n1aoSPOmNkrfUlCRK35IaqlUleNIbJW+pGUmUviU1VKtK8KQQJW+pGUmUviU1VKtK8KQQlQpKTUii\n9C2poVpVgifFULWJ1IQkSt+SGqpVJXgSpVJBKbtqKWuLY6Q9kWqhUkEpq2opa4tjpD2RNFDyllhU\nS1lbHCPtiaSBkreUrFrK2uIYaU8kLZS8pWTVUtYWx0h7ImmhUkEpSbWUtcUx0p5ImqjaREpSLWVt\ncYy0J1KNKl4qOHVqz+R93nmJLFqKUEz5XFIj6ZUqiVEF9aO9kpSKlwpO7Lg/42/VvKW0Tv8LrVeu\n7f6TyiimfC6pkfRKlcSogvrRXqkGiR1509bWc0GzZ3ffvKbjI7T/rREGD86cZ+gwZnxtdLmj69dm\nzryCBQtWcsIJ47j44tac81xyyYm88soIxo3bwHe+Mz/hCItXzLqU2kYSyxDpku/Iu7InLCP9JtcD\nLLynxywn3XIOrdNe7TF9zPsa1e0Sg53lcz9m8eKPsnLlcsaOnZgxz86R9OawalUzixY9ylFHnVqh\niPMrZl1KbSOJZYgUo7qqTSZN6jFp/qQXekxra11K6zxonZc5fcz7GjPuT5yYs0mJyFU+l30kGB1J\nb8cOP5JeNSbvYtal1DaSWIZIMaoreRepZUYjLWQm9Wuu7ISOpRnT2uc10t6emdABZswoa3ipUUz5\nXFIj6ZUqiVEF9aO9Uk0q2+ddbgsX0tY+JGNS67IWfyPStz7m+AP6ZRdMMeVzSY2kV6okRhXUj/ZK\nJVS8VLAiyTufhQt33l6+nJPmXZdzthm39TxqFxFJkpJ3H02dPopVb47s+cBee9P8oZ3VL+pTF5Fy\nUvKOw8KFTL19SsakVW+OhEPUry4i5aHkXSZtrUt7TGtd1uL71IcOy5je/KHROlIXkT5R8k5a5AIk\niFyEFLXX3roASUR6peRdhU6alnuckDHva2Ri1jUbOmIX6Z+UvFOirXUps186MWNa14nT6EVIugBJ\npH8oa/I2synAzfiBrmY5577WYyYl75Jcc2Vnxv32vzXCXnv3mE/dMCK1pWzJ28zqgOXA+4BVwNPA\n2c65ZzNmVPKOV1afOrCzXj17cK8JB6j6RSSlypm8jwWuc86dFu5fBbgeR99K3smIXoAEeS9C0gVI\nIulQzlEFxwIrIvdfAdQbWynZHeGTJjH/vMxxYKZOH0XrtJ4ljuy1N2OaMrtd+uOwASJpUD2DU0hi\nfjRzHbAuc+LChVzzwLugY+ek5Rv3pXVez4uQ1AUjUnlxJO+VwP6R++PCtAztHR20d+zMDM1NTTQ3\nNcWweInFpElc3+P70jqY/U3aVh3VPaV1WQut0wdnz0jzBQeo+kUkQXH0eQ8A/gd/wnI1sBA4xzm3\nLGNG9XnXjqx+9WseeFfPC5AABg9mxswDEgpKpDYlUSr4DXaWCt7QYyYl734n10VIugBJpG90kY5U\nXG8XIEX71ZubldBFuih5S9WKDu61cO3bdQGSSISSt6RHdq06/oeoczqkUdUvUtOUvKX2zJ6d8wKk\n5ot7njxVN4yklZK39AtTp4/qMW3VmyN1AZKklpK39F/hh6gXrt1Z/bJ8477dSb3b6NHqgpGqo+Qt\nki1rcK+cP0Q9eLAuQJKKUvIW2QXXXNmpC5CkopS8ZZdNvvxyXt+wofv+sOHD+dWNN1YwosqbOn3U\nzhr1IPpjGV3Ury6lKueoglLjXt+wgd8PH959/z2RRN5fZQ/u1da6lIUdmSM1tv+tkdZ59OhXHzNG\nSV1Kp+QtEoOWGY209Jj6Qo9+9bZVR9E6r4XWBZmDe6kLRvpKyVuknLIOsVuAloX3ZEw76ZZzco+v\nrguQpBdK3lLQsOHDM7pKhkW6UGQXZJWuzJ/0Qs95wgVIrdN6PpR9EZIqYfonnbAUSZG8P0Q9OvMC\nJB2x1w5Vm4jUonABUtTsl070lTDZP0Q9dJgG90ohJW8pG5USVqEiB/dqvrhR3S5VTqWCUjYqJaxC\nOTJydt/6NVd20n4LtN+SNWO4qrRAc1JhSt4i/dT1XxsE9DxZOnX6KJbfvipjWvstmT9ErVr1ylPy\nFpEM/gKkLNk/RD2vpecFSMCYptFK6glR8paSqZSwHzjvvIyLkFp6uwBpXtZzNQ5MWeiEpYiUVa5x\nYDikkebmzEnqV89N1SYiUh1mz2bqgkszJnUldw3u1ZOSt+yyQqWAYz/yEdi6decTBg5k5X33xR7H\n6LPOYmBkf91qxto5c2JdhsoeKyf7AiQg549R97dadZUKyi4rWAq4dSsrBw7svjs2mshjNNA51tjO\n/XifMhx4qOyxcnz1S7YXYPaXuu9NXXAprdN0ARIoeYtItYv0m/zovHWw8JEes/jBvV7tMb2WL0JS\n8haRdCniAiTwY6y3Zl+ENHgwY47PrHxJa5+6krcUVLAUcODAzK6SSBdKnLaaZXSVbLWcXYElUdlj\n7fBjrPe8qpSOP2RMa53WmHEBUpdqH9xLJyxFpH+bPTvjAiSA1mWhqj3Stz7m+AMqcpSuahMRkb6I\nDO7V1j5kZ0LPMuO2HD9QHSMlbxGRmOW8AAl6XIRUyklTJe8qVKimOI6a4yTaSKrOOwmq85aSLVzI\n1NundN/tTu5Z/erFDu6lOu8qVKimOI6a40TaSKjOOwmq85aSTZrEjyZFB/daR1vrUqAtY7bWeS20\ndmRegATFX4Sk5C0iUmYtM3r2i7dkXYAEkYuQovP9PXefeknJ28w+DPw7cAhwtHNuUSntiYj0K1n9\nJj86bx2QPSRvGZI30AH8C/C9EtvplwrVFMdRc5xIGwnVeSdBdd6SFrGcsDSzx4HP9XrkrROWIiJ9\n19KS84RlXdJxiIhI6Qp2m5jZY0D0lKgBDrjaOdeW+1k9tXd00N7R0X2/uamJ5qamPoSaLnEMX1qo\njWJK9Aq1UUxp3MgzzyQ63lsnsP6hh4peRjGxFhNHoTaSKFlUKaFUi4LJ2zl3ShwLqvVknS2O4UsL\ntlFEiV6hNoopjRsErInc36evcRYRa1EleoXWN4GSRZUSSrWIs9sk/lGCREQkp5KSt5l90MxWAMcC\nPzOzh+MJS0REelNSqaBz7kHgwZhiqSlxDF9asI0iSvQKtVFMaVwnmV0l2T9WVdS6Foi1qBK9Quub\nQMmiSgmlWmhsExGRaqZSQRGR2qGxTXZRWkrGCsWZxC+yFxOHiPSNkvcuSkvJWKE4k/hF9mLiEJG+\nUbeJiEgKKXmLiKSQuk12UVpKxgrFmcQvshcTh4j0jUoFRUSqmUoFRURqh5K3iEgKKXmLiKSQkreI\nSAopeYuIpJCSt4hICil5i4ikkJK3iEgKKXmLiKSQkreISAopeYuIpJCSt4hICil5i4ikkJK3iEgK\nKXmLiKSQkreISAopeYuIpJCSt4hICil5i4ikkJK3iEgKKXmLiKSQkreISAopeYuIpFBJydvMWs1s\nmZktMbMHzGxYXIGJiEh+pR55zwUOdc4dATwHfKH0kEREpJCSkrdz7pfOuR3h7pPAuNJDEhGRQuLs\n874QeDgQhG3LAAADrElEQVTG9kREJI/6QjOY2WPA3tFJgAOuds61hXmuBrY65+4uS5QiIpKhYPJ2\nzp3S2+NmdgFwOjC5t/naOzpo7+jovt/c1ERzU1NxUYqISIaCybs3ZjYFuAL4J+dcZ2/zKlmLiMSn\n1D7vbwFDgMfMbJGZzYwhJhERKaCkI2/n3DviCkRERIqnKyxFRFJIyVtEJIWUvEVEUkjJW0QkhZS8\nRURSyJxzSS0rsQWJiNQQyzVRR94iIimk5C0ikkJK3iIiKaTkLSKSQkreIiIppOTdi/b29kqHUBa1\nuF61uE6g9UqbJNdLybsX2sHSoxbXCbReaaPkLSIivVLyFhFJoSSvsEwdM2t2zrVXOo641eJ61eI6\ngdYrbZJcLyVvEZEUUreJiEgKKXmLiKSQkncBZtZqZsvMbImZPWBmwyodU6nM7MNm9icz225mR1U6\nnlKZ2RQze9bMlpvZlZWOJw5mNsvMXjWzP1Y6ljiZ2Tgz+5WZ/dnMOszs0krHFAczG2RmT5nZ4rBe\n15V7mUrehc0FDnXOHQE8B3yhwvHEoQP4F+DXlQ6kVGZWB3wbOBU4FDjHzN5Z2ahicRt+nWrNNuBy\n59yhwHHAJbXwejnnOoGTnXNHAkcAp5nZpHIuU8m7AOfcL51zO8LdJ4FxlYwnDs65/3HOPUeecYJT\nZhLwnHPur865rcC9wFkVjqlkzrnfAOsrHUfcnHNrnHNLwu03gGXA2MpGFQ/n3OZwcxBQT5l/w0DJ\nu28uBB6udBCSYSywInL/FWokGdQ6M5uAP0p9qrKRxMPM6sxsMbAGeMw593Q5l1dfzsbTwsweA/aO\nTsJ/al7tnGsL81wNbHXO3V2BEPusmHUSqRQzGwLcD1wWjsBTL3xDPzKcF3vQzBqdc0vLtTwlb8A5\nd0pvj5vZBcDpwOREAopBoXWqISuB/SP3x4VpUqXMrB6fuO9yzs2pdDxxc869bmaPA1OAsiVvdZsU\nYGZTgCuAM8NJiVqT9n7vp4GDzGy8mTUAZwMPVTimuBjpf31yuRVY6pz7RqUDiYuZvc3Mhofbg4FT\ngGfLuUwl78K+BQwBHjOzRWY2s9IBlcrMPmhmK4BjgZ+ZWWr78Z1z24HP4KuC/gzc65xbVtmoSmdm\ndwMLgIlm9rKZTat0THEwsxOAjwGTQ1ndonCAlHb7Ao+b2RJ8H/6jzrlflHOBujxeRCSFdOQtIpJC\nSt4iIimk5C0ikkJK3iIiKaTkLSKSQkreIiIppOQtIpJCSt4iIin0/wF2tDz8HFL9VAAAAABJRU5E\nrkJggg==\n", + "image/png": "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\n8tuSAAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -700,9 +700,9 @@ }, { "data": { - "image/png": "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\nAABJRU5ErkJggg==\n", + "image/png": "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\nSUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -753,7 +753,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 9, "metadata": { "collapsed": false }, @@ -764,10 +764,13 @@ "text": [ "## LogisticRegression\n", "\n", - "*LogisticRegression(eta=0.01, epochs=50, regularization=None, l2_lambda=0.0, learning='sgd', shuffle=False, random_seed=None, zero_init_weight=False, print_progress=0)*\n", + "*LogisticRegression(eta=0.01, epochs=50, l2_lambda=0.0, minibatches=1, random_seed=None, print_progress=0)*\n", "\n", "Logistic regression classifier.\n", "\n", + " Note that this implementation of Logistic Regression\n", + " expects binary class labels in {0, 1}.\n", + "\n", "**Parameters**\n", "\n", "- `eta` : float (default: 0.01)\n", @@ -777,36 +780,25 @@ "- `epochs` : int (default: 50)\n", "\n", " Passes over the training dataset.\n", - "\n", - "- `learning` : str (default: sgd)\n", - "\n", - " Learning rule, sgd (stochastic gradient descent)\n", - " or gd (gradient descent).\n", - "\n", - "- `regularization` : {None, 'l2'} (default: None)\n", - "\n", - " Type of regularization. No regularization if\n", - " `regularization=None`.\n", + " Prior to each epoch, the dataset is shuffled\n", + " if `minibatches > 1` to prevent cycles in stochastic gradient descent.\n", "\n", "- `l2_lambda` : float\n", "\n", " Regularization parameter for L2 regularization.\n", " No regularization if l2_lambda=0.0.\n", "\n", - "- `shuffle` : bool (default: False)\n", + "- `minibatches` : int (default: 1)\n", "\n", - " Shuffles training data every epoch if True to prevent circles.\n", + " The number of minibatches for gradient-based optimization.\n", + " If 1: Gradient Descent learning\n", + " If len(y): Stochastic Gradient Descent (SGD) online learning\n", + " If 1 < minibatches < len(y): SGD Minibatch learning\n", "\n", "- `random_seed` : int (default: None)\n", "\n", " Set random state for shuffling and initializing the weights.\n", "\n", - "- `zero_init_weight` : bool (default: False)\n", - "\n", - " If True, weights are initialized to zero instead of small random\n", - " numbers in the interval [-0.1, 0.1];\n", - " ignored if solver='normal equation'\n", - "\n", "- `print_progress` : int (default: 0)\n", "\n", " Prints progress in fitting to stderr.\n", @@ -817,22 +809,26 @@ "\n", "**Attributes**\n", "\n", - "- `w_` : 1d-array\n", + "- `w_` : 2d-array, shape={n_features, 1}\n", + "\n", + " Model weights after fitting.\n", + "\n", + "- `b_` : 1d-array, shape={1,}\n", "\n", - " Weights after fitting.\n", + " Bias unit after fitting.\n", "\n", "- `cost_` : list\n", "\n", - " List of floats with sum of squared error cost (sgd or gd) for every\n", + " List of floats with cross_entropy cost (sgd or gd) for every\n", " epoch.\n", "\n", "### Methods\n", "\n", "
\n", "\n", - "*activation(X)*\n", + "*fit(X, y, init_params=True)*\n", "\n", - "Predict class probabilities of X from the net input.\n", + "Learn model from training data.\n", "\n", "**Parameters**\n", "\n", @@ -841,16 +837,26 @@ " Training vectors, where n_samples is the number of samples and\n", " n_features is the number of features.\n", "\n", + "- `y` : array-like, shape = [n_samples]\n", + "\n", + " Target values.\n", + "\n", + "- `init_params` : bool (default: True)\n", + "\n", + " Re-initializes model parametersprior to fitting.\n", + " Set False to continue training with weights from\n", + " a previous model fitting.\n", + "\n", "**Returns**\n", "\n", - "- `Class 1 probability` : float\n", + "- `self` : object\n", "\n", "\n", "
\n", "\n", - "*fit(X, y, init_weights=True)*\n", + "*predict(X)*\n", "\n", - "Learn weight coefficients from training data.\n", + "Predict targets from X.\n", "\n", "**Parameters**\n", "\n", @@ -859,30 +865,35 @@ " Training vectors, where n_samples is the number of samples and\n", " n_features is the number of features.\n", "\n", - "- `y` : array-like, shape = [n_samples]\n", + "**Returns**\n", "\n", - " Target values.\n", + "- `target_values` : array-like, shape = [n_samples]\n", "\n", - "- `init_weights` : bool (default: True)\n", + " Predicted target values.\n", "\n", - " (Re)initializes weights to small random floats if True.\n", + "
\n", "\n", - "**Returns**\n", + "*predict_proba(X)*\n", "\n", - "- `self` : object\n", + "Predict class probabilities of X from the net input.\n", "\n", + "**Parameters**\n", "\n", - "
\n", + "- `X` : {array-like, sparse matrix}, shape = [n_samples, n_features]\n", + "\n", + " Training vectors, where n_samples is the number of samples and\n", + " n_features is the number of features.\n", "\n", - "*net_input(X)*\n", + "**Returns**\n", + "\n", + "- `Class 1 probability` : float\n", "\n", - "Compute the linear net input.\n", "\n", "
\n", "\n", - "*predict(X)*\n", + "*score(X, y)*\n", "\n", - "Predict class labels of X.\n", + "Compute the prediction accuracy\n", "\n", "**Parameters**\n", "\n", @@ -891,11 +902,16 @@ " Training vectors, where n_samples is the number of samples and\n", " n_features is the number of features.\n", "\n", + "- `y` : array-like, shape = [n_samples]\n", + "\n", + " Target values (true class labels).\n", + "\n", "**Returns**\n", "\n", - "- `class_labels` : array-like, shape = [n_samples]\n", + "- `acc` : float\n", "\n", - " Predicted class labels.\n", + " The prediction accuracy as a float\n", + " between 0.0 and 1.0 (perfect score).\n", "\n", "\n" ] @@ -905,6 +921,15 @@ "with open('../../api_modules/mlxtend.classifier/LogisticRegression.md', 'r') as f:\n", " print(f.read())" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/docs/sources/user_guide/classifier/LogisticRegression_files/LogisticRegression_46_1.png b/docs/sources/user_guide/classifier/LogisticRegression_files/LogisticRegression_46_1.png index 721870ce9..21923694a 100644 Binary files a/docs/sources/user_guide/classifier/LogisticRegression_files/LogisticRegression_46_1.png and b/docs/sources/user_guide/classifier/LogisticRegression_files/LogisticRegression_46_1.png differ diff --git a/docs/sources/user_guide/classifier/LogisticRegression_files/LogisticRegression_46_2.png b/docs/sources/user_guide/classifier/LogisticRegression_files/LogisticRegression_46_2.png index b02e4c60a..a05dcab63 100644 Binary files a/docs/sources/user_guide/classifier/LogisticRegression_files/LogisticRegression_46_2.png and b/docs/sources/user_guide/classifier/LogisticRegression_files/LogisticRegression_46_2.png differ diff --git a/docs/sources/user_guide/classifier/LogisticRegression_files/LogisticRegression_52_1.png b/docs/sources/user_guide/classifier/LogisticRegression_files/LogisticRegression_52_1.png index ff536e4c8..2dc4d7447 100644 Binary files a/docs/sources/user_guide/classifier/LogisticRegression_files/LogisticRegression_52_1.png and b/docs/sources/user_guide/classifier/LogisticRegression_files/LogisticRegression_52_1.png differ diff --git a/docs/sources/user_guide/classifier/LogisticRegression_files/LogisticRegression_52_2.png b/docs/sources/user_guide/classifier/LogisticRegression_files/LogisticRegression_52_2.png index dbab4cc7d..2eceab945 100644 Binary files a/docs/sources/user_guide/classifier/LogisticRegression_files/LogisticRegression_52_2.png and b/docs/sources/user_guide/classifier/LogisticRegression_files/LogisticRegression_52_2.png differ diff --git a/docs/sources/user_guide/classifier/LogisticRegression_files/LogisticRegression_55_1.png b/docs/sources/user_guide/classifier/LogisticRegression_files/LogisticRegression_55_1.png index 9decb5dbb..5a571e97b 100644 Binary files a/docs/sources/user_guide/classifier/LogisticRegression_files/LogisticRegression_55_1.png and b/docs/sources/user_guide/classifier/LogisticRegression_files/LogisticRegression_55_1.png differ diff --git a/docs/sources/user_guide/classifier/LogisticRegression_files/LogisticRegression_55_2.png b/docs/sources/user_guide/classifier/LogisticRegression_files/LogisticRegression_55_2.png index d51c89aa2..53196650a 100644 Binary files a/docs/sources/user_guide/classifier/LogisticRegression_files/LogisticRegression_55_2.png and b/docs/sources/user_guide/classifier/LogisticRegression_files/LogisticRegression_55_2.png differ diff --git a/docs/sources/user_guide/classifier/MultiLayerPerceptron.ipynb b/docs/sources/user_guide/classifier/MultiLayerPerceptron.ipynb new file mode 100644 index 000000000..06fd8ec4c --- /dev/null +++ b/docs/sources/user_guide/classifier/MultiLayerPerceptron.ipynb @@ -0,0 +1,856 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Sebastian Raschka, 2015 \n", + "`mlxtend`, a library of extension and helper modules for Python's data analysis and machine learning libraries\n", + "\n", + "- GitHub repository: https://github.com/rasbt/mlxtend\n", + "- Documentation: http://rasbt.github.io/mlxtend/\n", + "\n", + "View this page in [jupyter nbviewer](http://nbviewer.ipython.org/github/rasbt/mlxtend/blob/master/docs/sources/_ipynb_templates/regressor/linear_regression.ipynb)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Sebastian Raschka \n", + "last updated: 2016-05-01 \n", + "\n", + "CPython 3.5.1\n", + "IPython 4.0.3\n", + "\n", + "matplotlib 1.5.1\n", + "numpy 1.11.0\n", + "scipy 0.17.0\n", + "mlxtend 0.4.1.dev0\n" + ] + } + ], + "source": [ + "%load_ext watermark\n", + "%watermark -a 'Sebastian Raschka' -u -d -v -p matplotlib,numpy,scipy,mlxtend" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Neural Network - Multilayer Perceptron" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Implementation of a multilayer perceptron, a feedforward artificial neural network." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> from mlxtend.classifier import MultiLayerPerceptron" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Overview" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*Although the code is fully working and can be used for common classification tasks, this implementation is not geared towards efficiency but clarity – the original code was written for demonstration purposes.*" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Basic Architecture" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![](./NeuralNetMLP_files/neuralnet_mlp_1.png) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The neurons $x_0$ and $a_0$ represent the bias units ($x_0=1$, $a_0=1$). \n", + "\n", + "The $i$th superscript denotes the $i$th layer, and the *j*th subscripts stands for the index of the respective unit. For example, $a_{1}^{(2)}$ refers to the first activation unit **after** the bias unit (i.e., 2nd activation unit) in the 2nd layer (here: the hidden layer)\n", + "\n", + " \\begin{align}\n", + " \\mathbf{a^{(2)}} &= \\begin{bmatrix}\n", + " a_{0}^{(2)} \\\\\n", + " a_{1}^{(2)} \\\\\n", + " \\vdots \\\\\n", + " a_{m}^{(2)}\n", + " \\end{bmatrix}.\n", + " \\end{align}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Each layer $(l)$ in a multi-layer perceptron, a directed graph, is fully connected to the next layer $(l+1)$. We write the weight coefficient that connects the $k$th unit in the $l$th layer to the $j$th unit in layer $l+1$ as $w^{(l)}_{j, k}$.\n", + "\n", + "For example, the weight coefficient that connects the units\n", + "\n", + "$a_0^{(2)} \\rightarrow a_1^{(3)}$\n", + "\n", + "would be written as $w_{1,0}^{(2)}$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Activation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the current implementation, the activations of the hidden layer(s) are computed via the logistic (sigmoid) function $\\phi(z) = \\frac{1}{1 + e^{-z}}.$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![](./NeuralNetMLP_files/logistic_function.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "(For more details on the logistic function, please see [`classifier.LogisticRegression`](./LogisticRegression.md); a general overview of different activation function can be found [here](../general_concepts/activation-functions.md).)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Furthermore, the MLP uses the softmax function in the output layer, For more details on the logistic function, please see [`classifier.SoftmaxRegression`](./SoftmaxRegression.md)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### References\n", + "\n", + "- D. R. G. H. R. Williams and G. Hinton. [Learning representations by back-propagating errors](http://lia.disi.unibo.it/Courses/SistInt/articoli/nnet1.pdf). Nature, pages 323–533, 1986.\n", + "- C. M. Bishop. [Neural networks for pattern recognition](https://books.google.de/books?hl=en&lr=&id=T0S0BgAAQBAJ&oi=fnd&pg=PP1&dq=Neural+networks+for+pattern+recognition&ots=jL6TqGbBld&sig=fiLrMg-RJx22cgQ7zd2CiwUqNqI&redir_esc=y#v=onepage&q=Neural%20networks%20for%20pattern%20recognition&f=false). Oxford University Press, 1995.\n", + "- T. Hastie, J. Friedman, and R. Tibshirani. [The Elements of Statistical Learning](http://statweb.stanford.edu/%7Etibs/ElemStatLearn/), Volume 2. Springer, 2009." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Examples" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 1 - Classifying Iris Flowers" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Load 2 features from Iris (petal length and petal width) for visualization purposes:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from mlxtend.data import iris_data\n", + "X, y = iris_data()\n", + "X = X[:, [0, 3]] \n", + "\n", + "# standardize training data\n", + "X_std = (X - X.mean(axis=0)) / X.std(axis=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Train neural network for 3 output flower classes ('Setosa', 'Versicolor', 'Virginica'), regular gradient decent (`minibatches=1`), 30 hidden units, and no regularization." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Gradient Descent" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Setting the `minibatches` to `1` will result in gradient descent training; please see [Gradient Descent vs. Stochastic Gradient Descent](../general_concepts/gradient-optimization.md) for details." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Iteration: 150/150 | Cost 0.06 | Elapsed: 0:00:00 | ETA: 0:00:00" + ] + } + ], + "source": [ + "from mlxtend.classifier import MultiLayerPerceptron as MLP\n", + "\n", + "nn1 = MLP(hidden_layers=[50], \n", + " l2=0.00, \n", + " l1=0.0, \n", + " epochs=150, \n", + " eta=0.05, \n", + " momentum=0.1,\n", + " decrease_const=0.0,\n", + " minibatches=1, \n", + " random_seed=1,\n", + " print_progress=3)\n", + "\n", + "nn1 = nn1.fit(X_std, y)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from mlxtend.evaluate import plot_decision_regions\n", + "import matplotlib.pyplot as plt\n", + "\n", + "fig = plot_decision_regions(X=X_std, y=y, clf=nn1, legend=2)\n", + "plt.title('Multi-layer Perceptron w. 1 hidden layer (logistic sigmoid)')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "plt.plot(range(len(nn1.cost_)), nn1.cost_)\n", + "plt.ylabel('Cost')\n", + "plt.xlabel('Epochs')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Accuracy: 96.67%\n" + ] + } + ], + "source": [ + "print('Accuracy: %.2f%%' % (100 * nn1.score(X_std, y)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Stochastic Gradient Descent" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Setting `minibatches` to `n_samples` will result in stochastic gradient descent training; please see [Gradient Descent vs. Stochastic Gradient Descent](../general_concepts/gradient-optimization.md) for details." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Iteration: 5/5 | Cost 0.13 | Elapsed: 00:00:00 | ETA: 00:00:00" + ] + }, + { + "data": { + "image/png": "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\n9f8BaMpFEizK0R4AAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "nn2 = MLP(hidden_layers=[50], \n", + " l2=0.00, \n", + " l1=0.0, \n", + " epochs=5, \n", + " eta=0.005, \n", + " momentum=0.1,\n", + " decrease_const=0.0,\n", + " minibatches=len(y), \n", + " random_seed=1,\n", + " print_progress=3)\n", + "\n", + "nn2.fit(X_std, y)\n", + "\n", + "plt.plot(range(len(nn2.cost_)), nn2.cost_)\n", + "plt.ylabel('Cost')\n", + "plt.xlabel('Epochs')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Continue the training for 25 epochs..." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Iteration: 25/25 | Cost 0.06 | Elapsed: 0:00:00 | ETA: 0:00:00" + ] + } + ], + "source": [ + "nn2.epochs = 25\n", + "nn2 = nn2.fit(X_std, y)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nIjn+Fw1mwRPedgMRAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(range(len(nn2.cost_)), nn2.cost_)\n", + "plt.ylabel('Cost')\n", + "plt.xlabel('Epochs')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example 2 - Classifying Handwritten Digits from a 10% MNIST Subset" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Load a **5000-sample subset** of the [MNIST dataset](http://rasbt.github.io/mlxtend/docs/data/mnist/) (please see [`data.load_mnist`](../data/load_mnist.md) if you want to download and read in the complete MNIST dataset).\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from mlxtend.data import mnist_data\n", + "from mlxtend.preprocessing import shuffle_arrays_unison\n", + "\n", + "X, y = mnist_data()\n", + "X, y = shuffle_arrays_unison((X, y), random_seed=1)\n", + "X_train, y_train = X[:500], y[:500]\n", + "X_test, y_test = X[500:], y[500:]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Visualize a sample from the MNIST dataset to check if it was loaded correctly:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "def plot_digit(X, y, idx):\n", + " img = X[idx].reshape(28,28)\n", + " plt.imshow(img, cmap='Greys', interpolation='nearest')\n", + " plt.title('true label: %d' % y[idx])\n", + " plt.show()\n", + " \n", + "plot_digit(X, y, 3500) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Standardize pixel values:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "from mlxtend.preprocessing import standardize\n", + "\n", + "X_train_std, params = standardize(X_train, \n", + " columns=range(X_train.shape[1]), \n", + " return_params=True)\n", + "\n", + "X_test_std = standardize(X_test,\n", + " columns=range(X_test.shape[1]),\n", + " params=params)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Initialize the neural network to recognize the 10 different digits (0-10) using 300 epochs and mini-batch learning." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "nn1 = MLP(hidden_layers=[150], \n", + " l2=0.00, \n", + " l1=0.0, \n", + " epochs=100, \n", + " eta=0.005, \n", + " momentum=0.0,\n", + " decrease_const=0.0,\n", + " minibatches=100, \n", + " random_seed=1,\n", + " print_progress=3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Learn the features while printing the progress to get an idea about how long it may take." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Iteration: 100/100 | Cost 0.01 | Elapsed: 0:00:22 | ETA: 0:00:00" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYkAAAEPCAYAAAC3NDh4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAG2NJREFUeJzt3XuUHWWd7vHvk3Ru5E4gERITQGC4RshIEkc9NhclgIs4\n3rgNCzzKwDmiDuoY8CwXfeYKM2tUEEdPZpCjIDIogsHhNiJ9lBkukQkQIIFAoHMBEiaEhAQIneR3\n/qhqeqfT1dndvWvXvjyftWrtqtrVtX+7aPL0W2/VW4oIzMzMejOk6ALMzKx2OSTMzCyTQ8LMzDI5\nJMzMLJNDwszMMjkkzMwsU64hIelaSeskPZ7x/tmSHkun+yUdnWc9ZmbWP3m3JK4DTu7j/ZXAf4uI\n9wJ/BfxTzvWYmVk/tOS584i4X9KMPt5/sGTxQWBqnvWYmVn/1FKfxOeBO4suwszMuuXakiiXpOOB\nzwIfLLoWMzPrVnhISJoJLATmRcTGPrbzIFNmZgMQERroz1bjdJPSafc3pOnALcC5EfHcnnYUEZ4i\nuPzyywuvoVYmHwsfCx+LvqfByrUlIelGoBWYJGkVcDkwHIiIWAh8E9gb+EdJAjojYnaeNZmZWfny\nvrrp7D28fwFwQZ41mJnZwNXS1U1WptbW1qJLqBk+Ft18LLr5WFSOKnHOqhokRb3UamZWKyQRNd5x\nbWZmdcohYWZmmRwSZmaWySFhZmaZHBJmZpbJIWFmZpnqKiR8BayZWXXVVUh0dBRdgZlZc6mrkHjo\noaIrMDNrLnUVEg8/XHQFZmbNpa5Cwi0JM7Pqqquxm0aPDjZuhGHDiq7GzKw+NNXYTQccAEuXFl2F\nmVnzqKuQmDPHp5zMzKrJIWFmZpkcEmZmlqmuOq47O4OJE2H1apgwoeiKzMxqX1N1XLe0wKxZsHhx\n0ZWYmTWHugoJ8CknM7NqckiYmVmmuguJ2bOTkKiTrhQzs7pWdyExbRp0dsKGDUVXYmbW+OouJCSY\nMgXWry+6EjOzxld3IQEOCTOzaqnLkJg82SFhZlYNdRsS69YVXYWZWePLNSQkXStpnaTH+9jmakkr\nJD0q6Zhy9uuWhJlZdeTdkrgOODnrTUmnAO+JiEOAC4EflLNTh4SZWXXkGhIRcT+wsY9N5gM/Trd9\nCBgvacqe9uuQMDOrjqL7JKYCq0uW16br+uSrm8zMqqPokBgQtyTMzKqjpeDPXwu8u2R5WrquV21t\nbQC89RasXdsKtOZXmZlZHWpvb6e9vb1i+8v9eRKSDgBuj4ije3nvVOALEXGapLnAdyJibsZ+oqvW\nCBgxAjZtglGj8qvdzKzeDfZ5Erm2JCTdSPLn/iRJq4DLgeFARMTCiLhD0qmSngW2Ap8tb7/JKadX\nXoHp0/Oq3szMcg2JiDi7jG0uHsi+uzqvHRJmZvmpy45rcOe1mVk1OCTMzCxTXYeEx28yM8tXXYeE\nWxJmZvmq25DwXddmZvmr25BwS8LMLH8OCTMzy1TXIeGOazOzfOU+LEellA7LAbBtG4wZk7wOqduo\nMzPL12CH5ajbf15HjIDRo+G114quxMyscdVtSICvcDIzy1tdh4Q7r83M8uWQMDOzTHUfEr7Cycws\nP3UfEm5JmJnlp65Dwh3XZmb5quuQcEvCzCxfDgkzM8vkkDAzs0x1HxK+usnMLD91HRITJsAbbyTj\nN5mZWeXVdUgMGQL77guvvFJ0JWZmjamuQwLcL2FmlieHhJmZZWqIkHDntZlZPhwSZmaWqe5DwkNz\nmJnlpyFCwi0JM7N8OCTMzCxT7iEhaZ6k5ZKekbSgl/fHSVok6VFJSyWd35/9OyTMzPKTa0hIGgJc\nA5wMHAmcJemwHpt9AXgyIo4Bjgf+QVJLuZ/hkDAzy0/eLYnZwIqI6IiITuAmYH6PbQIYm86PBTZE\nxPZyP2DffWHDBtixoyL1mplZibxDYiqwumR5Tbqu1DXAEZJeBB4DvtyfDxg2DMaPT4LCzMwqq+zT\nOjk6GVgSESdIeg/wb5JmRsSWnhu2tbW9M9/a2kprayvQfcpp8uTqFGxmVqva29tpb2+v2P4UERXb\n2W47l+YCbRExL12+FIiIuLJkm18BfxsR/54u3wssiIjf99hXZNV6wgnwjW/ASSfl9EXMzOqUJCJC\nA/35vE83LQYOljRD0nDgTGBRj206gJMAJE0BDgVW9udD3HltZpaPXE83RcQOSRcD95AE0rURsUzS\nhcnbsRD4K+D/Sno8/bGvR8Sr/fkch4SZWT5y75OIiLuAP+ix7v+UzL9E0i8xYA4JM7N81P0d1+CQ\nMDPLi0PCzMwyOSTMzCyTQ8LMzDLlep9EJfV1n8S2bTB2LLz1FgxpiNgzM6uMWr9PoipGjIDRo2Hj\nxqIrMTNrLA0REuBTTmZmeXBImJlZJoeEmZllckiYmVkmh4SZmWVySJiZWSaHhJmZZXJImJlZJoeE\nmZllaohhOQDefBMmTkxeNeAb0M3MGouH5UiNGgXDh8OmTUVXYmbWOBomJMCnnMzMKq2hQmLyZIeE\nmVklNVRIuCVhZlZZDgkzM8vkkDAzs0wOCTMzy+SQMDOzTGWFhKTry1lXtKlTYe3aoqswM2sc5bYk\njixdkDQU+MPKlzM4BxwAL7xQdBVmZo2jz5CQdJmk14GZkjan0+vAeuCXVamwHyZPhjfegNdfL7oS\nM7PG0GdIRMTfRsRY4O8jYlw6jY2ISRFxWZVqLJvk1oSZWSWVe7rpV5JGA0j6E0nfkjSjnB+UNE/S\ncknPSFqQsU2rpCWSnpB0X5k19erAAx0SZmaVUm5IfB94Q9J7ga8CzwE/3tMPSRoCXAOcTNKvcZak\nw3psMx74HvCxiDgK+HT55e/ugAPg+ecHswczM+tSbkhsT8fpng9cExHfA8aW8XOzgRUR0RERncBN\n6T5KnQ3cEhFrASLiv8qsqVduSZiZVU65IfG6pMuAc4F/TVsIw8r4uanA6pLlNem6UocCe0u6T9Ji\nSeeWWVOv3JIwM6ucljK3O4PkL/7/HhEvS5oO/H0Fa5gFnACMBh6Q9EBEPNtzw7a2tnfmW1tbaW1t\n3W1nbkmYWTNrb2+nvb29Yvsr+8l0kqYAx6WLD0fE+jJ+Zi7QFhHz0uVLgYiIK0u2WQCMjIj/nS7/\nM3BnRNzSY199Ppmuy4YN8J73wGuvlfW1zMwaWlWeTCfpM8DDJJ3KnwEekvSpMn50MXCwpBmShgNn\nAot6bPNL4IOShkraC5gDLCv3C/S0996wc6dDwsysEso93fS/gOO6Wg+S9gV+Dfy8rx+KiB2SLgbu\nIQmkayNimaQLk7djYUQsl3Q38DiwA1gYEU8N8Pu8c6/E88/DsccOdC9mZgZlnm6StDQiji5ZHgI8\nVroub+WebgKYPx/OPx/++I/zrcnMrNYN9nRTuS2Ju9K/9n+aLp8B3DHQD82br3AyM6uMPkNC0sHA\nlIj4c0mfAD6YvvUA8JO8ixuoAw+ElSuLrsLMrP7tqeP6O8BmgIj4RUR8JSK+AtyavleT3JIwM6uM\nPYXElIhY2nNluu6AXCqqAN8rYWZWGXsKiQl9vDeqkoVUUldLosx+bjMzy7CnkPi9pAt6rpT0eeCR\nfEoavPHjYfjw5MY6MzMbuD1d3fRnwK2SzqE7FN4HDAdq+gLTrtbEPvsUXYmZWf3qMyQiYh3wR5KO\nB45KV/9rRPwm98oGqatf4rjj9ripmZllKOs+iYi4DxjUw4CqzVc4mZkNXrlDhdcdX+FkZjZ4DRsS\nfta1mdngNWxIHHigTzeZmQ1W2c+TKFp/BvgD2LIFJk+GrVuTkWHNzJpRVZ4nUY/GjIGxY+Gll4qu\nxMysfjVsSAAccQQ88UTRVZiZ1a+GDomZM2HpbiNPmZlZuRo6JI4+2iFhZjYYDgkzM8vUsFc3QfcV\nTps3Q0u5z+AzM2sgvrqpD2PGwH77wbPPFl2JmVl9auiQAJ9yMjMbDIeEmZllckiYmVmmhg8J3yth\nZjZwDX11E8D27TBuHLzyCowenUNhZmY1zFc37UFLCxx2GDz5ZNGVmJnVn4YPCXC/hJnZQDVNSDz+\neNFVmJnVn9xDQtI8ScslPSNpQR/bHSepU9InKl2DWxJmZgOTa0hIGgJcA5wMHAmcJemwjO2uAO7O\no46ukKiTPnozs5qRd0tiNrAiIjoiohO4CZjfy3ZfBH4OrM+jiP32g507Yd26PPZuZta48g6JqcDq\nkuU16bp3SNof+HhEfB/I5UGjku+XMDMbiFoYG/U7QGlfRWZQtLW1vTPf2tpKa2tr2R8ycyY89hh8\n5CP9L9DMrF60t7fT3t5esf3lejOdpLlAW0TMS5cvBSIirizZZmXXLLAPsBX404hY1GNfA7qZrssN\nN8CiRXDzzQPehZlZ3RnszXR5h8RQ4GngROAl4GHgrIhYlrH9dcDtEfGLXt4bVEisWAEnnQQdHQPe\nhZlZ3anpO64jYgdwMXAP8CRwU0Qsk3ShpD/t7UfyquXgg5OHEL38cl6fYGbWeBp+7KZSp5wCF10E\n83u7vsrMrAHVdEui1syZAw89VHQVZmb1wyFhZmaZmup004YNcNBB8OqrMHRohQozM6thPt3UD5Mm\nweTJsHx50ZWYmdWHpgoJ8CknM7P+cEiYmVkmh4SZmWVqqo5rgG3bYO+9Yf16P/PazBqfO677acSI\n5PkSjzxSdCVmZrWv6UICfMrJzKxcDgkzM8vUdH0SAGvXJs+XePHF5PSTmVmjcp/EAEydmvRL3Hln\n0ZWYmdW2pgwJgLPPhhtvLLoKM7Pa1pSnm6B7HKfVq2HcuIrt1syspvh00wBNmgQf/jDcdlvRlZiZ\n1a6mDQnwKSczsz1p2tNNAFu3Jp3YTz8NU6ZUdNdmZjXBp5sGYfRo+NjH4Gc/K7oSM7Pa1NQhAT7l\nZGbWl6Y+3QTQ2ZmccvqP/4CDD6747s3MCuXTTYM0bBicdx4sXFh0JWZmtafpWxIAK1bABz4Aq1bB\nyJG5fISZWSHckqiAQw6BY46BW24puhIzs9rikEhddBF8//tFV2FmVlscEqnTT4fnn4elS4uuxMys\ndjgkUi0tcMEF8IMfFF2JmVntcMd1iTVrkudMrFoFY8bk+lFmZlVR8x3XkuZJWi7pGUkLenn/bEmP\npdP9ko7Ou6Ys06Ylg/796EdFVWBmVltybUlIGgI8A5wIvAgsBs6MiOUl28wFlkXEJknzgLaImNvL\nvnJvSQAsWQLz5sGTT8I+++T+cWZmuar1lsRsYEVEdEREJ3ATML90g4h4MCI2pYsPAlNzrqlPxx4L\nZ50FC3Zr85iZNZ+8Q2IqsLpkeQ19h8DngcIfKvoXfwF33w333190JWZmxaqZq5skHQ98Fij8b/hx\n4+Db307unejsLLoaM7PitOS8/7XA9JLlaem6XUiaCSwE5kXExqydtbW1vTPf2tpKa2trperczac+\nBddem4TF17+e28eYmVVUe3s77e3tFdtf3h3XQ4GnSTquXwIeBs6KiGUl20wH7gXOjYgH+9hXVTqu\nSz33HMyZk4wQe+ihVf1oM7OKGGzHde73SaRXLF1Fcmrr2oi4QtKFQETEQkn/BHwC6AAEdEbE7F72\nU/WQALj6arjpJvjd72Do0Kp/vJnZoNR8SFRKUSGxcyeccELyBLuvfa3qH29mNigOiSpYuRJmz4bf\n/haOOKKQEszMBqTW75NoCAcdBH/5l3D++b7aycyai1sSZYpIRoodOxauv979E2ZWH9ySqBIJbr4Z\n1q2Dz30u6aswM2t0Dol+GDUKFi1Knjtx0UUOCjNrfA6Jfho9Gn71q2QAwAsvhO3bi67IzCw/DokB\nGDs2GdtpzRr4+Mdh69aiKzIzy4dDYoDGjElOPU2eDK2tsH590RWZmVWeQ2IQhg1Lxnc67TSYOxce\neqjoiszMKsuXwFbIrbcmndmXXJIMCDjE8WtmNcB3XNeQ1avhnHOSFsYNN8B++xVdkZk1O98nUUPe\n/W647z740Ifgfe9LhvEwM6tnbknk5O674bzzkkEBv/rV5GY8M7Nq8+mmGtbRAZ/+NOy1F1x2GXz0\now4LM6suh0SN6+xMnkfxd3+XdGYvWABnnOGxn8ysOhwSdSIC7rorGU12yxa44go45RS3LMwsXw6J\nOhOR3IR32WXJjXiXXJKExfDhRVdmZo3IIVGntm+Hn/wEfvjDZByoT34yeV7F3LluXZhZ5TgkGkBH\nB9x4Y3L39oQJ8MUvJv0WI0cWXZmZ1TuHRAPZuRPuvBO++1145JHkudqnnw4f+UgyVpSZWX85JBpU\nRwfcfnvSf/Hgg/D+9yd9F6ecAoce6lNSZlYeh0QT2LwZ7r0X7rgjaWlIMGdOMs2enbz61JSZ9cYh\n0WQi4Lnn4OGHk1FnH3gAnnoKjjsOjj8+aXHMmgWTJhVdqZnVAoeEsXkz3H9/Mm7U4sWwZAlMnAjH\nHgszZybT0UfDQQdBS0vR1ZpZNTkkbDc7dyatjSVL4PHHk2npUnjpJZg+HQ45BA4/HI46KpkOPzx5\nLKuZNR6HhJVt2zZYuRJWrIBly+CJJ5LwePrp5Oqp6dNhxoxdp+nTk2mffdxZblaPHBI2aBHJ41df\neCG5qqqjA1at6n5dtQreegumTUuekdE17btv9zR5MkyZAu96l1slZrXEIWFVsWULrFmTnLLqml55\npXtavx7WrUsmCfbee/dp0qSkr2TixGR54sTk5sEJE2D8eBg3zsOTmFVazYeEpHnAd0gecHRtRFzZ\nyzZXA6cAW4HzI+LRXrZxSNSBiCRQNm6EV1+FDRt2nX/11WS5a92mTcn02mtJB/zQoUlYdE1d4TF6\ndPc0ZsyuU+l7e+2VTKNGJa9d6zzqrjWrmg4JSUOAZ4ATgReBxcCZEbG8ZJtTgIsj4jRJc4CrImJu\nL/tySKTa29tpbW0tuoyKi0hOa23enATH668nr5s3w9at8MYbyeuWLd3TihXtjB3b+s76N99Mpq1b\nu1/feCN5pOyoUd3TyJG7v44cCSNG7Po6fHgy3zV1LQ8fvvt8b9OwYd2vpdPw4UlwVbKfp1F/LwbC\nx6LbYEMi7wsiZwMrIqIDQNJNwHxgeck284EfA0TEQ5LGS5oSEetyrq1uNer/AFL3P+JTppT3M21t\n7bS1tfa5TUTSad8VIG++mYTRW2/tOt81bduWTKXzr7+etIS2bYO33971ddu25Lkhb7+dTKXzpcud\nnd3T228nV6G1tCRTzxAZNqx7fdc2e5qWL2/nmGNaaWlJAqjrtXS+t/f6Mw0Z0vtyb69Z86Xrettu\nMFNX6Dbq/yNFyDskpgKrS5bXkARHX9usTdc5JKwipO6WwsSJRVfTbefOZDTg7dt3DZDOzu51Xa87\ndvQ+v3179/JPfwqnntq9z671O3bsOl/6+vbb3e+XM+3cmT3ftdxzvudr13xE989H7P5eb/M7d2a/\n13WioSso/vqvdw2PnvOl63pb39drf+dL1/W2XV/repv2tN23vgX771+Z31PfWmVWkCFDuk9LVcLS\npXDOOZXZV73qCo22NvjmN7uDKGL3+a5Q6ms+a7m/86XLpVPP9Vnb7ennSieo7ICgefdJzAXaImJe\nunwpEKWd15J+ANwXEf+SLi8HPtzzdJMkd0iYmQ1ALfdJLAYOljQDeAk4EzirxzaLgC8A/5KGymu9\n9UcM5kuamdnA5BoSEbFD0sXAPXRfArtM0oXJ27EwIu6QdKqkZ0kugf1snjWZmVn56uZmOjMzq74h\nRRdQDknzJC2X9IykBUXXU02Spkn6jaQnJS2V9KV0/URJ90h6WtLdksYXXWs1SBoi6T8lLUqXm/U4\njJf0M0nL0t+NOU18LC6R9ISkxyX9RNLwZjoWkq6VtE7S4yXrMr+/pMskrUh/dz66p/3XfEikN+Rd\nA5wMHAmcJemwYquqqu3AVyLiSOD9wBfS738p8OuI+APgN8BlBdZYTV8GnipZbtbjcBVwR0QcDryX\n5N6jpjsWkvYHvgjMioiZJKfQz6K5jsV1JP8+lur1+0s6AvgMcDjJKBf/KPV9S2fNhwQlN+RFRCfQ\ndUNeU4iIl7uGKYmILcAyYBrJMfhRutmPgI8XU2H1SJoGnAr8c8nqZjwO44APRcR1ABGxPSI20YTH\nIjUUGC2pBRhFcq9V0xyLiLgf2Nhjddb3Px24Kf2deQFYwe73ru2iHkKitxvyphZUS6EkHQAcAzwI\nvHNXekS8DEwurrKq+Tbw50BpR1ozHocDgf+SdF166m2hpL1owmMRES8C/wCsIgmHTRHxa5rwWPQw\nOeP7Z928nKkeQsIASWOAnwNfTlsUPa84aOgrECSdBqxLW1V9NY8b+jikWoBZwPciYhbJVYGX0mS/\nEwCSJpD81TwD2J+kRXEOTXgs9mDA378eQmItML1keVq6rmmkzeifA9dHxC/T1eskTUnffxewvqj6\nquQDwOmSVgI/BU6QdD3wcpMdB0ha06sj4vfp8i0kodFsvxMAJwErI+LViNgB3Ar8Ec15LEplff+1\nwLtLttvjv6f1EBLv3JAnaTjJDXmLCq6p2n4IPBURV5WsWwScn86fB/yy5w81koj4RkRMj4iDSH4H\nfhMR5wK300THASA9jbBa0qHpqhOBJ2my34nUKmCupJFpB+yJJBc2NNuxELu2sLO+/yLgzPQKsAOB\ng4GH+9xxPdwnkT6T4iq6b8i7ouCSqkbSB4DfAktJmowBfIPkP+zNJH8VdACfiYjXiqqzmiR9GPhq\nRJwuaW+a8DhIei9JB/4wYCXJTahDac5jcTnJHw6dwBLg88BYmuRYSLoRaAUmkQyMejlwG/Azevn+\nki4DPkdyvL4cEff0uf96CAkzMytGPZxuMjOzgjgkzMwsk0PCzMwyOSTMzCyTQ8LMzDI5JMzMLJND\nwpqepB3pGEhL0tevV3DfMyQtrdT+zKot78eXmtWDrekYSHnxzUhWt9ySMMsYMFDS85KuTB9m86Ck\ng9L1MyTdK+lRSf+WDmGOpMmSfpGuX5I+sx2gJR2p9QlJd0kakW7/pfSBQY+md82a1RyHhBmM6nG6\n6dMl721MH2bzPZKhYQC+C1wXEccAN6bLAFcD7en6WSTjKQEcAnw3Io4CNgGfTNcvAI5Jt78ory9n\nNhgelsOanqTNETGul/XPA8dHxAvpSLwvRcS+kl4B3hURO9L1L0bEZEnrganpw7G69jEDuCd9Qhhp\nf0dLRPyNpDtIhvm+DbgtIrbm/23N+sctCbO+RcZ8f2wrmd9Bd1/gaSSP5p0FLE4f1WtWU/xLadb3\nQ4zOSF/PBB5I5/+d5DnKAH8C/C6d/zXwPyF5Nnv6mNG+9j89Iv4fyQODxgFj+l+6Wb58dZMZjJT0\nnyT/mAdwV0R8I31voqTHgLfoDoYvAddJ+hrwCskw3QB/BiyU9DlgO/A/gJfppQWSnqa6IQ0SAVdF\nxOZcvp3ZILhPwixD2ifxhxHxatG1mBXFp5vMsvkvKGt6bkmYmVkmtyTMzCyTQ8LMzDI5JMzMLJND\nwszMMjkkzMwsk0PCzMwy/X/iiwKrgZFKGwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "nn1.fit(X_train_std, y_train)\n", + "\n", + "plt.plot(range(len(nn1.cost_)), nn1.cost_)\n", + "plt.ylabel('Cost')\n", + "plt.xlabel('Epochs')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train Accuracy: 100.00%\n", + "Test Accuracy: 84.56%\n" + ] + } + ], + "source": [ + "print('Train Accuracy: %.2f%%' % (100 * nn1.score(X_train_std, y_train)))\n", + "print('Test Accuracy: %.2f%%' % (100 * nn1.score(X_test_std, y_test)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Please note** that this neural network has been trained on only 10% of the MNIST data for technical demonstration purposes, hence, the lousy predictive performance." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# API" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "## NeuralNetMLP\n", + "\n", + "*NeuralNetMLP(n_output, n_features, n_hidden=30, l1=0.0, l2=0.0, epochs=500, eta=0.001, alpha=0.0, decrease_const=0.0, shuffle_init=True, shuffle_epoch=True, minibatches=1, zero_init_weight=False, random_seed=None, print_progress=0)*\n", + "\n", + "Feedforward neural network / Multi-layer perceptron classifier.\n", + "\n", + "**Parameters**\n", + "\n", + "- `n_output` : int\n", + "\n", + " Number of output units, should be equal to the\n", + " number of unique class labels.\n", + "\n", + "- `n_features` : int\n", + "\n", + " Number of features (dimensions) in the target dataset.\n", + " Should be equal to the number of columns in the X array.\n", + "\n", + "- `n_hidden` : int (default: 30)\n", + "\n", + " Number of hidden units.\n", + "\n", + "- `l1` : float (default: 0.0)\n", + "\n", + " Lambda value for L1-regularization.\n", + " No regularization if l1=0.0 (default)\n", + "\n", + "- `l2` : float (default: 0.0)\n", + "\n", + " Lambda value for L2-regularization.\n", + " No regularization if l2=0.0 (default)\n", + "\n", + "- `epochs` : int (default: 500)\n", + "\n", + " Number of passes over the training set.\n", + "\n", + "- `eta` : float (default: 0.001)\n", + "\n", + " Learning rate.\n", + "\n", + "- `alpha` : float (default: 0.0)\n", + "\n", + " Momentum constant. Factor multiplied with the\n", + " gradient of the previous epoch t-1 to improve\n", + " learning speed\n", + " w(t) := w(t) - (grad(t) + alpha*grad(t-1))\n", + "\n", + "- `decrease_const` : float (default: 0.0)\n", + "\n", + " Decrease constant. Shrinks the learning rate\n", + " after each epoch via eta / (1 + epoch*decrease_const)\n", + "\n", + "- `random_weights` : list (default: [-1.0, 1.0])\n", + "\n", + " Min and max values for initializing the random weights.\n", + " Initializes weights to 0 if None or False.\n", + "\n", + "- `shuffle_init` : bool (default: True)\n", + "\n", + " Shuffles (a copy of the) training data before training.\n", + "\n", + "- `shuffle_epoch` : bool (default: True)\n", + "\n", + " Shuffles training data before every epoch if True to prevent circles.\n", + "\n", + "- `minibatches` : int (default: 1)\n", + "\n", + " Divides training data into k minibatches for efficiency.\n", + " Normal gradient descent learning if k=1 (default).\n", + "\n", + "- `random_seed` : int (default: None)\n", + "\n", + " Set random seed for shuffling and initializing the weights.\n", + "\n", + "- `zero_init_weight` : bool (default: False)\n", + "\n", + " If True, weights are initialized to zero instead of small random\n", + " numbers following a standard normal distribution with mean=0 and\n", + " stddev=1.\n", + "\n", + "- `print_progress` : int (default: 0)\n", + "\n", + " Prints progress in fitting to stderr.\n", + " 0: No output\n", + " 1: Epochs elapsed and cost\n", + " 2: 1 plus time elapsed\n", + " 3: 2 plus estimated time until completion\n", + "\n", + "**Attributes**\n", + "\n", + "- `cost_` : list\n", + "\n", + " Sum of squared errors after each epoch.\n", + "\n", + "### Methods\n", + "\n", + "
\n", + "\n", + "*fit(X, y)*\n", + "\n", + "Learn weight coefficients from training data.\n", + "\n", + "**Parameters**\n", + "\n", + "- `X` : array, shape = [n_samples, n_features]\n", + "\n", + " Input layer with original features.\n", + "\n", + "- `y` : array, shape = [n_samples]\n", + "\n", + " Target class labels.\n", + "\n", + "**Returns:**\n", + "\n", + "self\n", + "\n", + "
\n", + "\n", + "*predict(X)*\n", + "\n", + "Predict class labels of X.\n", + "\n", + "**Parameters**\n", + "\n", + "- `X` : {array-like, sparse matrix}, shape = [n_samples, n_features]\n", + "\n", + " Training vectors, where n_samples is the number of samples and\n", + " n_features is the number of features.\n", + "\n", + "**Returns**\n", + "\n", + "- `class_labels` : array-like, shape = [n_samples]\n", + "\n", + " Predicted class labels.\n", + "\n", + "
\n", + "\n", + "*score(X, y)*\n", + "\n", + "Compute the prediction accuracy\n", + "\n", + "**Parameters**\n", + "\n", + "- `X` : {array-like, sparse matrix}, shape = [n_samples, n_features]\n", + "\n", + " Training vectors, where n_samples is the number of samples and\n", + " n_features is the number of features.\n", + "\n", + "- `y` : array-like, shape = [n_samples]\n", + "\n", + " Target values (true class labels).\n", + "\n", + "**Returns**\n", + "\n", + "- `acc` : float\n", + "\n", + " The prediction accuracy as a float\n", + " between 0.0 and 1.0 (perfect score).\n", + "\n", + "\n" + ] + } + ], + "source": [ + "with open('../../api_modules/mlxtend.classifier/NeuralNetMLP.md', 'r') as f:\n", + " print(f.read())" + ] + } + ], + "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.5.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/docs/sources/user_guide/classifier/MultiLayerPerceptron_files/MultiLayerPerceptron_26_0.png b/docs/sources/user_guide/classifier/MultiLayerPerceptron_files/MultiLayerPerceptron_26_0.png new file mode 100644 index 000000000..fa59c4ddf Binary files /dev/null and b/docs/sources/user_guide/classifier/MultiLayerPerceptron_files/MultiLayerPerceptron_26_0.png differ diff --git a/docs/sources/user_guide/classifier/MultiLayerPerceptron_files/MultiLayerPerceptron_27_0.png b/docs/sources/user_guide/classifier/MultiLayerPerceptron_files/MultiLayerPerceptron_27_0.png new file mode 100644 index 000000000..95640adca Binary files /dev/null and b/docs/sources/user_guide/classifier/MultiLayerPerceptron_files/MultiLayerPerceptron_27_0.png differ diff --git a/docs/sources/user_guide/classifier/MultiLayerPerceptron_files/MultiLayerPerceptron_31_1.png b/docs/sources/user_guide/classifier/MultiLayerPerceptron_files/MultiLayerPerceptron_31_1.png new file mode 100644 index 000000000..aaa6fcdb4 Binary files /dev/null and b/docs/sources/user_guide/classifier/MultiLayerPerceptron_files/MultiLayerPerceptron_31_1.png differ diff --git a/docs/sources/user_guide/classifier/MultiLayerPerceptron_files/MultiLayerPerceptron_34_0.png b/docs/sources/user_guide/classifier/MultiLayerPerceptron_files/MultiLayerPerceptron_34_0.png new file mode 100644 index 000000000..676def0bf Binary files /dev/null and b/docs/sources/user_guide/classifier/MultiLayerPerceptron_files/MultiLayerPerceptron_34_0.png differ diff --git a/docs/sources/user_guide/classifier/MultiLayerPerceptron_files/MultiLayerPerceptron_39_0.png b/docs/sources/user_guide/classifier/MultiLayerPerceptron_files/MultiLayerPerceptron_39_0.png new file mode 100644 index 000000000..577c7ac11 Binary files /dev/null and b/docs/sources/user_guide/classifier/MultiLayerPerceptron_files/MultiLayerPerceptron_39_0.png differ diff --git a/docs/sources/user_guide/classifier/MultiLayerPerceptron_files/MultiLayerPerceptron_45_1.png b/docs/sources/user_guide/classifier/MultiLayerPerceptron_files/MultiLayerPerceptron_45_1.png new file mode 100644 index 000000000..ed9f7029e Binary files /dev/null and b/docs/sources/user_guide/classifier/MultiLayerPerceptron_files/MultiLayerPerceptron_45_1.png differ diff --git a/docs/sources/user_guide/classifier/NeuralNetMLP.ipynb b/docs/sources/user_guide/classifier/NeuralNetMLP.ipynb deleted file mode 100644 index fd301f9e9..000000000 --- a/docs/sources/user_guide/classifier/NeuralNetMLP.ipynb +++ /dev/null @@ -1,987 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Sebastian Raschka, 2015 \n", - "`mlxtend`, a library of extension and helper modules for Python's data analysis and machine learning libraries\n", - "\n", - "- GitHub repository: https://github.com/rasbt/mlxtend\n", - "- Documentation: http://rasbt.github.io/mlxtend/\n", - "\n", - "View this page in [jupyter nbviewer](http://nbviewer.ipython.org/github/rasbt/mlxtend/blob/master/docs/sources/_ipynb_templates/regressor/linear_regression.ipynb)" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Sebastian Raschka \n", - "last updated: 2016-02-24 \n", - "\n", - "CPython 3.5.0\n", - "IPython 4.0.3\n", - "\n", - "matplotlib 1.5.1\n", - "numpy 1.10.4\n", - "scipy 0.17.0\n", - "mlxtend 0.3.1.dev0\n" - ] - } - ], - "source": [ - "%load_ext watermark\n", - "%watermark -a 'Sebastian Raschka' -u -d -v -p matplotlib,numpy,scipy,mlxtend" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "%matplotlib inline" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Neural Network - Multilayer Perceptron" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Implementation of a multilayer perceptron, a feedforward artificial neural network." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "> from mlxtend.classifier import NeuralNetMLP" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Overview" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "*Although the code is fully working and can be used for common classification tasks, this implementation is not geared towards efficiency but clarity – the original code was written for demonstration purposes.*" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Basic Architecture" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![](./NeuralNetMLP_files/neuralnet_mlp_1.png) " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The neurons $x_0$ and $a_0$ represent the bias units ($x_0=1$, $a_0=1$). \n", - "\n", - "The $i$th superscript denotes the $i$th layer, and the *j*th subscripts stands for the index of the respective unit. For example, $a_{1}^{(2)}$ refers to the first activation unit **after** the bias unit (i.e., 2nd activation unit) in the 2nd layer (here: the hidden layer)\n", - "\n", - " \\begin{align}\n", - " \\mathbf{a^{(2)}} &= \\begin{bmatrix}\n", - " a_{0}^{(2)} \\\\\n", - " a_{1}^{(2)} \\\\\n", - " \\vdots \\\\\n", - " a_{m}^{(2)}\n", - " \\end{bmatrix}.\n", - " \\end{align}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Each layer $(l)$ in a multi-layer perceptron, a directed graph, is fully connected to the next layer $(l+1)$. We write the weight coefficient that connects the $k$th unit in the $l$th layer to the $j$th unit in layer $l+1$ as $w^{(l)}_{j, k}$.\n", - "\n", - "For example, the weight coefficient that connects the units\n", - "\n", - "$a_0^{(2)} \\rightarrow a_1^{(3)}$\n", - "\n", - "would be written as $w_{1,0}^{(2)}$." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Activation" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the current implementation, the activations of the hidden and output layers are computed via the logistic (sigmoid) function $\\phi(z) = \\frac{1}{1 + e^{-z}}.$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![](./NeuralNetMLP_files/logistic_function.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "(For more details on the logistic function, please see [`classifier.LogisticRegression`](./LogisticRegression.md); a general overview of different activation function can be found [here](../general_concepts/activation-functions.md).)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### References\n", - "\n", - "- D. R. G. H. R. Williams and G. Hinton. [Learning representations by back-propagating errors](http://lia.disi.unibo.it/Courses/SistInt/articoli/nnet1.pdf). Nature, pages 323–533, 1986.\n", - "- C. M. Bishop. [Neural networks for pattern recognition](https://books.google.de/books?hl=en&lr=&id=T0S0BgAAQBAJ&oi=fnd&pg=PP1&dq=Neural+networks+for+pattern+recognition&ots=jL6TqGbBld&sig=fiLrMg-RJx22cgQ7zd2CiwUqNqI&redir_esc=y#v=onepage&q=Neural%20networks%20for%20pattern%20recognition&f=false). Oxford University Press, 1995.\n", - "- T. Hastie, J. Friedman, and R. Tibshirani. [The Elements of Statistical Learning](http://statweb.stanford.edu/%7Etibs/ElemStatLearn/), Volume 2. Springer, 2009." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Examples" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Example 1 - Classifying Iris Flowers" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Load 2 features from Iris (petal length and petal width) for visualization purposes:" - ] - }, - { - "cell_type": "code", - "execution_count": 75, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "array([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,\n", - " 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0, 0, 0, 0, 0, 0, 0])" - ] - }, - "execution_count": 75, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "y" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "from mlxtend.data import iris_data\n", - "X, y = iris_data()\n", - "y = y[50:150]\n", - "y[y==2] = 0\n", - "X = X[50:150, [0, 3]] \n", - "\n", - "# standardize training data\n", - "X_std = (X - X.mean(axis=0)) / X.std(axis=0)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Train neural network for 3 output flower classes ('Setosa', 'Versicolor', 'Virginica'), regular gradient decent (`minibatches=1`), 30 hidden units, and no regularization." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Gradient Descent" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Setting the `minibatches` to `1` will result in gradient descent training; please see [Gradient Descent vs. Stochastic Gradient Descent](../general_concepts/gradient-optimization.md) for details." - ] - }, - { - "cell_type": "code", - "execution_count": 122, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Epoch: 1/1000 | Elapsed: 00:00:00 | ETA: 00:00:00/Users/Sebastian/Dropbox/_ot/code/mlxtend/mlxtend/classifier/neuralnet_mlp.py:223: RuntimeWarning: divide by zero encountered in log\n", - " term2 = (1.0 - y_enc) * np.log(1.0 - output)\n", - "/Users/Sebastian/Dropbox/_ot/code/mlxtend/mlxtend/classifier/neuralnet_mlp.py:223: RuntimeWarning: invalid value encountered in multiply\n", - " term2 = (1.0 - y_enc) * np.log(1.0 - output)\n", - "Epoch: 1000/1000 | Elapsed: 0:00:02 | ETA: 0:00:00" - ] - } - ], - "source": [ - "from mlxtend.classifier import NeuralNetMLP\n", - "\n", - "import numpy as np\n", - "nn1 = NeuralNetMLP(n_output=len(np.unique(y)), \n", - " n_features=X_std.shape[1], \n", - " n_hidden=200, \n", - " l2=0.00, \n", - " l1=0.0, \n", - " epochs=1000, \n", - " eta=0.05, \n", - " alpha=0.1,\n", - " decrease_const=0.0,\n", - " minibatches=1, \n", - " shuffle_init=False,\n", - " shuffle_epoch=False,\n", - " random_seed=1,\n", - " print_progress=3)\n", - "\n", - "nn1 = nn1.fit(X_std, y)" - ] - }, - { - "cell_type": "code", - "execution_count": 125, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 125, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\nuctECUjuRdn+t6mJGVefCUDdtaVTeqyvpzepTqsesXsIQ1E/txU2BfX8O7pfZuNr9/KJAw/gP4/+\nazBBEv7yysiJK7mbWRmwHJgJrAP+Dpzh7s/2mTAByf2XN9ywS/vfL382njZ9F80Nens2bqqGSftS\nd2VVljkkDo88chd33fUKr26AvStre5J+7aTgD9NlV6pEL1nkmNzz0VpmOrDC3V8AMLObgVOBZzPO\nJTlL3SydPLOaWt13LFrt7a0899wm3vGO02hrW8Cpp0JlZTUNDbCcatY1tzJjTpDs66YtVL295FU+\nkvsBwOq04TUECV8KYMacw0ftzdJS88wz/6C8/EgqKnanvPxIWloe59hjT0qrlakCqmhqgvqroX5O\n8O3imZcEH1R9IxGMWDv3xuZmGpube4Zra2qorakZqdXnRdztf08/dy8AJfZRoKNjG6tWrWLnzm1s\n2bKS7u6drFy5hSOP3Ma4ceP7TDt9OkyfHpTa6+e2MqN5PrzSDvd0MHlcG7MPeVClehm2fNS5Hwt8\n391PDoe/DfguN1UTUOcemxK9aTqaDbV9fyZNTbB8eW+Locnj2vj9/JcKEq8UsRhvqJYDywhuqK4H\nmoAz3X1pnwmV3IdtYX0LTa2H66apAFB/btD+H8I6+smPq+qmFBRBU8if0tsU8opdJlJyH5aeHqbT\nqqmt1U1T6VVfH35Y2kLtpBa1uEk6dWIa5cIHe/U81KsEb5q2t79EZeVeBVl2Z2cHY8eOK8iy49Tn\nsQ3n3BR8UEkgWZTcR6feB3tNhHHjmPyeQ0vySnvt2hX86ldX8qUvzeWAA96c12W3t7eyaNFtnHTS\nJ6isTGbVVv3c1uAm7BAf21CUHfJkYDG2c5fhaGjo113+cCbPrKauBBN6ukWLbmPz5qncffcfOeus\n/HY3feaZf7Bp0149TRGTKLgfUxXehK2m8Z4W6ufA4mufH3B6vZAj+ZTcCyHtlXSnP3xe+CajlHlF\n110+bmvXrqCl5SWmTPkezzzzA9auXZG30nuqI9FBB53GihULqK5uTWzpHVLNKoHZ1dSfu7Ln3o3a\nzpceJfdcNTRwUfOndvk6eKtR2ivp9oC6+clNJvmwaNFtlJefSEXFHpSXn5jX0vtgHYlKQeqeTUMD\nQdv5TRuZ/LCaU5YKJfcs0p+L3tc8Js/ctU5zMiocDUdb2waWL3+erq4uNm1agvsOli1bRVvbBiZO\n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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "#from mlxtend.evaluate import plot_decision_regions\n", - "fig = plot_decision_regions(X=X_std, y=y, clf=nn1, legend=2)\n", - "plt.title('Multi-layer Perceptron w. 1 hidden layer (logistic sigmoid)')" - ] - }, - { - "cell_type": "code", - "execution_count": 124, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\nrkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "plt.plot(range(len(nn1.cost_)), nn1.cost_)\n", - "plt.ylim([0, 300])\n", - "plt.ylabel('Cost')\n", - "plt.xlabel('Epochs')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 127, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 127, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\nc1+9Odb9cVKC4VHHK1nnU65ns0lW7dKf8YlEVeFUpyQo31tUPSz2Mkyi0r3hcNvD+g8ahlzPZpOs\n2qU/4xMpRv2axM/58VcTrh9//tG6qy4guZ7NJlm1S3/GJ1Ks+jWJ3/awKkKiINez2SSrdunP+ESK\nVXSrUyQvsqm6SLXP/v17E1a7ZDvWiapCRLrq1webixZR+K/dF7h8z+ySycw0vZmVxt07q106JBrr\nJJv4up9LVSFSrArnwab0SX9UZJgZI0ceTmNjA0uXLspojJGOfZIdb/Lkk3Men4jE9P5WSEITX5ER\n1rn6MwYRSU9JPCIOVmRcwoYN9TQ25m82m2Tn6s8YRCQzaZO4mT1uZvVm9laKNg+a2QYzqzGz6bkN\nUSBxRUZ/n6s/YxCRzGRyJ/4k8IVkG83sIuBYdz8euB54JEexFbXm5qak2xobd3VZPliRsYGdO5+n\ntXUDGzdupKlpb87jij/Xtm2/7DzX7t3bMooh1edKtS2X+4gMJBlVp5jZFGCRu386wbZHgN+7+y+C\n5bVAlbvXd2+r6pSY3r6e3p8VGR3n+vjjnbz00ouce+5FDB9+WEZjjGQ7UUMyerVeJCZVdUou+sQn\nAJvjluuCdZJEqoeD8a+nd+ioyBg16ojOr5EjD89LSV3HubZs2cLHHx9FXV0dI0ceTklJSdoYUn2u\nbB6I6iGqSHr9+mCztraaZ575dudXbW11f56+IKR6OHjw9fQbWL26gbq6DQUXYzb75Pp4InJQLpJ4\nHTApbnlisK6Hysoqrrrq251flZVVOTh9tKR6OJjo9fRCizGbfXJ9PBE5KNOXfSz4SuR54CbgF2Y2\nC/goUX+49O/r6fmIMZvX7iH5RA3ZHE+v1ot0lfbBppk9A1QBY4B64G5gMODu/ljQ5iHgQuAT4Cvu\nnvC2aaA/2OzP19PzEWOyPvhU+0DyiRqyOZ5erZeBqGAmhRjoSVxEJBv5rk4REZGQKImLiESYkriI\nSIQpiYuIRJiSuIhIhCmJi4hEmJK4iEiEKYmLiESYkriISIQpiYuIRJiSuIhIhCmJi4hEmJK4iEiE\nKYmLiESYkriISIQpiYuIRJiSuIhIhCmJi4hEmJK4iEiEKYmLiERYRknczC40s3Vmtt7Mbk+w/Vwz\n+8jMVgZf38p9qCIi0l1ZugZmVgI8BJwPbAXeMLOF7r6uW9OX3f2yPMQoIiJJZHInPgPY4O7vu3sL\n8HNgToJ2ltPIREQkrUyS+ARgc9zylmBdd2eYWY2ZvWBm03ISnYiIpJS2OyVDK4DJ7r7PzC4CfgVM\nzdGxRUSRf/J9AAAE5ElEQVQkiUySeB0wOW55YrCuk7vvjfv+RTN72MxGu/uu+Ha1tdXU1lZ3LldW\nVlFZWZVF2CIiApkl8TeA48xsCvAhcAVwZXwDMxvn7vXB9zMA657AQUlbRCTX0iZxd28zs68Bi4n1\noT/u7mvN7PrYZn8MuNzMbgBagCZgbj6DFhGRGHP3fjvZokX038lERIrE7NnJq//0xqaISIQpiYuI\nRJiSuIhIhCmJi4hEmJK4iEiEKYmLiESYkriISIQpiYuIRJiSuIhIhCmJi4hEmJK4iEiEKYmLiESY\nkriISIQpiYuIRJiSuIhIhCmJi4hEmJK4iEiEKYmLiESYkriISIQpiYuIRFhGSdzMLjSzdWa23sxu\nT9LmQTPbYGY1ZjY9t2GKiEgiaZO4mZUADwFfAE4GrjSzE7u1uQg41t2PB64HHslDrCIi0k0md+Iz\ngA3u/r67twA/B+Z0azMHeArA3ZcBI8xsXE4jFRGRHjJJ4hOAzXHLW4J1qdrUJWgjIiI5pgebIiIR\nVpZBmzpgctzyxGBd9zaT0rRh+PBqqqurO5erqqqoqqrKMFQREenO3D11A7NS4G3gfOBDYDlwpbuv\njWtzMXCTu19iZrOA+919VoLDpT6ZiIgkYsk2pL0Td/c2M/sasJhY98vj7r7WzK6PbfbH3P3XZnax\nmb0DfAJ8JVeRi4hIcmnvxHNMd+IiIr2X9E5cDzZFRCJMSVxEJMIKJonHV60MdLoWB+ladKXrcZCu\nRYySeAHStThI16IrXY+DdC1iCiaJi4hI7ymJi4hEWH+XGCZlZlXuXh12HIVA1+IgXYuudD0O0rWI\nKZgkLiIivafuFBGRCFMSFxGJsIJI4mZWYmYrzez5sGMJm5ltMrM3zWyVmS0PO54wmdkIM/ulma01\ns9VmNjPsmMJgZlODfw8rgz/3mNnNYccVFjO7xcz+aGZvmdlPzWxw2DGFqSD6xM3sFuB0oMLdLws7\nnjCZ2XvA6e6+O+xYwmZmPwZecvcnzawMOMTdG0MOK1TBdIlbgJnuvjld+2JjZuOB/wJOdPcDZvYL\n4AV3fyrk0EIT+p24mU0ELgb+NexYCoRRAH8vYTOzCuAcd38SwN1bB3oCD3weeHcgJvA4pcChHT/Y\nga0hxxOqQkgW9wG3ohEOOziwxMzeMLPrwg4mREcDO83syaAb4TEzKw87qAIwF/hZ2EGExd23Av8X\n+IDYxDMfuftvwo0qXKEmcTO7BKh39xpid6BJh1scQM5y99OI/XZyk5mdHXZAISkDTgN+EFyPfcD/\nDjekcJnZIOAy4JdhxxIWMxtJbGL2KcB4YJiZXRVuVOEK+078LOCyoB/4Z8DnzGzA9m0BuPuHwZ87\ngH8HZoQbUWi2AJvd/Q/B8gJiSX0guwhYEfzbGKg+D7zn7rvcvQ14Djgz5JhCFWoSd/c73H2yux8D\nXAH8zt3/IsyYwmRmh5jZsOD7Q4E/Af4YblThcPd6YLOZTQ1WnQ+sCTGkQnAlA7grJfABMMvMhpqZ\nEft3sTbNPkUtk4mSpf+MA/7dzJzY381P3X1xyDGF6Wbgp0E3wnsM4Gn/zOwQYnehfxV2LGFy9+Vm\ntgBYBbQEfz4WblThKogSQxERyU7YfeIiItIHSuIiIhGmJC4iEmFK4iIiEaYkLiISYUriIiIRpiQu\nIhJhSuIiIhH2/wGjuiu+wQDCXgAAAABJRU5ErkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from sklearn.linear_model import LogisticRegression\n", - "\n", - "lr = LogisticRegression()\n", - "lr.fit(X, y)\n", - "fig = plot_decision_regions(X=X, y=y, clf=lr, legend=2)\n", - "plt.title('Logistic Regression 2')" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy: 100.00%\n" - ] - } - ], - "source": [ - "y_pred = nn1.predict(X_std)\n", - "acc = np.sum(y == y_pred, axis=0) / X_std.shape[0]\n", - "print('Accuracy: %.2f%%' % (acc * 100))" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\nrkJggg==\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "plt.plot(range(len(nn1.cost_)), nn1.cost_)\n", - "plt.ylim([0, 300])\n", - "plt.ylabel('Cost')\n", - "plt.xlabel('Epochs')\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Stochastic Gradient Descent" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Setting `minibatches` to `n_samples` will result in stochastic gradient descent training; please see [Gradient Descent vs. Stochastic Gradient Descent](../general_concepts/gradient-optimization.md) for details." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n27nZAZLGufsRyetzJLm7/7rBNtdKetzd70hez5M01N2XNNpXeoUCADqEu1trtu+SViGJ5yXtaGYD\nJf1L0vGSRjXaZqKkH0q6Iwm15Y0DSmr9gQEAyl+qIeXutWZ2mqRJiq7F6919rpmdGh/7eHd/wMyO\nNLMFklZLGp1mTQCA8pFqdx8AAO1RFgMnCrkhOG/MbJGZvWBmM81saqnrSYuZXW9mS8xsdoP3epnZ\nJDN7xcweNrMepawxDc0c91gze9PMZiSPI0pZY7GZWX8ze8zMXjKzOWY2Jnk/1+e7ieM+PXk/t+fb\nzDY2s+eSv19zzGxs8n6rz3XmW1LJDcF/l3SIpH8qrnMd7+7zSlpYysxsoaR93P3dUteSJjP7kqRV\nkia4++DkvV9LesfdL03+UdLL3c8pZZ3F1sxxj5W00t0vL2lxKTGzrSRt5e6zzGxTSdMV90mOVo7P\ndwvHPVL5Pt/d3f19M+ssaYqkMZK+qVae63JoSRVyQ3Aemcrj/LSLu/9NUuMgHiHppuT5TZK+0aFF\ndYBmjluK855L7r7Y3Wclz1dJmiupv3J+vps57rp7QfN8vt9Pnm6sGP/gasO5Loc/goXcEJxHLmmy\nmT1vZt8rdTEdrE/dCE93XyypT4nr6UinJXNY/m/eur0aMrNtJQ2R9KykvpVyvhsc93PJW7k932bW\nycxmSlosabK7P682nOtyCKlKdZC77y3pSEk/TLqHKlW2+6SL5xpJ27v7EMX/2HntBtpU0p8lnZG0\nLBqf31ye7yaOO9fn290/dve9FK3l/cxsd7XhXJdDSNVIGtDgdf/kvVxz938lP5dK+oui27NSLKmb\nvzHpz3+rxPV0CHdf6vUXia+TtG8p60mDmXVR/KG+2d3vTd7O/flu6rgr4XxLkruvkFQt6Qi14VyX\nQ0h9ckOwmW2kuCF4YolrSpWZdU/+1SUz20TS4ZJeLG1VqTKt3zc/UdJJyfPvSrq38S/kxHrHnfxP\nW+cY5fOc3yDpZXe/osF7lXC+P3XceT7fZta7rvvSzLpJOkxxLa7V5zrzo/ukGIIu6QrV3xD8qxKX\nlCoz207RenLFBcdb8nrMZnarpCpJW0haImmspHsk/UnSNpJel/Qtd19eqhrT0MxxH6y4XvGxpEWS\nTm1q9pVyZWYHSXpS0hzFf9su6TxJUyXdqZye7xaO+wTl9Hyb2SDFwIhOyeMOd/+FmW2uVp7rsggp\nAEBlKofuPgBAhSKkAACZRUgBADKLkAIAZBYhBQDILEIKAJBZhBRQBGZWmyy3MDP5eVYR9z3QzOYU\na39AOUl7+XigUqxO5lpMCzc0oiLRkgKKo8klF8zsNTP7tZnNNrNnzWz75P2BZvZoMgP2ZDPrn7zf\nx8zuTt6faWYHJLvqYmbjzexFM3vIzDZOth+TLKY3K5nFAsgVQgoojm6NuvuOa/DZu8nChlcrpveS\npN9JujGZAfvW5LUkXSmpOnl/b0kvJe/vJOl37r6HpPcUi8dJ0tmShiTb/7+0Dg4oFaZFAorAzFa4\n+2ZNvP+apIPdfVEyE/a/3H1LM1uqWK21Nnn/n+7ex8zektQvWeCzbh8DJU1y912S12dJ6uLuvzSz\nByStVsx3eI+7r07/aIGOQ0sKSJ8387w11jR4Xqv668lHSbpK0ep63sz4fxq5wn/QQHG0tAz4yOTn\n8ZKeSZ5PkTQqef7vkp5Knj8i6QfSJyub1rXOmtv/AHd/QtI5kjaTtGnrSweyi9F9QHF8xsxmKMLE\nJT3k7ucln/Uysxckfaj6YBoj6UYz+/+Slkoanbz/I0njzewUSeskfV+xauunWmBJN+EfkyAzSVck\nC8wBucE1KSBFyTWpfdx9WalrAcoR3X1AuvhXINAOtKQAAJlFSwoAkFmEFAAgswgpAEBmEVIAgMwi\npAAAmUVIAQAy6/8AgD+zJP9Xnx4AAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "batches = np.array_split(range(len(nn2.cost_)), nn2.epochs+1)\n", - "cost_ary = np.array(nn2.cost_)\n", - "cost_avgs = [np.mean(cost_ary[i]) for i in batches]\n", - "plt.plot(range(len(cost_avgs)),\n", - " cost_avgs,\n", - " color='red')\n", - "plt.ylim([0, 2])\n", - "plt.ylabel('Cost')\n", - "plt.xlabel('Epochs')\n", - "plt.tight_layout()\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Continue the training for 200 epochs..." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Epoch: 200/200 | Elapsed: 0:00:23 | ETA: 0:00:00" - ] - } - ], - "source": [ - "nn2.epochs = 200\n", - "nn2 = nn2.fit(X_std, y)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n5Mby1DyPucIAR9QK1KSA3Cjx+j5mNtfM7jGzj81sjJntk1re2Mz+k5ppfISZ7Z5avrOZvZBaPtHM\njkxtqq6Z9TOzKWb2hpltmVr/mtTF8yalZo8AqjVCCsiNrYo1952V9dz37t5C0sOS0nO19ZU0IDXT\n+KDUY0nqIyk/tfxQSVNTy5tI6uvuzST9IOmM1PKbJLVMrf/bXH04oLIwLRKQA2a21N23LWH5XEnt\n3H1eaubrBe6+k5l9I2kXdy9ILf/K3Xc2s68lNXL3NVnbaCxpeOqKrUqd76rr7r3M7HVJyxWz9L/k\n7stz/2mB3KEmBVQ+L+X+hvgp636BMueXT5H0kKLWNc7M+B9HtcYfMJAbJZ6TSumS+nmOpP+m7o+W\ndG7q/vmSRqbuvyWpmySZWR0zS9fOStv+nu7+rqSbJW0rqd6GFx1IDnr3AbnxMzOboAgTl/SGu9+S\nem47M/tI0iplgukaSQPM7HpJ30i6OLX8Okn9zOxSSWslXam4Ou46NbBUM+G/UkFmkh5096U5+XRA\nJeGcFFCJUuekDnP376q6LEB1QHMfULn4VghsAGpSAIDEoiYFAEgsQgoAkFiEFAAgsQgpAEBiEVIA\ngMQipAAAifX/xtk7m735Cg0AAAAASUVORK5CYII=\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "batches = np.array_split(range(len(nn2.cost_)), nn2.epochs+1)\n", - "cost_ary = np.array(nn2.cost_)\n", - "cost_avgs = [np.mean(cost_ary[i]) for i in batches]\n", - "plt.plot(range(30, len(cost_avgs)+30),\n", - " cost_avgs,\n", - " color='red')\n", - "plt.ylim([0, 2])\n", - "plt.xlim([30, 30+nn2.epochs])\n", - "plt.ylabel('Cost')\n", - "plt.xlabel('Epochs')\n", - "plt.tight_layout()\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy: 96.67%\n" - ] - } - ], - "source": [ - "y_pred = nn2.predict(X_std)\n", - "acc = np.sum(y == y_pred, axis=0) / X_std.shape[0]\n", - "print('Accuracy: %.2f%%' % (acc * 100))" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig = plot_decision_regions(X=X_std, y=y, clf=nn2, legend=2)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Example 2 - Classifying Handwritten Digits from a 10% MNIST Subset" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Load a **5000-sample subset** of the [MNIST dataset](http://rasbt.github.io/mlxtend/docs/data/mnist/) (please see [`data.load_mnist`](../data/load_mnist.md) if you want to download and read in the complete MNIST dataset).\n" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "from mlxtend.data import mnist_data\n", - "from mlxtend.preprocessing import shuffle_arrays_unison\n", - "\n", - "X, y = mnist_data()\n", - "X, y = shuffle_arrays_unison((X, y), random_seed=1)\n", - "X_train, y_train = X[:500], y[:500]\n", - "X_test, y_test = X[500:], y[500:]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Visualize a sample from the MNIST dataset to check if it was loaded correctly:" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\nQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "def plot_digit(X, y, idx):\n", - " img = X[idx].reshape(28,28)\n", - " plt.imshow(img, cmap='Greys', interpolation='nearest')\n", - " plt.title('true label: %d' % y[idx])\n", - " plt.show()\n", - " \n", - "plot_digit(X, y, 3500) " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Standardize pixel values:" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "from mlxtend.preprocessing import standardize\n", - "\n", - "X_train_std, params = standardize(X_train, \n", - " columns=range(X_train.shape[1]), \n", - " return_params=True)\n", - "\n", - "X_test_std = standardize(X_test,\n", - " columns=range(X_test.shape[1]),\n", - " params=params)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Initialize the neural network to recognize the 10 different digits (0-10) using 300 epochs and mini-batch learning." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "nn = NeuralNetMLP(n_output=10, \n", - " n_features=X_train_std.shape[1],\n", - " n_hidden=50,\n", - " l2=0.5,\n", - " l1=0.0,\n", - " epochs=300,\n", - " eta=0.001,\n", - " minibatches=25,\n", - " alpha=0.001,\n", - " decrease_const=0.0,\n", - " random_seed=1,\n", - " print_progress=3)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Learn the features while printing the progress to get an idea about how long it may take." - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Epoch: 300/300, Elapsed: 0:00:12, ETA: 0:00:00" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "nn.fit(X_train_std, y_train)\n", - "\n", - "plt.plot(range(len(nn.cost_)), nn.cost_)\n", - "plt.ylim([0, 500])\n", - "plt.ylabel('Cost')\n", - "plt.xlabel('Epochs')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Train Accuracy: 98.80%\n", - "Test Accuracy: 84.00%\n" - ] - } - ], - "source": [ - "y_train_pred = nn.predict(X_train_std)\n", - "y_test_pred = nn.predict(X_test_std)\n", - "\n", - "train_acc = np.sum(y_train == y_train_pred, axis=0) / X_train_std.shape[0]\n", - "test_acc = np.sum(y_test == y_test_pred, axis=0) / X_test_std.shape[0]\n", - "\n", - "print('Train Accuracy: %.2f%%' % (train_acc * 100))\n", - "print('Test Accuracy: %.2f%%' % (test_acc * 100))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Please note** that this neural network has been trained on only 10% of the MNIST data for technical demonstration purposes, hence, the lousy predictive performance." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# API" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "## NeuralNetMLP\n", - "\n", - "*NeuralNetMLP(n_output, n_features, n_hidden=30, l1=0.0, l2=0.0, epochs=500, eta=0.001, alpha=0.0, decrease_const=0.0, random_weights=[-1.0, 1.0], shuffle_init=True, shuffle_epoch=True, minibatches=1, random_seed=None, print_progress=0)*\n", - "\n", - "Feedforward neural network / Multi-layer perceptron classifier.\n", - "\n", - "**Parameters**\n", - "\n", - "- `n_output` : int\n", - "\n", - " Number of output units, should be equal to the\n", - " number of unique class labels.\n", - "\n", - "- `n_features` : int\n", - "\n", - " Number of features (dimensions) in the target dataset.\n", - " Should be equal to the number of columns in the X array.\n", - "\n", - "- `n_hidden` : int (default: 30)\n", - "\n", - " Number of hidden units.\n", - "\n", - "- `l1` : float (default: 0.0)\n", - "\n", - " Lambda value for L1-regularization.\n", - " No regularization if l1=0.0 (default)\n", - "\n", - "- `l2` : float (default: 0.0)\n", - "\n", - " Lambda value for L2-regularization.\n", - " No regularization if l2=0.0 (default)\n", - "\n", - "- `epochs` : int (default: 500)\n", - "\n", - " Number of passes over the training set.\n", - "\n", - "- `eta` : float (default: 0.001)\n", - "\n", - " Learning rate.\n", - "\n", - "- `alpha` : float (default: 0.0)\n", - "\n", - " Momentum constant. Factor multiplied with the\n", - " gradient of the previous epoch t-1 to improve\n", - " learning speed\n", - " w(t) := w(t) - (grad(t) + alpha*grad(t-1))\n", - "\n", - "- `decrease_const` : float (default: 0.0)\n", - "\n", - " Decrease constant. Shrinks the learning rate\n", - " after each epoch via eta / (1 + epoch*decrease_const)\n", - "\n", - "- `random_weights` : list (default: [-1.0, 1.0])\n", - "\n", - " Min and max values for initializing the random weights.\n", - " Initializes weights to 0 if None or False.\n", - "\n", - "- `shuffle_init` : bool (default: True)\n", - "\n", - " Shuffles (a copy of the) training data before training.\n", - "\n", - "- `shuffle_epoch` : bool (default: True)\n", - "\n", - " Shuffles training data before every epoch if True to prevent circles.\n", - "\n", - "- `minibatches` : int (default: 1)\n", - "\n", - " Divides training data into k minibatches for efficiency.\n", - " Normal gradient descent learning if k=1 (default).\n", - "\n", - "- `random_seed` : int (default: None)\n", - "\n", - " Set random seed for shuffling and initializing the weights.\n", - "\n", - "- `print_progress` : int (default: 0)\n", - "\n", - " Prints progress in fitting to stderr.\n", - " 0: No output\n", - " 1: Epochs elapsed and cost\n", - " 2: 1 plus time elapsed\n", - " 3: 2 plus estimated time until completion\n", - "\n", - "**Attributes**\n", - "\n", - "- `cost_` : list\n", - "\n", - " Sum of squared errors after each epoch.\n", - "\n", - "### Methods\n", - "\n", - "
\n", - "\n", - "*fit(X, y)*\n", - "\n", - "Learn weight coefficients from training data.\n", - "\n", - "**Parameters**\n", - "\n", - "- `X` : array, shape = [n_samples, n_features]\n", - "\n", - " Input layer with original features.\n", - "\n", - "- `y` : array, shape = [n_samples]\n", - "\n", - " Target class labels.\n", - "\n", - "**Returns:**\n", - "\n", - "self\n", - "\n", - "
\n", - "\n", - "*predict(X)*\n", - "\n", - "Predict class labels of X.\n", - "\n", - "**Parameters**\n", - "\n", - "- `X` : {array-like, sparse matrix}, shape = [n_samples, n_features]\n", - "\n", - " Training vectors, where n_samples is the number of samples and\n", - " n_features is the number of features.\n", - "\n", - "**Returns**\n", - "\n", - "- `class_labels` : array-like, shape = [n_samples]\n", - "\n", - " Predicted class labels.\n", - "\n", - "\n" - ] - } - ], - "source": [ - "with open('../../api_modules/mlxtend.classifier/NeuralNetMLP.md', 'r') as f:\n", - " print(f.read())" - ] - }, - { - "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.5.0" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/docs/sources/user_guide/classifier/Perceptron.ipynb b/docs/sources/user_guide/classifier/Perceptron.ipynb index 78ef611ce..818bdc75f 100644 --- a/docs/sources/user_guide/classifier/Perceptron.ipynb +++ b/docs/sources/user_guide/classifier/Perceptron.ipynb @@ -25,13 +25,13 @@ "output_type": "stream", "text": [ "Sebastian Raschka \n", - "last updated: 2016-02-22 \n", + "last updated: 2016-05-01 \n", "\n", "CPython 3.5.1\n", "IPython 4.0.3\n", "\n", "matplotlib 1.5.1\n", - "numpy 1.10.4\n", + "numpy 1.11.0\n", "scipy 0.17.0\n" ] } @@ -280,14 +280,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch: 5/5 | Elapsed: 0:00:00 | ETA: 0:00:00" + "Iteration: 5/5 | Elapsed: 00:00:00 | ETA: 00:00:00" ] }, { "data": { - "image/png": "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\n", + "image/png": "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\nIAueOX3f6pKFDBte1kVPTt5WNS4lNCuilwXISn4pd3zRk0sFrWpcSmhWRC8T4qW+t/WM+65m9nSY\n9mLhaRknbzOzenPBBSy9oCu5F07eTdlFY2ZmafHI2yrmUkKz7Dl5W8V8ctIse542MTPLIY+8raRS\npYBjzzkHdu7c94SBA1l3++2pxzH67LMZmCht3SmxYeHCVPtw2aPlhZO3lVSyFHDnTtYNHLj37thk\nIk/RwBBYr30lr4dW4RoFlz1aXnjaxMwsh5y8zcxyyNMmVlLJUsCBA7tPlSSmUNK0U+o2VbJTBa8a\nrojLHi0vvLaJmVk9mzat4CjF0yZmZjnk5G1mlkOe866hUjXFadQcZ9FGVnXeWXCdt+WFk3cNlaop\nTqPmOJM2MqrzzoLrvC0vPG1iZpZDFSVvSR+U9Lik3ZIKfxeQmZmlrtJpk3bgA8B3U4il3ylVU5xG\nzXEmbWRU550F13lbXqRS5y3pAeBzIYTlRXdynbeZWd+5ztvMrHGUnDaRtAQ4JPkQEIArQwiLyu2o\nrb2dtvb2vfdbW1pobWnpQ6j5ksbypaXaKKdEr1Qb5ZTGjXrf+xicuN8JbLr77rL7KCfWcuIo1UYW\nJYsuJbR6UTJ5hxCmpNFRoyfrntJYvrRkG2WU6JVqo5zSuMHA+sT9Q/saZxmxllWiV+p4MyhZdCmh\n1Ys0p03SXyXIzMwKqrRU8P2S1gKnAD+VdE86YZmZWW8qKhUMIdwF3JVSLA0ljeVLS7ZRRoleqTbK\nKY3rpPtUSWdf4ywj1rJK9EodbwYliy4ltHrhJWHNzOqZSwXNzBqHF6baT3kpGSsVZxbfyF5OHGbW\nN07e+ykvJWOl4sziG9nLicPM+sbTJmZmOeTkbWaWQ5422U95KRkrFWcW38heThxm1jcuFTQzq2cu\nFTQzaxxO3mZmOeTkbWaWQ07eZmY55ORtZpZDTt5mZjnk5G1mlkNO3mZmOeTkbWaWQ07eZmY55ORt\nZpZDTt5mZjnk5G1mlkNO3mZmOeTkbWaWQ07eZmY55ORtZpZDTt5mZjnk5G1mlkNO3mZmOeTkbWaW\nQ07eZmY55ORtZpZDFSVvSbMlrZa0UtKdkoanFZiZmRVX6ch7MXBcCGEi8ATwxcpDMjOzUipK3iGE\n/w4h7InvPggcXnlIZmZWSppz3hcB96TYnpmZFdFcagdJS4BDkg8BAbgyhLAo3udKYGcI4eaqRGlm\nZt2UTN4hhCm9bZf0MeBMYHJv+7W1t9PW3r73fmtLC60tLeVFaWZm3ZRM3r2RNBW4HHhHCKGzt32d\nrM3M0lPpnPe3gaHAEknLJc1NISYzMyuhopF3COGNaQViZmbl8xWWZmY55ORtZpZDTt5mZjnk5G1m\nlkNO3mZmOaQQQlZ9ZdaRmVkDUaEHPfI2M8shJ28zsxxy8jYzyyEnbzOzHHLyNjPLISfvXrS1tdU6\nhKpoxONqxGMCH1feZHlcTt698BssPxrxmMDHlTdO3mZm1isnbzOzHMryCsvckdQaQmirdRxpa8Tj\nasRjAh9X3mR5XE7eZmY55GkTM7MccvI2M8shJ+8SJM2WtFrSSkl3Shpe65gqJemDkh6XtFvSCbWO\np1KSpkr6g6Q1kmbWOp40SJon6XlJj9U6ljRJOlzS/ZJ+L6ld0qW1jikNkgZLekjSivi4rq52n07e\npS0GjgshTASeAL5Y43jS0A58APifWgdSKUlNwHeAdwPHAedJelNto0rFfKJjajS7gMtCCMcBpwKf\nbISfVwihE3hnCOF4YCLwHkmTqtmnk3cJIYT/DiHsie8+CBxey3jSEEL4YwjhCYqsE5wzk4AnQgjP\nhhB2ArcCZ9c4poqFEH4FbKp1HGkLIawPIayMb78MrAbG1jaqdIQQtsU3BwPNVPk7DJy8++Yi4J5a\nB2HdjAXWJu7/hQZJBo1O0pFEo9SHahtJOiQ1SVoBrAeWhBAermZ/zdVsPC8kLQEOST5E9FfzyhDC\nonifK4GdIYSbaxBin5VzTGa1ImkocAfwmXgEnnvxJ/Tj4/Nid0maEEJYVa3+nLyBEMKU3rZL+hhw\nJjA5k4BSUOqYGsg64IjE/cPjx6xOSWomStw/DCEsrHU8aQshbJH0ADAVqFry9rRJCZKmApcD74tP\nSjSavM97PwwcLWm8pEHAh4C7axxTWkT+fz6F3ACsCiF8s9aBpEXSaySNiG8PAaYAf6hmn07epX0b\nGAoskbRc0txaB1QpSe+XtBY4BfippNzO44cQdgOfIqoK+j1wawhhdW2jqpykm4HfAMdI+rOk6bWO\nKQ2STgM+DEyOy+qWxwOkvDsMeEDSSqI5/HtDCD+vZoe+PN7MLIc88jYzyyEnbzOzHHLyNjPLISdv\nM7MccvI2M8shJ28zsxxy8jYzyyEnbzOzHPpfM4xfBUlFAmMAAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -297,14 +297,15 @@ "name": "stdout", "output_type": "stream", "text": [ - "Bias & Weights: [ 0.0097627 0.08408412 0.31449279]\n" + "Bias & Weights: [[ 0.03330268]\n", + " [ 0.23472335]]\n" ] }, { "data": { - "image/png": "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\nyL4AAAAASUVORK5CYII=\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -369,10 +370,13 @@ "text": [ "## Perceptron\n", "\n", - "*Perceptron(eta=0.1, epochs=50, shuffle=False, random_seed=None, zero_init_weight=False, print_progress=0)*\n", + "*Perceptron(eta=0.1, epochs=50, random_seed=None, print_progress=0)*\n", "\n", "Perceptron classifier.\n", "\n", + " Note that this implementation of the Perceptron expects binary class labels\n", + " in {0, 1}.\n", + "\n", "**Parameters**\n", "\n", "- `eta` : float (default: 0.1)\n", @@ -382,20 +386,11 @@ "- `epochs` : int (default: 50)\n", "\n", " Number of passes over the training dataset.\n", - "\n", - "- `shuffle` : bool (default: False)\n", - "\n", - " Shuffles training data every epoch if True to prevent circles.\n", + " Prior to each epoch, the dataset is shuffled to prevent cycles.\n", "\n", "- `random_seed` : int\n", "\n", - " Random state for initializing random weights.\n", - "\n", - "- `zero_init_weight` : bool (default: False)\n", - "\n", - " If True, weights are initialized to zero instead of small random\n", - " numbers in the interval [-0.1, 0.1];\n", - " ignored if solver='normal equation'\n", + " Random state for initializing random weights and shuffling.\n", "\n", "- `print_progress` : int (default: 0)\n", "\n", @@ -407,9 +402,13 @@ "\n", "**Attributes**\n", "\n", - "- `w_` : 1d-array\n", + "- `w_` : 2d-array, shape={n_features, 1}\n", + "\n", + " Model weights after fitting.\n", "\n", - " Weights after fitting.\n", + "- `b_` : 1d-array, shape={1,}\n", + "\n", + " Bias unit after fitting.\n", "\n", "- `cost_` : list\n", "\n", @@ -419,9 +418,9 @@ "\n", "
\n", "\n", - "*fit(X, y, init_weights=True)*\n", + "*fit(X, y, init_params=True)*\n", "\n", - "Learn weight coefficients from training data.\n", + "Learn model from training data.\n", "\n", "**Parameters**\n", "\n", @@ -434,26 +433,41 @@ "\n", " Target values.\n", "\n", - "- `init_weights` : bool (default: True)\n", + "- `init_params` : bool (default: True)\n", "\n", - " Re-initializes weights prior to fitting. Set False to continue\n", - " training with weights from a previous fitting.\n", + " Re-initializes model parametersprior to fitting.\n", + " Set False to continue training with weights from\n", + " a previous model fitting.\n", "\n", "**Returns**\n", "\n", - "self\n", + "- `self` : object\n", + "\n", "\n", "
\n", "\n", - "*net_input(X)*\n", + "*predict(X)*\n", + "\n", + "Predict targets from X.\n", + "\n", + "**Parameters**\n", + "\n", + "- `X` : {array-like, sparse matrix}, shape = [n_samples, n_features]\n", + "\n", + " Training vectors, where n_samples is the number of samples and\n", + " n_features is the number of features.\n", + "\n", + "**Returns**\n", + "\n", + "- `target_values` : array-like, shape = [n_samples]\n", "\n", - "Net input function\n", + " Predicted target values.\n", "\n", "
\n", "\n", - "*predict(X)*\n", + "*score(X, y)*\n", "\n", - "Predict class labels of X.\n", + "Compute the prediction accuracy\n", "\n", "**Parameters**\n", "\n", @@ -462,11 +476,16 @@ " Training vectors, where n_samples is the number of samples and\n", " n_features is the number of features.\n", "\n", + "- `y` : array-like, shape = [n_samples]\n", + "\n", + " Target values (true class labels).\n", + "\n", "**Returns**\n", "\n", - "- `class_labels` : array-like, shape = [n_samples]\n", + "- `acc` : float\n", "\n", - " Predicted class labels.\n", + " The prediction accuracy as a float\n", + " between 0.0 and 1.0 (perfect score).\n", "\n", "\n" ] diff --git a/docs/sources/user_guide/classifier/Perceptron_files/Perceptron_25_1.png b/docs/sources/user_guide/classifier/Perceptron_files/Perceptron_25_1.png index bd1b5a740..dbd35a58f 100644 Binary files a/docs/sources/user_guide/classifier/Perceptron_files/Perceptron_25_1.png and b/docs/sources/user_guide/classifier/Perceptron_files/Perceptron_25_1.png differ diff --git a/docs/sources/user_guide/classifier/Perceptron_files/Perceptron_25_3.png b/docs/sources/user_guide/classifier/Perceptron_files/Perceptron_25_3.png index 56e4e9949..78adf27ea 100644 Binary files a/docs/sources/user_guide/classifier/Perceptron_files/Perceptron_25_3.png and b/docs/sources/user_guide/classifier/Perceptron_files/Perceptron_25_3.png differ diff --git a/docs/sources/user_guide/classifier/SoftmaxRegression.ipynb b/docs/sources/user_guide/classifier/SoftmaxRegression.ipynb index e551ae64a..1153039c7 100644 --- a/docs/sources/user_guide/classifier/SoftmaxRegression.ipynb +++ b/docs/sources/user_guide/classifier/SoftmaxRegression.ipynb @@ -25,15 +25,15 @@ "output_type": "stream", "text": [ "Sebastian Raschka \n", - "last updated: 2016-03-19 \n", + "last updated: 2016-05-01 \n", "\n", "CPython 3.5.1\n", "IPython 4.0.3\n", "\n", "matplotlib 1.5.1\n", - "numpy 1.10.4\n", + "numpy 1.11.0\n", "scipy 0.17.0\n", - "mlxtend 0.3.1.dev0\n" + "mlxtend 0.4.1.dev0\n" ] } ], @@ -524,11 +524,18 @@ "collapsed": false }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Iteration: 500/500 | Cost 0.07 | Elapsed: 0:00:00 | ETA: 0:00:00" + ] + }, { "data": { - "image/png": "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\n", + "image/png": "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\ngg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -536,9 +543,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\nAc5q5G6NnoavAAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -560,7 +567,11 @@ "X[:,0] = (X[:,0] - X[:,0].mean()) / X[:,0].std()\n", "X[:,1] = (X[:,1] - X[:,1].mean()) / X[:,1].std()\n", "\n", - "lr = SoftmaxRegression(eta=0.005, epochs=200, minibatches=1, random_seed=1)\n", + "lr = SoftmaxRegression(eta=0.075, \n", + " epochs=500, \n", + " minibatches=1, \n", + " random_seed=1,\n", + " print_progress=3)\n", "lr.fit(X, y)\n", "\n", "plot_decision_regions(X, y, clf=lr)\n", @@ -621,9 +632,9 @@ "output_type": "stream", "text": [ "Last 3 Class Labels:\n", - " [[ 4.99921674e-06 7.23245885e-02 9.27670412e-01]\n", - " [ 2.50487208e-07 1.20047952e-02 9.87994954e-01]\n", - " [ 2.14388120e-04 2.95955727e-01 7.03829884e-01]]\n" + " [[ 5.19550893e-07 3.12873619e-02 9.68712119e-01]\n", + " [ 1.08556117e-09 2.37254987e-03 9.97627449e-01]\n", + " [ 1.07576472e-05 1.63409763e-01 8.36579479e-01]]\n" ] } ], @@ -641,16 +652,16 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\nYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -658,9 +669,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -704,7 +715,7 @@ }, { "cell_type": "code", - "execution_count": 267, + "execution_count": 16, "metadata": { "collapsed": false }, @@ -715,9 +726,9 @@ "text": [ "## SoftmaxRegression\n", "\n", - "*SoftmaxRegression(eta=0.01, epochs=50, l2_lambda=0.0, minibatches=1, random_seed=None, zero_init_weight=False, print_progress=0)*\n", + "*SoftmaxRegression(eta=0.01, epochs=50, l2=0.0, minibatches=1, n_classes=None, random_seed=None, print_progress=0)*\n", "\n", - "Logistic regression classifier.\n", + "Softmax regression classifier.\n", "\n", "**Parameters**\n", "\n", @@ -728,29 +739,30 @@ "- `epochs` : int (default: 50)\n", "\n", " Passes over the training dataset.\n", + " Prior to each epoch, the dataset is shuffled\n", + " if `minibatches > 1` to prevent cycles in stochastic gradient descent.\n", "\n", - "- `l2_lambda` : float\n", + "- `l2` : float\n", "\n", " Regularization parameter for L2 regularization.\n", - " No regularization if l2_lambda=0.0.\n", + " No regularization if l2=0.0.\n", "\n", "- `minibatches` : int (default: 1)\n", "\n", - " Divide the training data into *k* minibatches\n", - " for accelerated stochastic gradient descent learning.\n", - " Gradient Descent Learning if `minibatches` = 1\n", - " Stochastic Gradient Descent learning if `minibatches` = len(y)\n", - " Minibatch learning if `minibatches` > 1\n", + " The number of minibatches for gradient-based optimization.\n", + " If 1: Gradient Descent learning\n", + " If len(y): Stochastic Gradient Descent (SGD) online learning\n", + " If 1 < minibatches < len(y): SGD Minibatch learning\n", "\n", - "- `random_seed` : int (default: None)\n", + "- `n_classes` : int (default: None)\n", "\n", - " Set random state for shuffling and initializing the weights.\n", + " A positive integer to declare the number of class labels\n", + " if not all class labels are present in a partial training set.\n", + " Gets the number of class labels automatically if None.\n", "\n", - "- `zero_init_weight` : bool (default: False)\n", + "- `random_seed` : int (default: None)\n", "\n", - " If True, weights are initialized to zero instead of small random\n", - " numbers following a standard normal distribution with mean=0 and\n", - " stddev=1.\n", + " Set random state for shuffling and initializing the weights.\n", "\n", "- `print_progress` : int (default: 0)\n", "\n", @@ -762,22 +774,25 @@ "\n", "**Attributes**\n", "\n", - "- `w_` : 1d-array\n", + "- `w_` : 2d-array, shape={n_features, 1}\n", + "\n", + " Model weights after fitting.\n", + "\n", + "- `b_` : 1d-array, shape={1,}\n", "\n", - " Weights after fitting.\n", + " Bias unit after fitting.\n", "\n", "- `cost_` : list\n", "\n", - " List of floats with sum of squared error cost (sgd or gd) for every\n", - " epoch.\n", + " List of floats, the average cross_entropy for each epoch.\n", "\n", "### Methods\n", "\n", "
\n", "\n", - "*fit(X, y, init_weights=True)*\n", + "*fit(X, y, init_params=True)*\n", "\n", - "Learn weight coefficients from training data.\n", + "Learn model from training data.\n", "\n", "**Parameters**\n", "\n", @@ -790,9 +805,11 @@ "\n", " Target values.\n", "\n", - "- `init_weights` : bool (default: True)\n", + "- `init_params` : bool (default: True)\n", "\n", - " (Re)initializes weights to small random floats if True.\n", + " Re-initializes model parametersprior to fitting.\n", + " Set False to continue training with weights from\n", + " a previous model fitting.\n", "\n", "**Returns**\n", "\n", @@ -803,7 +820,7 @@ "\n", "*predict(X)*\n", "\n", - "Predict class labels of X.\n", + "Predict targets from X.\n", "\n", "**Parameters**\n", "\n", @@ -814,9 +831,9 @@ "\n", "**Returns**\n", "\n", - "- `class_labels` : array-like, shape = [n_samples]\n", + "- `target_values` : array-like, shape = [n_samples]\n", "\n", - " Predicted class labels.\n", + " Predicted target values.\n", "\n", "
\n", "\n", @@ -836,7 +853,29 @@ "- `Class probabilties` : array-like, shape= [n_samples, n_classes]\n", "\n", "\n", - "### Properties\n", + "
\n", + "\n", + "*score(X, y)*\n", + "\n", + "Compute the prediction accuracy\n", + "\n", + "**Parameters**\n", + "\n", + "- `X` : {array-like, sparse matrix}, shape = [n_samples, n_features]\n", + "\n", + " Training vectors, where n_samples is the number of samples and\n", + " n_features is the number of features.\n", + "\n", + "- `y` : array-like, shape = [n_samples]\n", + "\n", + " Target values (true class labels).\n", + "\n", + "**Returns**\n", + "\n", + "- `acc` : float\n", + "\n", + " The prediction accuracy as a float\n", + " between 0.0 and 1.0 (perfect score).\n", "\n", "\n" ] @@ -846,15 +885,6 @@ "with open('../../api_modules/mlxtend.classifier/SoftmaxRegression.md', 'r') as f:\n", " print(f.read())" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/docs/sources/user_guide/classifier/SoftmaxRegression_files/SoftmaxRegression_34_1.png b/docs/sources/user_guide/classifier/SoftmaxRegression_files/SoftmaxRegression_34_1.png index fbceb246b..8be2e1f53 100644 Binary files a/docs/sources/user_guide/classifier/SoftmaxRegression_files/SoftmaxRegression_34_1.png and b/docs/sources/user_guide/classifier/SoftmaxRegression_files/SoftmaxRegression_34_1.png differ diff --git a/docs/sources/user_guide/classifier/SoftmaxRegression_files/SoftmaxRegression_34_2.png b/docs/sources/user_guide/classifier/SoftmaxRegression_files/SoftmaxRegression_34_2.png new file mode 100644 index 000000000..7e724917e Binary files /dev/null and b/docs/sources/user_guide/classifier/SoftmaxRegression_files/SoftmaxRegression_34_2.png differ diff --git a/docs/sources/user_guide/classifier/SoftmaxRegression_files/SoftmaxRegression_40_0.png b/docs/sources/user_guide/classifier/SoftmaxRegression_files/SoftmaxRegression_40_0.png index 01af37b56..943aea22d 100644 Binary files a/docs/sources/user_guide/classifier/SoftmaxRegression_files/SoftmaxRegression_40_0.png and b/docs/sources/user_guide/classifier/SoftmaxRegression_files/SoftmaxRegression_40_0.png differ diff --git a/docs/sources/user_guide/classifier/SoftmaxRegression_files/SoftmaxRegression_40_1.png b/docs/sources/user_guide/classifier/SoftmaxRegression_files/SoftmaxRegression_40_1.png index eaa0c3118..57e2d8a6a 100644 Binary files a/docs/sources/user_guide/classifier/SoftmaxRegression_files/SoftmaxRegression_40_1.png and b/docs/sources/user_guide/classifier/SoftmaxRegression_files/SoftmaxRegression_40_1.png differ diff --git a/docs/sources/user_guide/regressor/LinearRegression.ipynb b/docs/sources/user_guide/regressor/LinearRegression.ipynb index a9e84c2bb..dea9e1e47 100644 --- a/docs/sources/user_guide/regressor/LinearRegression.ipynb +++ b/docs/sources/user_guide/regressor/LinearRegression.ipynb @@ -25,15 +25,15 @@ "output_type": "stream", "text": [ "Sebastian Raschka \n", - "last updated: 2016-02-23 \n", + "last updated: 2016-05-01 \n", "\n", "CPython 3.5.1\n", "IPython 4.0.3\n", "\n", "matplotlib 1.5.1\n", - "numpy 1.10.4\n", + "numpy 1.11.0\n", "scipy 0.17.0\n", - "mlxtend 0.3.1.dev0\n" + "mlxtend 0.4.1.dev0\n" ] } ], @@ -185,7 +185,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 7, "metadata": { "collapsed": false }, @@ -202,7 +202,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -214,14 +214,14 @@ "import matplotlib.pyplot as plt\n", "from mlxtend.regressor import LinearRegression\n", "\n", - "X = np.array([ 1, 2.1, 3.6, 4.2, 6])[:, np.newaxis]\n", - "y = np.array([ 1, 2, 3, 4, 5])\n", + "X = np.array([ 1.0, 2.1, 3.6, 4.2, 6])[:, np.newaxis]\n", + "y = np.array([ 1.0, 2.0, 3.0, 4.0, 5.0])\n", "\n", "ne_lr = LinearRegression(minibatches=None)\n", "ne_lr.fit(X, y)\n", "\n", - "print('Intercept: %.2f' % ne_lr.w_[0])\n", - "print('Slope: %.2f' % ne_lr.w_[1])\n", + "print('Intercept: %.2f' % ne_lr.b_)\n", + "print('Slope: %.2f' % ne_lr.w_[0])\n", "\n", "def lin_regplot(X, y, model):\n", " plt.scatter(X, y, c='blue')\n", @@ -241,7 +241,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 11, "metadata": { "collapsed": false }, @@ -250,22 +250,22 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch: 1000/1000 | Cost 0.08 | Elapsed: 0:00:00 | ETA: 0:00:00" + "Iteration: 100/100 | Cost 0.08 | Elapsed: 0:00:00 | ETA: 0:00:00" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Intercept: 0.25\n", - "Slope: 0.81\n" + "Intercept: 0.82\n", + "Slope: 0.22\n" ] }, { "data": { - "image/png": "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\nTkSuQmCC\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -277,18 +277,18 @@ "import matplotlib.pyplot as plt\n", "from mlxtend.regressor import LinearRegression\n", "\n", - "X = np.array([ 1, 2.1, 3.6, 4.2, 6])[:, np.newaxis]\n", - "y = np.array([ 1, 2, 3, 4, 5])\n", + "X = np.array([ 1.0, 2.1, 3.6, 4.2, 6])[:, np.newaxis]\n", + "y = np.array([ 1.0, 2.0, 3.0, 4.0, 5.0])\n", "\n", "gd_lr = LinearRegression(eta=0.005, \n", - " epochs=1000,\n", + " epochs=100,\n", " minibatches=1,\n", " random_seed=123,\n", " print_progress=3)\n", "gd_lr.fit(X, y)\n", "\n", - "print('Intercept: %.2f' % gd_lr.w_[0])\n", - "print('Slope: %.2f' % gd_lr.w_[1])\n", + "print('Intercept: %.2f' % gd_lr.w_)\n", + "print('Slope: %.2f' % gd_lr.b_)\n", "\n", "def lin_regplot(X, y, model):\n", " plt.scatter(X, y, c='blue')\n", @@ -301,16 +301,16 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { - "image/png": "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\nf/1LtnlsvjJLAAAAAElFTkSuQmCC\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -328,51 +328,6 @@ "plt.show() " ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " **Tip**: I you are using gradient descent, consider standardizing the variables for better convergence of the algorithm." - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Epoch: 1000/1000 | Cost 0.04 | Elapsed: 0:00:00 | ETA: 0:00:00" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "X_std = (X - np.mean(X)) / X.std()\n", - "y_std = (y - np.mean(y)) / y.std()\n", - " \n", - "gd_lr.fit(X_std, y_std)\n", - "\n", - "plt.plot(range(1, gd_lr.epochs+1), gd_lr.cost_)\n", - "plt.xlabel('Epochs')\n", - "plt.ylabel('Cost')\n", - "plt.tight_layout()\n", - "plt.show() " - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -382,7 +337,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 16, "metadata": { "collapsed": false }, @@ -397,9 +352,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\nYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -411,18 +366,17 @@ "import matplotlib.pyplot as plt\n", "from mlxtend.regressor import LinearRegression\n", "\n", - "X = np.array([ 1, 2.1, 3.6, 4.2, 6])[:, np.newaxis]\n", - "y = np.array([ 1, 2, 3, 4, 5])\n", + "X = np.array([ 1.0, 2.1, 3.6, 4.2, 6])[:, np.newaxis]\n", + "y = np.array([ 1.0, 2.0, 3.0, 4.0, 5.0])\n", "\n", "sgd_lr = LinearRegression(eta=0.01, \n", " epochs=100, \n", " random_seed=0, \n", - " minibatches=len(y),\n", - " zero_init_weight=True)\n", + " minibatches=len(y))\n", "sgd_lr.fit(X, y)\n", "\n", - "print('Intercept: %.2f' % sgd_lr.w_[0])\n", - "print('Slope: %.2f' % sgd_lr.w_[1])\n", + "print('Intercept: %.2f' % sgd_lr.b_)\n", + "print('Slope: %.2f' % sgd_lr.w_)\n", "\n", "def lin_regplot(X, y, model):\n", " plt.scatter(X, y, c='blue')\n", @@ -435,16 +389,16 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAakAAAEbCAYAAABgLnslAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHItJREFUeJzt3XmYVdWZ7/HfW4AIiCARsGUSBI0a4xQFNbcto0/EIWKi\nMWKimbRJbjQmmlyHPETspHPTSXdyY6vdoeO1nYga+ypq0CCJlcQBRBuMrSDggEwyD4IBanjvH+/G\nOpRF1amqc6h12N/P8+yn6uyzh3VW7dq/vdZe5xxzdwEAkKKqzi4AAAC7QkgBAJJFSAEAkkVIAQCS\nRUgBAJJFSAEAklX2kDKzsWY238wWmNm1zTx/sZm9lE1Pm9lHi10XALBns3K+T8rMqiQtkHSapOWS\nZku6yN3nFywzRtI8d99oZmMlTXL3McWsCwDYs5W7JXWCpIXuvtjdayXdJ2lc4QLuPtPdN2YPZ0oa\nVOy6AIA9W7lDapCkJQWPl6oxhJpzmaTH27kuAGAP07WzC7CDmZ0q6cuSPt7ZZQEApKHcIbVM0tCC\nx4OzeTvJBktMljTW3de3Zd1sfT6AEAAS5e7W3nXL3d03W9JIMxtmZntJukjSI4ULmNlQSf8p6RJ3\nf70t6xZy91anSy913XFH68vtadONN97Y6WVIeaJ+qB/qp3xTR5W1JeXu9WZ2haTpikC83d3nmdmE\neNonS5ooqZ+k28zMJNW6+wm7Wrcj5eneXdq2rUMvCQCwG5X9npS7PyHp0Cbzflnw++WSLi923Y4g\npACgsuTqEye6d5e2b+/sUux+1dXVnV2EpFE/LaN+Wkb9lFdZ38y7u5iZF/M6brhB6tVL+t73dkOh\nAAAyM3nCAyeSQncfAFQWQgoAkCxCCgCQrNyFVB4HTgBApcpVSO21Fy0pAKgkuQopuvsAoLIQUgCA\nZBFSAIBk5S6kGDgBAJUjVyHFwAkAqCy5Cim6+wCgshBSAIBkEVIAgGTlLqQYOAEAlSNXIcXACQCo\nLLkKKbr7AKCyEFIAgGQRUgCAZOUupBg4AQCVI1ch1aWL1NAg1dd3dkkAAMXIVUiZ0eUHAJUkVyEl\nEVIAUEkIKQBAsnIZUgyeAIDKkLuQ4lMnAKBy5C6k6O4DgMpBSAEAkkVIAQCSlcuQYuAEAFSG3IUU\nAycAoHLkLqTo7gOAykFIAQCSRUgBAJKVy5Bi4AQAVIbchRQDJwCgcuQupOjuA4DKQUgBAJKVy5Di\nnhQAVIZchhQtKQCoDLkLKQZOAEDlyF1I0ZICgMpBSAEAkpXLkGLgBABUhlyGFC0pAKgMuQspBk4A\nQOXIXUjRkgKAykFIAQCSlcuQYuAEAFSGsoeUmY01s/lmtsDMrm3m+UPN7Fkz22pmVzd57i0ze8nM\n5pjZ86UoDy0pAKgcXcu5cTOrknSLpNMkLZc028ymuvv8gsXWSrpS0nnNbKJBUrW7ry9VmRg4AQCV\no9wtqRMkLXT3xe5eK+k+SeMKF3D3Ne7+oqS6Zta3UpeRlhQAVI5yh9QgSUsKHi/N5hXLJT1pZrPN\n7PJSFIiQAoDKUdbuvhI42d1XmFl/RVjNc/enO7JBBk4AQOUod0gtkzS04PHgbF5R3H1F9nO1mT2k\n6D5sNqQmTZr0/u/V1dWqrq5udpvckwKA8qmpqVFNTU3JtmfuXrKNfWDjZl0kvaYYOLFC0vOSxrv7\nvGaWvVHSZnf/5+xxT0lV7r7ZzHpJmi7pJnef3sy6Xuzr2LBBGjZM2rixva8KAFAsM5O7W3vXL2tL\nyt3rzewKRcBUSbrd3eeZ2YR42ieb2UBJL0jqLanBzK6SdLik/pIeMjPPynlvcwHVVtyTAoDKUdaW\n1O7SlpZUQ4PUtatUXy9Zu7MdAFCMjrakcveJE1VVUpcuUl1zA94BAEnJXUhJDJ4AgEqRy5DivhQA\nVAZCCgCQLEIKAJCs3IYUnzoBAOnLZUgxcAIAKkMuQ4ruPgCoDIQUACBZhBQAIFm5DSkGTgBA+nIZ\nUgycAIDKkMuQorsPACoDIQUASBYhBQBIVm5DioETAJC+XIYUAycAoDLkMqTo7gOAykBIAQCSRUgB\nAJKV25Bi4AQApC+XIcXACQCoDLkMKbr7AKAyEFIAgGTlNqS4JwUA6cttSNGSAoD05TKkGDgBAJUh\nlyFFSwoAKgMhBQBIVm5DioETAJC+3IYULSkASF8uQ4qBEwBQGXIZUrSkAKAyEFIAgGTlNqQYOAEA\n6cttSNGSAoD05TKkGDgBAJUhtyFVWys1NHR2SQAALcllSJlFUHFfCgDSlsuQkhg8AQCVINchxX0p\nAEhbbkOKwRMAkL7chhQtKQBIHyEFAEhWrkOKgRMAkLZchxQtKQBIW1EhZWZ3FzOvkjBwAgDSV2xL\n6ojCB2bWRdJxpS/O7kNLCgDS12JImdn1ZvaupI+a2aZselfSKklTd0sJy4SQAoD0tRhS7v6/3b23\npJ+6+77Z1NvdP+Tu1++mMpYFAycAIH3Fdvc9Zma9JMnMvmBmPzOzYcWsaGZjzWy+mS0ws2ubef5Q\nM3vWzLaa2dVtWbcjaEkBQPqKDal/lfSemR0l6RpJr0u6q7WVzKxK0i2SzlDc1xpvZh9usthaSVdK\n+mk71m03Bk4AQPqKDak6d3dJ4yTd4u63SupdxHonSFro7ovdvVbSfdk23ufua9z9RUl1bV23I2hJ\nAUD6ig2pd83sekmXSPpt1srpVsR6gyQtKXi8NJtXjI6s2ypCCgDS17XI5T4n6WJJX3H3d8xsqJp0\nz3W2SZMmvf97dXW1qqurW1yegRMAUHo1NTWqqakp2faKCqksmO6VdLyZnSPpeXdv9Z6UpGWShhY8\nHpzNK0ab1i0MqWLsvbe0cWObVgEAtKJpI+Gmm27q0PaK/cSJCyU9L+mzki6UNMvMLihi1dmSRprZ\nMDPbS9JFkh5paVcdWLdNzj5buvdeqb6+VFsEAJRasd1935N0vLuvkiQz6y9phqQHW1rJ3evN7ApJ\n0xWBeLu7zzOzCfG0TzazgZJeUAzEaDCzqyQd7u6bm1u3Ha+xWSeeKA0YID3yiPTpT5dqqwCAUrIY\ntNfKQmYvu/uRBY+rJL1UOK8zmZkX8zqauv9+6dZbpT/9qQyFAgDIzOTu1vqSzSt2dN8TZvY7M/uS\nmX1J0m8lTWvvTlNx/vnSW29JL77Y2SUBADSnxZaUmY2UNNDdnzGzz0j6ePbUBkn3uvvru6GMrWpv\nS0qSfvpT6aWXpHvuKXGhAAAdbkm1FlKPSbre3V9uMv9IST9y90+1d8el1JGQ2rBBGjFCevllaVDJ\n3oUFAJDK3903sGlASVI276D27jQlfftKn/983JsCAKSltZbUQncftYvnFrn7yLKVrA060pKSpEWL\nYrTf4sVSz54lLBgA5Fy5W1IvmNnlzez0Mkl7zHCDkSOl0aNjtB8AIB2ttaQGSnpI0nY1htLHJO0l\n6dPu/k7ZS1iEjrakJOmxx6Qf/ECaNatEhQIAlHfgRMFOTpX0kezhK+7+h/busBxKEVL19dLw4dLD\nD0vHHluiggFAzu2WkEpdKUJKkn74Q2nJEumXvyxBoQAAhJRUupBasUI6/PAYQLHvviUoWAtqa6Xn\nn5e6dZP22SemAw+Uuhb7QVUAUAEIKZUupCTps5+VPvEJ6etfL8nmPmDFCmny5GitHXBAhNLmzfF+\nrQMPlB59VPqbvynPvpuzdm3s86GHpFdfle66K0Y6Asi37dul996TtmyRGhrifaRVTYba1dVJCxdK\n/ftL++/f/HY6GlJctzfxta9J3/52/LQWqrW2Vpo5U5o+PULl8sujVdScurpY7j/+Q5oxQ7roIunJ\nJ6Ujjmhcxl360Y+kMWNiEMeRu/hUxE2bpKlT475Z4fpt4R6fV/iTn0hPPy2dfnqEc/fu0rnnRlCd\neWb7tl3J3OOfslev0m532TLpuefik01eeikeT5wonXdeafeDyrNunfTv/y796lfSJZdI3/9+55TD\nPY7NP/4xpj//OS6ce/WKqaFB2rpVOu446WMfi7CaOVN64YUIqLVr4/x3+OFxkf+975WwV8jdK36K\nl1Ea9fXuo0a5P/NMPG5ocF+92n3WLPd77nH//vfdzzvPvW9f92OPdb/uOvfTTnM//HD3J59s3M57\n77k/9ZT7Nde4H3CA++jR7rfd5r5+fcv7nzLFvX9/98cfd9+61X3jRvdVq9xraty/+EX3Pn3czzzT\nff/93W+4Ifazw4oV7j/5ifsPfuD+5psf3HZtrfujj7qfdJL7yJHukye7b9my8zLPPus+cKD7XXe1\no/Ja0dDg/tprH9xnQ0PU98UXx2u8++54Le7xOm67zf3cc93Hj3dfuLD05XKP+h0zxr1nT/cf/9h9\n+/aObe/NN93/6Z9im/36RfknTnR/8EH3xx6LY2z8+Di2OtP27e5z57rX1bW+7MaN7q+8Uv4ypWLJ\nEvcHHnC/8Ub3RYtKs80NG9xffNH9N79xnzAhziOXXuo+Y4b7YYe5//CHpdlPc2prdz5fuMf57sEH\n3Y8+2v3gg6NM994br72plSvdp01zv+mmOA9Om+a+dm0819DgvmxZvI4zzohz4o7nsvNzu8/vdPc1\n42c/i8/069ZNWrky3uA7YoQ0apR0yCHSYYfF1cLAgbG8e4wKvOaaWGbz5rgq+chHopXyhS9IH/5w\n8ft/5pn48Nt166J10727NHiwdOmlsa0BA6Lb8Fvfig/HveaaaKnV1Eif+Ux8oeP998f+P/e5WPbZ\nZ+Me2KGHSt/5jnTBBVKXLs3v/9VXoyV10knRojv00Hgv2bZtccW0Zk28xr32apx6945P7+jbV+rT\np/EKrFu3eLP0lCkxbdokvfuudPLJ0tix0n77xad9rFsnXXFFbGvGDOmpp6QePWLU5RlnxLJvvin9\n/OdRBxMnxrpLlkR3w+rV0d0wYEBc2XXpIv31r9Eyqq2NrtX+/Ru7K9zjtcyfHy3Y+fNj4Mzo0VGO\nZcuiW3bMmOL+Zu7S3LnRyp06VVq6NFpKF1wgnXpqvK5C770Xr2HKlPg7jhghDRkSU//+Oy9fWxv3\nSV9/PVr3gwbF8dC7t/Taa9Ls2TFt3x51dfrpzd9TdY+6X7curoKnTpWeeCKW7dIlXvdXvhJ/Qyn+\n3osWxd/jscdind69439g4sT4HzCL7S5YEK3yefOiTAsWRF2ff7504YVxHDXXM7F9uzRnTuxr1Kj4\nO+2qB8M9up569Nj1sbvDtm1Rhn33jZ6OpvXfdLtvvx1/vx2t3dmz4/g58URp2DDp17+O+rn22th/\nW8ydK915Z/xPbtokHXxw/L2PO0667LJ4zVL8n55ySvTKfPe7Ma++Plora9Y0Hh99+7bcy9NUbW30\n4vzDP8T57JBDpOOPj/q+6644v02cKJ1zzge789qjvj7q6eGH46uQjjiCe1IlD6n6+jiw9t8/gmjv\nvYtbb+tW6b774kAaM6b03UbNmTYtTqbnnBOB1Lt3zN+2Tfrtb+Ne09ChETgnnij161fcdt95J9Zf\nsCBOOq+/HvXwoQ/FtM8+0Y25fXvsa8sWaf366CLYsCEeb9kSJ5O+faNsF18cIbBpk/T738cJcsUK\n6e/+TjrrrJ1PPHV1cWIePnznf5xVq6SbboovrNy+PYLqkEMinNaujedXrowTT8+eMXXtGvt59924\n79etW4Rb9+5xAvrqV6UJExpPZO5xQrn66limqqqxDDte77ZtcZzseK6+PsJl3LiYTjqpuO6O556L\nY2bJksZp7dooy377RVlXrIgT7cEHx8lp6dKYtm6Nv+3xx8dUVRV1+uyz0jHHxPG3bl38XXZMPXrE\ndo88Msr5qU/FtmfNkm6+WXr88bi4eeutqMchQ6S//dtY7vTTY/0pUyLY+/WL+qupiXKeckqse8gh\ncWGzebP04IPSAw9EPR5xROx7xzE4c2YE1MiR8XdatCjCe/jw2E9VVRwT27bFRciqVTFvx0XHkCHx\n9+zTJ4773r2jzC+8EGE5dGgcgytXxjE4aFCU96CDYt3ly2P/c+dG+Y4+WjrqqJiOOy5O4jvCYMmS\nuA0wZ06EVX19bHvz5li3b994bT16xPG/dm1MTz0Vjy+9NLrzCrfZnKVLox7HjYtgeuKJOLaHDIky\nvP12HJ/Dh8c0YkTUQffuO1807ni8fHl0648aJU2aFLcJ/vKXCOFXXon9fPKTbQu9Yt15Z1wQr1lD\nSJU8pFAa7nGC6dat9Svftlq9Ok5sbbkQ+Otf4yRQVxf/9Pvs0/Ly770XJ7iGhpjcG08A3bvHa3Jv\nfK5fv9L8s+9oMaxfH6E4ZEjzLYFt26IcTW3ZEq3xuro4cRZOLbUopDipzZvX2LLbVdDW18cF0KZN\n0VI86KCWW0Bz5kTwrVsXU11dBOvo0Tu3+jZujOV2XAQ0NMTxs6OF3KtX1Mny5XHSXr48Lj52tND7\n9Yt7Jkcd1fgRZ/X1cbwsWRIXPosXx8n+gAMizI85prFXpDW/+120EHr2jOOnV68oa+HF2X77NV7M\nHXNMhHxbWiiLF0t///dRP2eeGcFaaMOGqKM33ojehRUrdr54qq2Nx9u3x4XllVdKH/94s7squ1mz\npDFjCClCCgAStbu+9BAAgN2OkAIAJIuQAgAki5ACACSLkAIAJIuQAgAki5ACACSLkAIAJIuQAgAk\ni5ACACSLkAIAJIuQAgAki5ACACSLkAIAJIuQAgAki5ACACSLkAIAJIuQAgAki5ACACSLkAIAJIuQ\nAgAki5ACACSLkAIAJIuQAgAki5ACACSLkAIAJIuQAgAki5ACACSLkAIAJIuQAgAki5ACACSLkAIA\nJKvsIWVmY81svpktMLNrd7HMzWa20MzmmtkxBfPfMrOXzGyOmT1f7rICANLStZwbN7MqSbdIOk3S\nckmzzWyqu88vWOZMSQe7+ygzGy3pXyWNyZ5ukFTt7uvLWU4AQJrK3ZI6QdJCd1/s7rWS7pM0rsky\n4yTdJUnuPktSHzMbmD1nu6GMAIBElTsABklaUvB4aTavpWWWFSzjkp40s9lmdnnZSgkASFJZu/tK\n4GR3X2Fm/RVhNc/dn+7sQgEAdo9yh9QySUMLHg/O5jVdZkhzy7j7iuznajN7SNF92GxITZo06f3f\nq6urVV1d3bGSAwDarKamRjU1NSXbnrl7yTb2gY2bdZH0mmLgxApJz0sa7+7zCpY5S9I33P1sMxsj\n6f+4+xgz6ympyt03m1kvSdMl3eTu05vZj5fzdQAA2sfM5O7W3vXL2pJy93ozu0IRMFWSbnf3eWY2\nIZ72ye4+zczOMrNFkrZI+nK2+kBJD5mZZ+W8t7mAAgDsucraktpdaEkBQJo62pJieDcAIFmEFAAg\nWYQUACBZhBQAIFmEFAAgWYQUACBZhBQAIFmEFAAgWYQUACBZhBQAIFmEFAAgWYQUACBZhBQAIFmE\nFAAgWYQUACBZhBQAIFmEFAAgWYQUACBZhBQAIFmEFAAgWYQUACBZhBQAIFmEFAAgWYQUACBZhBQA\nIFmEFAAgWYQUACBZhBQAIFmEFAAgWYQUACBZhBQAIFmEFAAgWYQUACBZhBQAIFmEFAAgWYQUACBZ\nhBQAIFmEFAAgWYQUACBZhBQAIFmEFAAgWYQUACBZhBQAIFmEFAAgWYQUACBZhBQAIFmEFAAgWYQU\nACBZhBQAIFmEFAAgWWUPKTMba2bzzWyBmV27i2VuNrOFZjbXzI5uy7oAgD1XWUPKzKok3SLpDElH\nSBpvZh9ussyZkg5291GSJkj6t2LXRXFqamo6uwhJo35aRv20jPopr3K3pE6QtNDdF7t7raT7JI1r\nssw4SXdJkrvPktTHzAYWuS6KwD9Ry6ifllE/LaN+yqvcITVI0pKCx0uzecUsU8y6AIA9WIoDJ6yz\nCwAASIO5e/k2bjZG0iR3H5s9vk6Su/s/Fizzb5Kecvf7s8fzJZ0iaXhr6xZso3wvAgDQIe7e7sZH\n11IWpBmzJY00s2GSVki6SNL4Jss8Iukbku7PQm2Du680szVFrCupYxUAAEhXWUPK3evN7ApJ0xVd\ni7e7+zwzmxBP+2R3n2ZmZ5nZIklbJH25pXXLWV4AQFrK2t0HAEBHpDhwomi82XdnZjbYzP5gZq+Y\n2ctm9s1s/n5mNt3MXjOz35lZn84ua2cysyoz+y8zeyR7TP1kzKyPmf3GzOZlx9Fo6qeRmX3bzP7b\nzP5iZvea2V55rh8zu93MVprZXwrm7bI+zOz67IMb5pnZJ4vZR8WGFG/2bVadpKvd/QhJJ0r6RlYn\n10ma4e6HSvqDpOs7sYwpuErSqwWPqZ9Gv5A0zd0Pk3SUpPmifiRJZnagpCslHevuH1XcLhmvfNfP\nHYpzcKFm68PMDpd0oaTDJJ0p6TYza3U8QcWGlHiz7we4+zvuPjf7fbOkeZIGK+rlzmyxOyWd1zkl\n7HxmNljSWZJ+VTCb+pFkZvtK+h/ufockuXudu28U9VOoi6ReZtZVUg9Jy5Tj+nH3pyWtbzJ7V/Vx\nrqT7suPqLUkLFefxFlVySPFm3xaY2UGSjpY0U9JAd18pRZBJGtB5Jet0P5f0XUmFN2OpnzBc0hoz\nuyPrDp1sZj1F/UiS3H25pH+W9LYinDa6+wxRP00N2EV9ND1nL1MR5+xKDinsgpntI+lBSVdlLaqm\no2NyOVrGzM6WtDJrbbbUzZDL+lF0Xx0r6VZ3P1Yx2vY6cfxIksysr6KVMEzSgYoW1edF/bSmQ/VR\nySG1TNLQgseDs3m5lnVDPCjpbnefms1emX0eoszsAEmrOqt8nexkSeea2RuSfi3pE2Z2t6R3qB9J\n0RuxxN1fyB7/pyK0OH7C6ZLecPd17l4v6SFJJ4n6aWpX9bFM0pCC5Yo6Z1dySL3/RmEz20vxZt9H\nOrlMKfi/kl51918UzHtE0pey378oaWrTlfLA3W9w96HuPkJxvPzB3S+R9KioH2VdNEvM7JBs1mmS\nXhHHzw5vSxpjZntnN/xPUwzAyXv9mHbumdhVfTwi6aJsRORwSSMlPd/qxiv5fVJmNlYxGmnHm31/\n3MlF6lRmdrKkP0l6WdHEdkk3KA6EBxRXMYslXejuGzqrnCkws1MkXePu55pZP1E/kiQzO0oxqKSb\npDcUb67vIupHkmRmNyoucGolzZF0maTeymn9mNkUSdWSPiRppaQbJT0s6Tdqpj7M7HpJX1XU31Xu\nPr3VfVRySAEA9myV3N0HANjDEVIAgGQRUgCAZBFSAIBkEVIAgGQRUgCAZBFSQAmZWX32uXdzsp//\nq4TbHmZmL5dqe0AlKPfXxwN5syX73Lty4Y2NyBVaUkBpNfvBtWb2ppn9Y/ZleTPNbEQ2f5iZ/d7M\n5prZk9lXicjMBpjZ/8vmzzGzMdmmumafTv7fZvaEmXXPlv9m9iWFc7NPAQD2CIQUUFo9mnT3fbbg\nufXZl+Xdqvg4L0n6F0l3uPvRkqZkjyXpZkk12fxjFZ+hJ0mjJP2Lu39E0kZJ52fzr5V0dLb818r1\n4oDdjY9FAkrIzDa5+77NzH9T0qnu/lb2SfUr3L2/ma2WdIC712fzl7v7ADNbJWlQ9oWeO7YxTNL0\n7BtPld3v6uruPzKzaYqv1nhY0sPuvqX8rxYoP1pSwO7ju/i9LbYV/F6vxvvKZ0u6RdHqmm1m/G9j\nj8CBDJRWS1+m+Lns50WSnst+f0bS+Oz3L0j6c/b7DEn/U5LMrCr7aveWtj/U3f+o+JLCfSXt0/ai\nA+lhdB9QWnub2X8pwsQlPeHuN2TP7WdmL0naqsZg+qakO8zsO5JWK74aQ5K+JWmymX1VUp2kr0t6\nR820wLJuwnuyIDNJv3D3TWV5dcBuxj0pYDfI7kkd5+7rOrssQCWhuw/YPbgaBNqBlhQAIFm0pAAA\nySKkAADJIqQAAMkipAAAySKkAADJIqQAAMn6/zPIwSRlwnsiAAAAAElFTkSuQmCC\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAakAAAEbCAYAAABgLnslAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHENJREFUeJzt3XmYHHW97/H3NxskQCCsBgJhFVHZgkICeBjFJYCKK5v6\nKB4Rr6Jw0XsRl0PO+cPr8uCKek6OyFGvCi4XQQ9iQBkVEAHZISGRsIUdskDCNkm+949fxzTDZDKZ\n6c5Up96v56lnpqurqn/16+r61Leql8hMJEmqohHD3QBJktbEkJIkVZYhJUmqLENKklRZhpQkqbIM\nKUlSZbU9pCJiekTMiYi5EXFGH/efEBE3N4YrI2Kfgc4rSdqwRTs/JxURI4C5wOHAg8B1wHGZOadp\nmqnA7MxcEhHTgRmZOXUg80qSNmztrqQOBOZl5r2Z2QOcDxzdPEFmXpOZSxo3rwF2GOi8kqQNW7tD\nagfg/qbbC1gdQn35EPDbQc4rSdrAjBruBqwSEa8FTgQOHe62SJKqod0h9QCwU9PtSY1xL9B4s8RM\nYHpmLlqXeRvz+wWEklRRmRmDnbfdp/uuA3aPiMkRMQY4Dri4eYKI2An4JfC+zLxrXeZtlpkDGnbd\nNZk3b2DTbijDWWedNextqPJg/9g/9k/7hqFqayWVmSsi4hRgFiUQz83M2RFxcrk7ZwKfB7YEvhMR\nAfRk5oFrmneobRozBnp6hroUSdL60PZrUpl5KbBnr3H/0fT/ScBJA513qEaPhuefb+USJUntUrtv\nnKhjJdXV1TXcTag0+6d/9k//7J/2auuHedeXiMiBrse0aXD22XDwwW1ulCSJiCAr/MaJyqljJSVJ\nnap2IeU1KUnqHLULKSspSeoctQspKylJ6hy1CykrKUnqHLULKSspSeoctQspKylJ6hy1CykrKUnq\nHLULKSspSeoctQspKylJ6hy1CykrKUnqHLULKSspSeoctQspKylJ6hy1CykrKUnqHLULKSspSeoc\ntQspKylJ6hy1CykrKUnqHLULqdGjDSlJ6hS1C6kxYzzdJ0mdonYhZSUlSZ2jdiFlJSVJnaN2IWUl\nJUmdo5YhZSUlSZ2hdiHlW9AlqXPULqSspCSpc9QupKykJKlz1C6krKQkqXPULqSspCSpc9QupKyk\nJKlz1C6krKQkqXPULqSspCSpc9QupKykJKlz1C6krKQkqXPULqSspCSpc9QupKykJKlz1DKkenog\nc7hbIklam9qF1IgRMHIkLF8+3C2RJK1N7UIKvC4lSZ2iliHlDx9KUmeoZUj5E/KS1BlqGVJWUpLU\nGWoZUlZSktQZahlSVlKS1BlqGVJWUpLUGWoZUlZSktQZahlSVlKS1BlqGVJWUpLUGWoZUlZSktQZ\n2h5SETE9IuZExNyIOKOP+/eMiKsj4tmIOL3XffdExM0RcWNEXNuqNllJSVJnGNXOhUfECOAc4HDg\nQeC6iLgoM+c0TfYE8HHgbX0sYiXQlZmLWtkuKylJ6gztrqQOBOZl5r2Z2QOcDxzdPEFmPp6ZfwP6\n+l7yaEcbraQkqTO0O6R2AO5vur2gMW6gErgsIq6LiJNa1Sh/+FCSOkNbT/e1wCGZ+VBEbEMJq9mZ\neeVQF+pPdUhSZ2h3SD0A7NR0e1Jj3IBk5kONv49FxIWU04d9htSMGTP+8X9XVxddXV1rXK6VlCS1\nR3d3N93d3S1bXmQbf0c9IkYCd1LeOPEQcC1wfGbO7mPas4ClmXl24/Y4YERmLo2ITYBZwL9m5qw+\n5s11WY+TT4YpU8pfSVL7RASZGYOdv62VVGauiIhTKAEzAjg3M2dHxMnl7pwZEdsB1wObASsj4lTg\n5cA2wIURkY12/rivgBoMKylJ6gxtvyaVmZcCe/Ya9x9N/z8C7NjHrEuB/drRJq9JSVJnqOU3TlhJ\nSVJnqGVIWUlJUmeoZUj5YV5J6gy1DCm/FkmSOkMtQ8pKSpI6Qy1DykpKkjpDLUPKSkqSOkMtQ8pK\nSpI6Qy1DykpKkjpDLUPKSkqSOkMtQ8pKSpI6Qy1DykpKkjpDLUPKSkqSOkMtQ8pKSpI6Qy1DykpK\nkjpDLUPKSkqSOkMtQ8pKSpI6Qy1DykpKkjpDLUPKSkqSOkMtQ8pKSpI6Qy1DykpKkjpDLUPKSkqS\nOkMtQ8pKSpI6gyElSaqsWoaUp/skqTPUMqRGjYLlyyFzuFsiSepPLUMqwlN+ktQJahlSYEhJUieo\nbUh5XUqSqq+2IWUlJUnVV9uQspKSpOqrbUhZSUlS9dU2pKykJKn6ahtSVlKSVH21DSkrKUmqvtqG\nlJWUJFVfbUPKSkqSqq+2IWUlJUnVV9uQspKSpOqrbUhZSUlS9dU2pKykJKn6ahtSVlKSVH21DSkr\nKUmqvtqGlJWUJFVfbUNqzBhDSpKqrrYhNXq0p/skqeoGFFIR8aOBjOskVlKSVH0DraRe0XwjIkYC\nB7S+OeuPlZQkVV+/IRURZ0bEU8A+EfFkY3gKeBS4aL20sE223RYWLBjuVkiS+tNvSGXm/8nMzYCv\nZOb4xrBZZm6VmWeupza2xZQpcOONw90KSVJ/Bnq67zcRsQlARLw3Ir4aEZMHMmNETI+IORExNyLO\n6OP+PSPi6oh4NiJOX5d5h2L//eGWW2D58lYuVZLUSgMNqe8CT0fEvsAngbuAH65tpogYAZwDvIly\nXev4iHhZr8meAD4OfGUQ8w7a+PGw/fZw552tWqIkqdUGGlLLMzOBo4FzMvPbwGYDmO9AYF5m3puZ\nPcD5jWX8Q2Y+npl/A3rXNGudd6imTIEbbmjlEiVJrTTQkHoqIs4E3gf8d6PKGT2A+XYA7m+6vaAx\nbiCGMu+AHHAA/O1vrVyiJKmVRg1wumOBE4APZubDEbETvU7PDbcZM2b84/+uri66urrWOs+UKfDr\nX7evTZJUN93d3XR3d7dseVHO4g1gwojtgFc3bl6bmY8OYJ6pwIzMnN64/WkgM/NLfUx7FvBUZn51\nEPPmQNej2cKFsPPOsHgxjKjtd29IUvtEBJkZg51/oN84cQxwLfBu4BjgrxHxrgHMeh2we0RMjogx\nwHHAxf091BDmXWdbbglbbw3z5rVyqZKkVhno6b7PAq9eVT1FxDbA5cAv+pspM1dExCnALEognpuZ\nsyPi5HJ3zmxUaNdT3oixMiJOBV6emUv7mncQ69ivVW+e2HPPVi9ZkjRUAzrdFxG3ZubeTbdHADc3\njxtOgz3dB/CFL8CiRfCVSl1hk6QNw3o53QdcGhG/i4gPRMQHgP8GLhnsg1aJ7/CTpOrqt5KKiN2B\n7TLzqoh4B3Bo467FwI8z86710Ma1Gkol9eij8NKXlmoqBp31kqS+DLWSWltI/QY4MzNv7TV+b+AL\nmfmWwT5wKw0lpAB23BH++EfYddcWNkqS1PbTfdv1DiiAxridB/ugVTNliqf8JKmK1hZSW/Rz39hW\nNmQ4HXCAX48kSVW0tpC6PiJO6j0yIj4EbDC1h9/hJ0nVtLZrUtsBFwLPszqUXgWMAd6emQ+3vYUD\nMNRrUg8+CPvsA4895psnJKmV2vrGiaYHeS3wysbN2zPzD4N9wHYYakgB7LYbnHce/NM/tahRkqT1\nE1JV14qQuuAC+OIX4frrYeTIFjVMkmpufX2Yd4N3zDGwxRYwc+Zwt0SStIqVVJNbb4XXvx7uuAO2\n2qoFDRukJUvg7rvLdbJWfTv788/DTTeVZXd1weg+fg1sxYrWVpFz58LXvgYveQn8y794vU+qI0/3\n0bqQAvjEJ6CnB7773XJ73rzy/x57wPvfD+PGDWw5mSUYRozoOxCa/f3v8MtfwpVXwi23lJ8QmTAB\n9toLfvCDspNfVz09ZXmXXAJXXQU331zWYeONYf58ePe74YQTYNkyuOwymDULZs+GQw+Ft70Njj4a\nJk9e98cF+Otf4ctfhj/9CT7yEbj0UnjNa+DsswcXVM8+C7/9bXkuJkwow1ZbwcEHw0YbDa6NktYP\nQ4rWhtSiRSUcvvKV8oOIV1wBH/pQ2YFffTWcfDK85z1lR3/99eVDwAsWwDPPwNNPr/779NMwalQJ\nqKlT4bWvLcO4ceWrmB55pITThReW229/O7zhDbDvvrDLLrByJfzbv8F//iecey4ceWRp38qV5d2I\nY8eWnxpZtdNfsQJuv70ExO9/X0Jn993hqKPKm0Fe/WrYdNMy7fz58JOflOtw48fDG99Yhle+sqzv\nr35V1n2PPeCUU+Bd74IxY8q8d95Z2nP77aXN73xnCY0VK8p8X/sa3H8/fPKT8MEPlsdctKhUqK97\nXQmvtQXVs8/Cww+XSuyCC0of7bdf+ajA4sVleQsWlOG00+DDH4bNNy/zLl4MN94I221XnsfhrN4e\nfRQuvrgMu+0Gn/kMbLPNi6db1eYbbij9etRR8I53dEblmVm2iT//Ga67rmwHY8aUYffd4QMfgM02\ne+E88+eXA6c3v7lsO72tqaL//e/hs5+FiRPhxBPhiCPWfgC4NgsXltfwLbeUdt19N9xzD+y9dzmo\nmjRpaMvvS2Y5cLvySnjVq8r+YeLE1j/OYM2ZU/Z/++xTXv9DPbtiSNHakIJSvZx1Fpx6Kpx00uqd\n+9y58PWvl53OXnuVDwEfcEAJlbFjSwCt+jtuXAmpJUvKC/iKK6C7G5Yvh223LcOOO5Yd0sEHr3lD\n+NOf4L3vLTu5Rx8tL6TNNy878uXLS7Wz+eblVOX228NBB5VQOuqooW34y5eXoPrWt8pGe8IJJQDn\nzSsV5b77lurv8stL9TV7dgmG008v4TWq14/ALFwIhx9ewurEE0uFGVH658Yby47ihhvK+i1bVqrH\nyZNLVXfssbDDDi9u4003lRfTqkrtjjtWf5xgwYLSp0ceWR5zwoRSdW20UakmVz1Hq56z/l6IPT0l\nGJcuLdctt9iitP/pp8v6//rX5aAgs1R4W29dDlZuvRWmTy9V6V/+Aj/9aanUTzut7NgvvrjMe9dd\npT+nTCkHBueeW9r55S/DYYetbseKFaXPmk8BZ5Z1veGGEuzjxsEmm5Rhp53KV331rjYzS9suu6wM\n115btuFXvapszzvvXNb5uefK3wkTyrY1cWJZ1vXXl23hmmtK2IwbV/p/6tRyf09POYtw9dUlWD78\nYfj4x8vz881vlnkOOqj8fetby/2bblqq/ksuKe056KDyvL/znaUvP/Wp8nx/6Uvw5JPwX/9VXo/H\nHlue30MPLQdtqzz/fOmXp58u7enpKQcDd921erjpJnjiCdh//3IQtNtupR8mT4Zf/AK+8x343OfK\njrr39rxyJdx3H9x2W3lNrFrmokWlL6ZPL23q3fdXXQVnnlk+7vKOd5Q2XHNNWf8jjijXxg87rGyP\nmaXPZs0q67H//mUbWZczKz09Aw/yefPKgfHvflfW+Yorymvxe98rr6l1de+95SDzjDMMqZaHVNUs\nWlSCbpddyk5nk03K+CVLygtl4cJy5Nf8Im2l224rldeBB5bwa97on3wSfvOb0rZp0/pfzhNPlCr0\nvvvKizyz7OD233914O++e1mPdbkWd++95cW/777wspetfoHffnvZ6f3xj/DUU2XH9dxzZae3ali2\nrPwdPbq0pXmnklnuf/bZEkybblr6fOnS0sZnnik79re8pexgxo6Fxx8vQ0Q5WNh449XLmz8fPv95\n+PnPy3q++c1l3mnTXrgTXLmyBNrnPlcOQJ57ruzUFi8uy91663JAMH58OTgYMaL03aRJZWe2bFlZ\n3/vuK8PEiSVkFi8u28oTT5QAe8MbyjBtWqkems8MbLRRqYZGjy7b34MPluGZZ8qO8qCDSihNm1aW\ntSbz58NXv1pCZeedS0i/5z1lG378cfjhD8tOcPny0odHHlmW++c/w89+VkI8ooTU6ae/sD/nzSt9\n2d1ddvS77FKep/nzywHdxInlOR09uqzL+PEliFYNe+9dDgrWtK3deSd89KMl/PfYo7RxxYrSf7Nn\nl+fmFa8ov0W3apmbbVbac+mlJWB22231geszz5SzDDNmwPvet/o5X1WNXnRR2ak/+CAcckg5EBg1\nCt70pvJYq6rt0aPLQe748S8eNtustHf27DI8/ng5cNp119I/o0fDAw+U5/ihh8o6jRy5+rLEaaeV\n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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -469,7 +423,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 19, "metadata": { "collapsed": false }, @@ -478,15 +432,15 @@ "name": "stdout", "output_type": "stream", "text": [ - "Intercept: 0.24\n", + "Intercept: 0.23\n", "Slope: 0.81\n" ] }, { "data": { - "image/png": "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\nRU5ErkJggg==\n", + "image/png": "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\nFNQiIgn3/zzXlFI9+TjLAAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -498,18 +452,17 @@ "import matplotlib.pyplot as plt\n", "from mlxtend.regressor import LinearRegression\n", "\n", - "X = np.array([ 1, 2.1, 3.6, 4.2, 6])[:, np.newaxis]\n", - "y = np.array([ 1, 2, 3, 4, 5])\n", + "X = np.array([ 1.0, 2.1, 3.6, 4.2, 6])[:, np.newaxis]\n", + "y = np.array([ 1.0, 2.0, 3.0, 4.0, 5.0])\n", "\n", "sgd_lr = LinearRegression(eta=0.01, \n", " epochs=100, \n", " random_seed=0, \n", - " minibatches=3,\n", - " zero_init_weight=True)\n", + " minibatches=3)\n", "sgd_lr.fit(X, y)\n", "\n", - "print('Intercept: %.2f' % sgd_lr.w_[0])\n", - "print('Slope: %.2f' % sgd_lr.w_[1])\n", + "print('Intercept: %.2f' % sgd_lr.b_)\n", + "print('Slope: %.2f' % sgd_lr.w_)\n", "\n", "def lin_regplot(X, y, model):\n", " plt.scatter(X, y, c='blue')\n", @@ -522,16 +475,16 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAakAAAEbCAYAAABgLnslAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAG+hJREFUeJzt3XuUHWWZ7/HvE5IAzU3UEAZCwtUIKBcRjKDLRkQBFbwc\nEbyMojIclYsXRkDXCMysNcoa55xRwVFGDqJHhDMggoqICBGjXAIGvCUQBAOEkEgIkRBy6e7n/PHu\nNk3T6d5Jeqffzv5+1qrVu2pX1X7r7dr1q/et2ntHZiJJUo3GjHQBJElaG0NKklQtQ0qSVC1DSpJU\nLUNKklQtQ0qSVK2Wh1REHBURcyLi/og4a4Dn3xMR9zaGGRGxX7PLSpI2bdHKz0lFxBjgfuAI4DFg\nJnBCZs7pM880YHZmLo2Io4DzMnNaM8tKkjZtrW5JHQLMzcx5mbkauAI4ru8MmXl7Zi5tjN4O7Nzs\nspKkTVurQ2pn4JE+44+yJoQG8hHgJ+u5rCRpEzN2pAvQKyIOB04CXjPSZZEk1aHVITUfmNxnfFJj\n2nM0bpa4GDgqM5esy7KN5f0CQkmqVGbG+i7b6u6+mcCeETElIsYDJwDX9Z0hIiYDVwPvz8w/rcuy\nfWXmoMOvfpVMmzb4PJvqcO655454GWoerB/rx/pp3bChWtqSyszuiDgVuJESiJdk5uyIOKU8nRcD\n/wS8EPhaRASwOjMPWduy61uWCBiG+pIkbUQtvyaVmTcAU/tN+0afxycDJze77PoaM8aQkqTRpm2+\ncSICenpGuhQjo7Ozc6SLUDXrZ3DWz+Csn9Zq6Yd5N5aIyKG2Y+ZM+OhH4a67NlKhJElEBFnxjRPV\n8JqUJI0+bRNSXpOSpNGnbUKqna9JSdJo1VYhZUtKkkYXQ0qSVK22CSmvSUnS6NM2IeU1KUkafdoq\npGxJSdLo0jYhZXefJI0+bRNSdvdJ0ujTViFlS0qSRhdDSpJUrbYJKa9JSdLo0zYh5TUpSRp92iqk\nbElJ0uhiSEmSqtU2ITVmjN19kjTatE1IjR8Pq1aNdCkkSeuibUJqyy3h2WdHuhSSpHVhSEmSqtU2\nITV+PHR1QXf3SJdEktSstgmpCFtTkjTatE1IgSElSaONISVJqpYhJUmqliElSapW24XU8uUjXQpJ\nUrPaLqRsSUnS6NFWIdXRYUhJ0mjSViFlS0qSRhdDSpJULUNKklQtQ0qSVC1DSpJULUNKklQtQ0qS\nVC1DSpJULUNKklQtQ0qSVC1DSpJULUNKklQtQ0qSVC1DSpJULUNKklQtQ0qSVC1DSpJULUNKklQt\nQ0qSVK2Wh1REHBURcyLi/og4a4Dnp0bEryNiRUR8qt9zf46IeyNiVkTcuaFl2WILWLkSMjd0TZKk\njWFsK1ceEWOAC4EjgMeAmRFxbWbO6TPbYuA04G0DrKIH6MzMJcNRnjFjYPx4WLGitKokSXVrdUvq\nEGBuZs7LzNXAFcBxfWfIzCcy826ga4DlY7jLaJefJI0erQ6pnYFH+ow/2pjWrAR+FhEzI+Lk4SjQ\nllvC8uXDsSZJUqu1tLtvGByWmQsiYgIlrGZn5owNWWFHhy0pSRotWh1S84HJfcYnNaY1JTMXNP7+\nJSKuoXQfDhhS55133t8ed3Z20tnZOeA67e6TpNaZPn0606dPH7b1RbbwVreI2Ay4j3LjxALgTuDE\nzJw9wLznAssy898b4x3AmMxcFhFbATcC52fmjQMsm81uxyGHwFe/Cq961fpulSSpWRFBZsb6Lt/S\nllRmdkfEqZSAGQNckpmzI+KU8nReHBETgbuAbYCeiDgD2AeYAFwTEdko53cHCqh1ZUtKkkaPll+T\nyswbgKn9pn2jz+OFwC4DLLoMOGC4y2NISdLo0VbfOAGGlCSNJoaUJKlahpQkqVqGlCSpWoaUJKla\nhpQkqVqGlCSpWoaUJKlahpQkqVqGlCSpWoaUJKlahpQkqVqGlCSpWoaUJKlahpQkqVqGlCSpWoaU\nJKlahpQkqVptF1IdHbB8+UiXQpLUjLYLqd6WVOZIl0SSNJS2C6nNNoOxY2HVqpEuiSRpKG0XUuB1\nKUkaLQwpSVK1DClJUrUMKUlStQwpSVK1DClJUrUMKUlStQwpSVK1DClJUrUMKUlStQwpSVK1DClJ\nUrUMKUlStQwpSVK1DClJUrUMKUlStQwpSVK1DClJUrUMKUlStQwpSVK12jKkOjoMKUkaDdoypGxJ\nSdLo0LYhtXz5SJdCkjSUtg0pW1KSVD9DSpJUraZCKiK+08y00cKQkqTRodmW1L59RyJiM+Cg4S/O\nxmFISdLoMGhIRcQ5EfE0sF9E/LUxPA0sAq7dKCVsgXHjoKcHurpGuiSSpMFEZg49U8QXMvOcjVCe\n9RIR2cx29LX11rBgAWyzTYsKJUkiIsjMWN/lm+3u+1FEbNV4wfdFxP+KiClNFvCoiJgTEfdHxFkD\n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\n5t4WUkdHOZj3tnBWriwhNlAd3HNPCbnOzjLP2vT0wI9/XA6Mr351Cau11ckTT5T1Ll++Zrsi1pRl\n5cpSr7vtVsK3o6OcDMyZU06kHn20/O96y7/rriWQ9tuvnCw8/ng58N9zT9n2vfYqw+TJJdTvu68M\nCxasCQwodTllShl23RUmTRr6pPKnPy3bvfvu5TX22KPsb71ht2BBKUNmqaPeVm5m2R87O0vw9/YC\nDGTRotICOeecwcPg6afh29+GX/yinBxsv30Zevebrq7y///gB1tzI1gzli2DbbYxpAwpSaqUd/dJ\nkjZZhpQkqVqGlCSpWoaUJKlahpQkqVqGlCSpWoaUJKlahpQkqVqGlCSpWoaUJKlahpQkqVqGlCSp\nWoaUJKlahpQkqVqGlCSpWoaUJKlahpQkqVqGlCSpWoaUJKlahpQkqVqGlCSpWoaUJKlahpQkqVqG\nlCSpWoaUJKlahpQkqVqGlCSpWoaUJKlahpQkqVqGlCSpWoaUJKlahpQkqVotD6mIOCoi5kTE/RFx\n1lrm+UpEzI2IeyLiwD7T/xwR90bErIi4s9VllSTVZWwrVx4RY4ALgSOAx4CZEXFtZs7pM8/RwB6Z\nuVdEvAr4T2Ba4+keoDMzl7SynJKkOrW6JXUIMDcz52XmauAK4Lh+8xwHfBsgM+8AtouIiY3nYiOU\nUZJUqVYHwM7AI33GH21MG2ye+X3mSeBnETEzIk5uWSklSVVqaXffMDgsMxdExARKWM3OzBkjXShJ\n0sbR6pCaD0zuMz6pMa3/PLsMNE9mLmj8/UtEXEPpPhwwpM4777y/Pe7s7KSzs3PDSi5JWmfTp09n\n+vTpw7a+yMxhW9nzVh6xGXAf5caJBcCdwImZObvPPMcAH8/MN0fENOA/MnNaRHQAYzJzWURsBdwI\nnJ+ZNw7wOtnK7ZAkrZ+IIDNjfZdvaUsqM7sj4lRKwIwBLsnM2RFxSnk6L87M6yPimIh4AHgGOKmx\n+ETgmojIRjm/O1BASZI2XS1tSW0stqQkqU4b2pLy9m5JUrUMKUlStQwpSVK1DClJUrUMKUlStQwp\nSVK1DClJUrUMKUlStQwpSVK1DClJUrUMKUlStQwpSVK1DClJUrUMKUlStQwpSVK1DClJUrUMKUlS\ntQwpSVK1DClJUrUMKUlStQwpSVK1DClJUrUMKUlStQwpSVK1DClJUrUMKUlStQwpSVK1DClJUrUM\n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\n", + "image/png": "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\nRK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -556,7 +509,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 21, "metadata": { "collapsed": false }, @@ -567,49 +520,51 @@ "text": [ "## LinearRegression\n", "\n", - "*LinearRegression(solver='normal equation', eta=0.01, epochs=50, random_seed=None, shuffle=False, zero_init_weight=False)*\n", + "*LinearRegression(eta=0.01, epochs=50, minibatches=None, random_seed=None, print_progress=0)*\n", "\n", "Ordinary least squares linear regression.\n", "\n", "**Parameters**\n", "\n", - "- `solver` : {'gd', 'sgd', 'normal equation'} (default: 'normal equation')\n", - "\n", - " Method for solving the cost function. 'gd' for gradient descent,\n", - " 'sgd' for stochastic gradient descent, or 'normal equation' (default)\n", - " to solve the cost function analytically.\n", - "\n", - "- `eta` : float (default: 0.1)\n", + "- `eta` : float (default: 0.01)\n", "\n", - " Learning rate (between 0.0 and 1.0);\n", - " ignored if solver='normal equation'.\n", + " solver rate (between 0.0 and 1.0)\n", "\n", "- `epochs` : int (default: 50)\n", "\n", - " Passes over the training dataset;\n", - " ignored if solver='normal equation'.\n", + " Passes over the training dataset.\n", + " Prior to each epoch, the dataset is shuffled\n", + " if `minibatches > 1` to prevent cycles in stochastic gradient descent.\n", "\n", - "- `shuffle` : bool (default: False)\n", + "- `minibatches` : int (default: None)\n", "\n", - " Shuffles training data every epoch if True to prevent circles;\n", - " ignored if solver='normal equation'.\n", + " The number of minibatches for gradient-based optimization.\n", + " If None: Normal Equations (closed-form solution)\n", + " If 1: Gradient Descent learning\n", + " If len(y): Stochastic Gradient Descent learning\n", + " If 1 < minibatches < len(y): Minibatch learning\n", "\n", "- `random_seed` : int (default: None)\n", "\n", - " Set random state for shuffling and initializing the weights;\n", - " ignored if solver='normal equation'.\n", + " Set random state for shuffling and initializing the weights.\n", "\n", - "- `zero_init_weight` : bool (default: False)\n", + "- `print_progress` : int (default: 0)\n", "\n", - " If True, weights are initialized to zero instead of small random\n", - " numbers in the interval [-0.1, 0.1];\n", - " ignored if solver='normal equation'\n", + " Prints progress in fitting to stderr if not solver='normal equation'\n", + " 0: No output\n", + " 1: Epochs elapsed and cost\n", + " 2: 1 plus time elapsed\n", + " 3: 2 plus estimated time until completion\n", "\n", "**Attributes**\n", "\n", - "- `w_` : 1d-array\n", + "- `w_` : 2d-array, shape={n_features, 1}\n", + "\n", + " Model weights after fitting.\n", "\n", - " Weights after fitting.\n", + "- `b_` : 1d-array, shape={1,}\n", + "\n", + " Bias unit after fitting.\n", "\n", "- `cost_` : list\n", "\n", @@ -620,9 +575,9 @@ "\n", "
\n", "\n", - "*fit(X, y, init_weights=True)*\n", + "*fit(X, y, init_params=True)*\n", "\n", - "Learn weight coefficients from training data.\n", + "Learn model from training data.\n", "\n", "**Parameters**\n", "\n", @@ -635,10 +590,11 @@ "\n", " Target values.\n", "\n", - "- `init_weights` : bool (default: True)\n", + "- `init_params` : bool (default: True)\n", "\n", - " Re-initializes weights prior to fitting. Set False to continue\n", - " training with weights from a previous fitting.\n", + " Re-initializes model parametersprior to fitting.\n", + " Set False to continue training with weights from\n", + " a previous model fitting.\n", "\n", "**Returns**\n", "\n", @@ -647,15 +603,9 @@ "\n", "
\n", "\n", - "*net_input(X)*\n", - "\n", - "Compute the linear net input.\n", - "\n", - "
\n", - "\n", "*predict(X)*\n", "\n", - "Predict class labels of X.\n", + "Predict targets from X.\n", "\n", "**Parameters**\n", "\n", @@ -666,8 +616,9 @@ "\n", "**Returns**\n", "\n", - "- `float` : Predicted target value.\n", + "- `target_values` : array-like, shape = [n_samples]\n", "\n", + " Predicted target values.\n", "\n", "\n" ] @@ -677,6 +628,15 @@ "with open('../../api_modules/mlxtend.regressor/LinearRegression.md', 'r') as f:\n", " print(f.read())" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { @@ -695,7 +655,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.0" + "version": "3.5.1" } }, "nbformat": 4, diff --git a/docs/sources/user_guide/regressor/LinearRegression_files/LinearRegression_19_2.png b/docs/sources/user_guide/regressor/LinearRegression_files/LinearRegression_19_2.png index a3f95fae0..244e4dcc3 100644 Binary files a/docs/sources/user_guide/regressor/LinearRegression_files/LinearRegression_19_2.png and b/docs/sources/user_guide/regressor/LinearRegression_files/LinearRegression_19_2.png differ diff --git a/docs/sources/user_guide/regressor/LinearRegression_files/LinearRegression_20_0.png b/docs/sources/user_guide/regressor/LinearRegression_files/LinearRegression_20_0.png index 7001247c1..b239e7267 100644 Binary files a/docs/sources/user_guide/regressor/LinearRegression_files/LinearRegression_20_0.png and b/docs/sources/user_guide/regressor/LinearRegression_files/LinearRegression_20_0.png differ diff --git a/docs/sources/user_guide/regressor/LinearRegression_files/LinearRegression_22_1.png b/docs/sources/user_guide/regressor/LinearRegression_files/LinearRegression_22_1.png index f9f18b1b1..0c3c1b2e2 100644 Binary files a/docs/sources/user_guide/regressor/LinearRegression_files/LinearRegression_22_1.png and b/docs/sources/user_guide/regressor/LinearRegression_files/LinearRegression_22_1.png differ diff --git a/docs/sources/user_guide/regressor/LinearRegression_files/LinearRegression_23_0.png b/docs/sources/user_guide/regressor/LinearRegression_files/LinearRegression_23_0.png new file mode 100644 index 000000000..8318d1644 Binary files /dev/null and b/docs/sources/user_guide/regressor/LinearRegression_files/LinearRegression_23_0.png differ diff --git a/docs/sources/user_guide/regressor/LinearRegression_files/LinearRegression_25_1.png b/docs/sources/user_guide/regressor/LinearRegression_files/LinearRegression_25_1.png new file mode 100644 index 000000000..7a0f29b86 Binary files /dev/null and b/docs/sources/user_guide/regressor/LinearRegression_files/LinearRegression_25_1.png differ diff --git a/docs/sources/user_guide/regressor/LinearRegression_files/LinearRegression_26_0.png b/docs/sources/user_guide/regressor/LinearRegression_files/LinearRegression_26_0.png new file mode 100644 index 000000000..f0e038640 Binary files /dev/null and b/docs/sources/user_guide/regressor/LinearRegression_files/LinearRegression_26_0.png differ diff --git a/docs/sources/user_guide/tf_classifier/TfMultiLayerPerceptron.ipynb b/docs/sources/user_guide/tf_classifier/TfMultiLayerPerceptron.ipynb index 55ac8f5c2..10b51cc5f 100644 --- a/docs/sources/user_guide/tf_classifier/TfMultiLayerPerceptron.ipynb +++ b/docs/sources/user_guide/tf_classifier/TfMultiLayerPerceptron.ipynb @@ -15,7 +15,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "metadata": { "collapsed": false }, @@ -24,19 +24,17 @@ "name": "stdout", "output_type": "stream", "text": [ - "The watermark extension is already loaded. To reload it, use:\n", - " %reload_ext watermark\n", "Sebastian Raschka \n", - "last updated: 2016-04-10 \n", + "last updated: 2016-05-01 \n", "\n", "CPython 3.5.1\n", "IPython 4.0.3\n", "\n", "matplotlib 1.5.1\n", - "numpy 1.10.4\n", + "numpy 1.11.0\n", "scipy 0.17.0\n", - "mlxtend 0.4\n", - "tensorflow 0.7.1\n" + "mlxtend 0.4.1.dev0\n", + "tensorflow 0.8.0\n" ] } ], @@ -47,7 +45,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "metadata": { "collapsed": false }, @@ -144,7 +142,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "metadata": { "collapsed": false }, @@ -153,14 +151,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch: 20/20 | Cost 0.55 | TrainAcc 0.83" + "Iteration: 20/20 | Cost 0.55" ] }, { "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -207,7 +205,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, "metadata": { "collapsed": false }, @@ -216,14 +214,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch: 550/550 | Cost 0.12 | TrainAcc 0.96" + "Iteration: 550/550 | Cost 0.12" ] }, { "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -232,7 +230,7 @@ ], "source": [ "mlp.epochs = 550\n", - "mlp.fit(X, y, init_weights=False)\n", + "mlp.fit(X, y, init_params=False)\n", "plt.plot(range(len(mlp.cost_)), mlp.cost_)\n", "plt.xlabel('Iterations')\n", "plt.ylabel('Cost')\n", @@ -241,7 +239,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "metadata": { "collapsed": false }, @@ -250,7 +248,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -274,7 +272,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "metadata": { "collapsed": false }, @@ -300,7 +298,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 7, "metadata": { "collapsed": false }, @@ -336,7 +334,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 8, "metadata": { "collapsed": false }, @@ -345,14 +343,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch: 100/100 | Cost 0.13 | TrainAcc 0.95" + "Iteration: 100/100 | Cost 0.13" ] }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYkAAAEKCAYAAADn+anLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAGlRJREFUeJzt3XuUXGWZ7/HvkxsJtyC3aAgBkUsichEhIMqyFYfEkWUc\nGRH0MKLieOYoojAI6B9k1ujgjGtUzpIzc9CMMzAqR0ABHcUbtAIjBLlFICERJIQAARTCNReS5/yx\nq+xK09WpJFW7end9P2u9q2rv2rX7qU3Tv7zvu2vvyEwkSRrKmG4XIEkauQwJSVJThoQkqSlDQpLU\nlCEhSWrKkJAkNTWu2wW0KiI8V1eStkBmxpa+t1I9icy0ZXL++ed3vYaR0jwWHguPxfBta1UqJCRJ\n5TIkJElNGRIV1NfX1+0SRgyPxQCPxQCPRftEO8asyhARWZVaJWmkiAiyVyauJUnlMiQkSU0ZEpKk\npgwJSVJThoQkqSlDQpLUlCEhSWrKkJAkNWVISJKaMiQkSU0ZEpKkpgwJSVJTHQ2JiJgfESsjYuEw\n2/zviFgaEXdGxKGdrEeStHk63ZP4JjC72YsR8Q7gNZm5H/Ax4F87XI8kaTN0NCQy80bgqWE2mQtc\nUtv2FmByREzpZE2SpNZ1e05iD2B5w/KK2jpJ0ggwrtsFbI558+b96XlfX593n5KkQfr7++nv72/b\n/jp+Z7qI2Av4QWYePMRr/wpcn5n/r7a8GHhLZq4cYlvvTCdJm6kKd6aLWhvKNcBfAUTEUcDTQwWE\nJKk7OjrcFBHfBvqAXSLiIeB8YAKQmXlxZv4oIv48In4HPA98qJP1SJI2T8eHm9rF4SZJ2nxVGG6S\nJFWUISFJaqpSIeFokySVq1IhsWZNtyuQpN5SqZB44YVuVyBJvaVSIfHii92uQJJ6S6VCwp6EJJWr\nUiFhT0KSylWpkLAnIUnlMiQkSU1VKiQcbpKkclUqJOxJSFK5KhUS9iQkqVyVCgl7EpJULkNCktRU\npULC4SZJKlelQsKehCSVq1IhYU9CkspVqZCwJyFJ5TIkJElNVSokHG6SpHJVKiTsSUhSuSoVEvYk\nJKlclQoJexKSVC5DQpLUVKVCwuEmSSpXpULCnoQklatSIWFPQpLKVamQsCchSeWqVEisXQvr13e7\nCknqHZUKiUmTYPXqblchSb2jciHhkJMkladSIbHttoaEJJWpciHhGU6SVJ5KhYTDTZJUro6HRETM\niYjFEbEkIs4Z4vUdI+KaiLgzIn4bEac225c9CUkqV0dDIiLGAF8DZgMHAidHxIxBm30cuCczDwXe\nCvxzRIwban/2JCSpXJ3uScwClmbmssxcB1wGzB20TQI71J7vAPwhM18aamdOXEtSuTodEnsAyxuW\nH66ta/Q14LUR8QhwF3BGs5053CRJ5RoJE9ezgTsycyrweuCiiNh+qA0dbpKkcg059t9GK4DpDcvT\nausafQi4ACAz74+I3wMzgN8M3tndd89j5Up46CHo6+ujr6+vM1VLUkX19/fT39/ftv1FZrZtZy/b\necRY4D7gWOBRYAFwcmYuatjmIuDxzPy7iJhCEQ6HZOYfB+0rzzormTIFzj67YyVL0qgSEWRmbOn7\nO9qTyMz1EfEJ4KcUQ1vzM3NRRHyseDkvBj4P/HtELKy97TODA6LOiWtJKlenh5vIzGuBAwat+78N\nzx+lmJfYpEmTYNWq9tYnSWpuJExct8yehCSVq3Ih4SmwklSeSoWEp8BKUrkqFRION0lSuSoVEpMm\nOdwkSWWqVEjYk5CkclUuJOxJSFJ5KhUSTlxLUrkqFRION0lSuSoVEk5cS1K5KhUS9iQkqVyVCwl7\nEpJUnkqFxPjxkAnr1nW7EknqDZUKCXDISZLKVLmQcPJakspTuZCwJyFJ5alkSNiTkKRyVC4k/Na1\nJJWnciHhcJMkladyIeHEtSSVp3IhYU9CkspTyZCwJyFJ5ahcSDhxLUnlqVxIONwkSeWpXEg4cS1J\n5alcSNiTkKTyVDIk7ElIUjkqFxJOXEtSeSoXEg43SVJ5KhcSTlxLUnkqFxL2JCSpPJUMCXsSklSO\nlkIiIi5tZV0ZnLiWpPK02pM4sHEhIsYCb2h/OZvmcJMklWfYkIiI8yLiWeDgiHim1p4FHgeuLqXC\nQZy4lqTyDBsSmXlBZu4AfCkzd6y1HTJzl8w8r6QaN2JPQpLK0+pw0w8jYjuAiPgfEfHliNirlTdG\nxJyIWBwRSyLinCbb9EXEHRFxd0RcP9z+DAlJKk+rIfEvwAsRcQhwFnA/cMmm3hQRY4CvAbMp5jVO\njogZg7aZDFwEHJ+ZrwPeO9w+HW6SpPK0GhIvZWYCc4GvZeZFwA4tvG8WsDQzl2XmOuCy2j4avR+4\nMjNXAGTmk8PtsB4SmS1WLknaYq2GxLMRcR5wCvBftR7C+BbetwewvGH54dq6RvsDO0fE9RFxa0Sc\n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\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -360,9 +358,9 @@ }, { "data": { - "image/png": "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\nNdjZAAAAAElFTkSuQmCC\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -428,7 +426,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 9, "metadata": { "collapsed": false, "scrolled": true @@ -438,14 +436,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch: 30/30 | Cost 0.02 | TrainAcc 1.00" + "Iteration: 30/30 | Cost 40.04" ] }, { "data": { - "image/png": "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\n", + "image/png": "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\nr2HZ6gAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -478,7 +476,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 10, "metadata": { "collapsed": false }, @@ -487,7 +485,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Training Accuracy: 100.00%\n" + "Training Accuracy: 99.76%\n" ] } ], @@ -499,7 +497,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 11, "metadata": { "collapsed": false }, @@ -508,7 +506,7 @@ "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP4AAAEKCAYAAAAy4ujqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAEc1JREFUeJzt3X+wXHV9xvH3E0LIJFbIpPkxBIJ1bMSxKLUDlUkLazEq\nVIURGhBmjEiNTlUcmU6Maeu9kU4HtAWxgzM0gIQKg9EKAUcsUNkBgqmxDW0oCag0kAi5gUggKQ2B\n5NM/9iTd3Nz73b337K97v89r5k72ns/Z8/1kk2fPOXvO2aOIwMzyMqHbDZhZ5zn4Zhly8M0y5OCb\nZcjBN8uQg2+WIQc/c5LOkLSlyXkXSXpolOOM+rnWeg5+j5H035L+qMPDjuRkjjInfjT9XEkfkrRB\n0suSHpb0thLj2iAO/hgj6Yhu99Bukt4CfBtYDBwD/AC4S5L/v7aIX8geIukWYC5wd7Gm+3NJJ0ja\nL+kTkp4G/mWozfP6LQXVLJX0C0nPS7pd0jFN9vDF4nkvS3pM0rmDZpkg6e8l7ZT0eP3WiaQ3SrpB\n0rOStki6QpJG8VK8H3goIn4SEfuBq4A5wBmjWJYNwcHvIRHxMeAZ4IMR8caI+Nu68unAidRCAenN\n5suADwN/CBwLvAh8s8k2fgHMj4g3AsuBb0uaVVf/feDnwHSgH/h+3ZvKSmAv8Gbgd4EFwJ8ONYik\nuyUtabKnCYCA32lyfmvAwe9Ng9eSAfRFxP9GxKtNPP9TwF9ExHMR8RrwFeD8ZjaVI+KfImKgePxd\naiE/tW6WgYj4RkTsi4hVwBPAH0uaCZwFfCEi9kTEC8DXgY8OM86HIuKrw7RxP3CGpNMlHQksA44E\npjTxd7cmTOx2A9a0rSOY9wTgDkn7i98FvAbMAp5LPVHSx4AvAG8qJk0FfrNull8NesrT1LYqTqAW\nzueKrXsVP8+MoG8AIuIJSYuA64DZ1Pb3H2dkr4ElOPi9Z7hN+Prp/0Pd2q/4wG9GXf0Z4BMR8ZOR\nDCxpLvAPwHsOPFfSeg7dApkz6GlzgdXAFmAPMD1acMlnRHwf+H7Rw9HUdhnWlV2u1XhTv/dso7aP\nXG/wpv+TwGRJZ0maCPwlMKmufj3wN0WQkTRD0oebGHsqsB94QdIESZdw+H71LEmfkzRR0p9Q+9zh\nhxGxDbgXuEbSbxQfML5Z0ulNjHsYSe8qephB7c3ozoh4cjTLssM5+L3nSuCvJP1a0uXFtEPWoBHx\nMvBnwI3UNn93cehm8LXU1sL3SnoJeIRD99OHFBEbgb8D1lJ7A3o78PCg2dYCvw28AFwBnBcRLxa1\nj1F7A3oc+DXwXWqb6oeR9ENJSxPtXAvsBDYCO6gd2rMWkb+Iwyw/XuObZcjBN8uQg2+WoVLBl/QB\nSZskPSnpi61qyszaa9Qf7hVngT0JnAk8S+0Y64URsWnQfP700KxLImLIayXKrPFPBX4eEU8Xp4Xe\nDpwzzOAHf/r6+g75vdd+3N/47a+Xe2tHfyllgj+H2tlaB2zl8LO6zKwH+cM9swyVOVf/V9TO0z7g\nOA6/gAOA/v7+g4+POaapy8K7plKpdLuFJPc3er3cG5Tvr1qtUq1Wm5q3zId7R1C7JPNMald8/RT4\naNRO+6yfL0Y7hpmNniRimA/3Rr3Gj4h9kj5L7cKMCcCNg0NvZr2p7efqe41v1h2pNb4/3DPLkINv\nliEH3yxDDr5Zhhx8sww5+GYZcvDNMuTgm2XIwTfLkINvliEH3yxDDr5Zhhx8sww5+GYZcvDNMuTg\nm2XIwTfLkINvliEH3yxDDr5Zhhx8sww5+GYZcvDNMuTgm2XIwTfLkINvliEH3yxDDr5Zhhx8sww5\n+GYZcvDNMjSxzJMlbQZeAvYDr0XEqa1oyszaq1TwqQW+EhEvtqIZM+uMspv6asEyzKzDyoY2gPsk\nrZP0yVY0ZGbtV3ZTf35EPCdpBrU3gI0R8fDgmfr7+w8+rlQqVCqVksOa2WDVapVqtdrUvIqIlgwq\nqQ/YFRFXD5oerRrDzJoniYjQULVRb+pLmiLpDcXjqcD7gMdGuzwz65wym/qzgDskRbGcWyPi3ta0\nZWbt1LJN/WEHyHxT//XXX0/Wd+7cmaxv3LgxWX/ggQdG3FMrXX/99cn6s88+m6zPnTs3Wb/00kuT\n9cWLFyfr06ZNS9aPOuqoZH0sa8umvpmNXQ6+WYYcfLMMOfhmGXLwzTLk4JtlyME3y5CP45e0Y8eO\nZH3RokXJ+j333NPKdmyQ+fPnJ+uXXXZZsn7++ee3sp2O8nF8MzuEg2+WIQffLEMOvlmGHHyzDDn4\nZhly8M0yVPY798a9RucgXHHFFcl62eP0Eyem/4kWLlyYrJ900kmlxu+2DRs2JOurVq1K1tesWVNq\n+VOmTEnWzzrrrGRdGvIwetd5jW+WIQffLEMOvlmGHHyzDDn4Zhly8M0y5OCbZcjX4zdw1VVXJevL\nli0rtfx58+Yl6z/72c+S9alTp5Yaf6zbu3dvsr5ixYpkfcmSJcn6nj17kvVG//59fX3JeqPzNMrw\n9fhmdggH3yxDDr5Zhhx8sww5+GYZcvDNMuTgm2Wo4XF8STcCHwQGIuIdxbRpwHeAE4DNwMKIeGmY\n5/f0cfxXX301WV+wYEGy3uh670bH6devX5+sT548OVm3tFdeeSVZb/R9BZs3by41/vbt25P16dOn\nl1p+Stnj+N8C3j9o2lLg/oh4K/Bj4EvlWjSzTmoY/Ih4GHhx0ORzgJXF45XAuS3uy8zaaLT7+DMj\nYgAgIrYBM1vXkpm1W6tOFE7uxPf39x98XKlUqFQqLRrWzA6oVqtUq9Wm5h1t8AckzYqIAUmzgeQn\nGPXBN7P2GLxSXb58+bDzNrupr+LngLuAjxePFwGrR9KgmXVXw+BLug14BJgn6RlJlwBXAgskPQGc\nWfxuZmNEw039iLhomNJ7W9xLV+zatStZb3ScvpEvf/nLybqP05fT6ByRpUuXJutlj9OPVT5zzyxD\nDr5Zhhx8sww5+GYZcvDNMuTgm2XIwTfLUPu+1NsAOProo7vdwrh22223JevXXXddqeUfddRRyfpF\nFw13mktNr973wGt8sww5+GYZcvDNMuTgm2XIwTfLkINvliEH3yxDPo5vY9qnP/3pti7/3HPTXyB9\nww03tHX8dvEa3yxDDr5Zhhx8sww5+GYZcvDNMuTgm2XIwTfLUPbH8adMmZKsn3jiicn6pk2bWtlO\ndnbs2JGsN7r92iuvvFJq/DPOOCNZv/nmm0stv1d5jW+WIQffLEMOvlmGHHyzDDn4Zhly8M0y5OCb\nZajhcXxJNwIfBAYi4h3FtD7gk8D2YrZlEfGjtnXZRo2O47/zne9M1hsdx1+9enWyfvbZZyfrY92d\nd96ZrC9ZsiRZ/+Uvf1lq/Eb3NbjmmmuS9UmTJpUav1c1s8b/FvD+IaZfHRHvKn7GZOjNctUw+BHx\nMPDiECW1vh0z64Qy+/iflfSopBsk+T5RZmPIaM/V/ybwlYgISX8NXA1cOtzM9edbVyoVKpXKKIc1\ns+FUq1Wq1WpT844q+BHxfN2vK4C7U/M3utDCzMobvFJdvnz5sPM2u6kv6vbpJc2uq30EeGxEHZpZ\nVzVzOO82oAJMl/QM0Ae8R9LJwH5gM/CpNvZoZi3WMPgRMdQNwL/Vhl7GpUb3bz/ttNOS9YsvvjhZ\nP/LII0fcU719+/Yl6w899FCy3uh69UZ//0bjl7Vy5cpkvdF5GuOVz9wzy5CDb5YhB98sQw6+WYYc\nfLMMOfhmGXLwzTKkiGjvAFK0e4x22rZtW7L+7ne/O1nfsmVLqfEbXU8+YUK59+5G/zY7d+4stfx2\nmzdvXrL+4IMPJuszZsxoZTs9RRIRMeRVtF7jm2XIwTfLkINvliEH3yxDDr5Zhhx8sww5+GYZ8nH8\nkrZv356sn3LKKcn61q1bW9nOuDNnzpxk/amnnkrWJ04c7ddKjn0+jm9mh3DwzTLk4JtlyME3y5CD\nb5YhB98sQw6+WYbyPcjZIjNnzkzWN2zYkKzv2rUrWb/pppuS9d27dyfrjUyePDlZX7x4cbJ+3nnn\nJevr1q0bcU/1rrzyymQ95+P0ZXiNb5YhB98sQw6+WYYcfLMMOfhmGXLwzTLk4JtlqOH1+JKOA24B\nZgH7gRUR8Q1J04DvACcAm4GFEfHSEM8f19fjj3cvv/xysn7SSScl642+b+CCCy5I1m+99dZkXRry\ncnOj/PX4rwOXR8TbgdOAz0g6EVgK3B8RbwV+DHypVQ2bWXs1DH5EbIuIR4vHu4GNwHHAOcDKYraV\nwLntatLMWmtE+/iS3gScDKwFZkXEANTeHID0uatm1jOaPtFZ0huA7wGfj4jdkgbvuA+7I9/f33/w\ncaVSoVKpjKxLM2uoWq1SrVabmrepL9uUNBH4AXBPRFxbTNsIVCJiQNJs4IGIeNsQz/WHe2OYP9wb\nu1rxZZs3AY8fCH3hLuDjxeNFwOpRd2hmHdVwU1/SfOBiYIOk9dQ26ZcBVwGrJH0CeBpY2M5Gzax1\nGgY/ItYARwxTfm9r27FO27dvX7L+ta99LVlvtCk/adKkZL2vry9Z96Z8e/jMPbMMOfhmGXLwzTLk\n4JtlyME3y5CDb5YhB98sQ02dsltqAJ+y29P27NmTrE+dOrXU8ht97/6qVatKLd+G14pTds1sHHHw\nzTLk4JtlyME3y5CDb5YhB98sQw6+WYZ8c/Fxbu/evcn6JZdc0tbxFyxY0Nbl2+h4jW+WIQffLEMO\nvlmGHHyzDDn4Zhly8M0y5OCbZcjX449za9asSdZPP/30Uss//vjjk/W1a9cm67Nnzy41vg3P1+Ob\n2SEcfLMMOfhmGXLwzTLk4JtlyME3y1DD4Es6TtKPJf2XpA2SPldM75O0VdK/Fz8faH+7ZtYKzVyP\n/zpweUQ8KukNwL9Juq+oXR0RV7evPeu2OXPmJOuPPPJIsu7j9L2pYfAjYhuwrXi8W9JG4MD/hiFP\nDjCz3jaifXxJbwJOBv61mPRZSY9KukHS0S3uzczapOngF5v53wM+HxG7gW8Cb46Ik6ltEXiT32yM\naOo79yRNpBb6f4yI1QAR8XzdLCuAu4d7fn9//8HHlUqFSqUyilbNLKVarVKtVpuat6mLdCTdArwQ\nEZfXTZtd7P8j6QvAKRFx0RDP9UU6XVT2Ip1GH+41ugjn2GOPTdatfVIX6TRc40uaD1wMbJC0Hghg\nGXCRpJOB/cBm4FMt69jM2qqZT/XXAEcMUfpR69sxs07w9fhm45SvxzezQzj4Zhly8M0y5OCbZcjB\nN8uQg2+WIQffLEMOvlmGHHyzDDn4Zhly8M0y1PHgN3u9cLe4v3J6ub9e7g0625+DP4j7K6eX++vl\n3mCcB9/Mus/BN8tQR67Hb+sAZjas4a7Hb3vwzaz3eFPfLEMOvlmGOhZ8SR+QtEnSk5K+2KlxmyVp\ns6T/kLRe0k97oJ8bJQ1I+s+6adMk3SvpCUn/3M27Fw3TX8/cSHWIm71eVkzvidew2zej7cg+vqQJ\nwJPAmcCzwDrgwojY1PbBmyTpKeD3IuLFbvcCIOkPgN3ALRHxjmLaVcCOiPhq8eY5LSKW9lB/fcCu\nXriRqqTZwOz6m70C5wCX0AOvYaK/C+jAa9ipNf6pwM8j4umIeA24ndpfspeIHtr1iYiHgcFvQucA\nK4vHK4FzO9pUnWH6gx65kWpEbIuIR4vHu4GNwHH0yGs4TH8duxltp/6jzwG21P2+lf//S/aKAO6T\ntE7SJ7vdzDBmRsQAHLyL8cwu9zOUnruRat3NXtcCs3rtNezGzWh7Zg3XA+ZHxLuAs4HPFJuyva7X\njsX23I1Uh7jZ6+DXrKuvYbduRtup4P8KmFv3+3HFtJ4REc8Vfz4P3EFt96TXDEiaBQf3Ebd3uZ9D\nRMTzdXdPWQGc0s1+hrrZKz30Gg53M9pOvIadCv464C2STpA0CbgQuKtDYzckaUrxzoukqcD7gMe6\n2xVQ29er39+7C/h48XgRsHrwEzrskP6KIB3wEbr/Gt4EPB4R19ZN66XX8LD+OvUaduzMveKwxLXU\n3mxujIgrOzJwEyT9FrW1fFC7n+Ct3e5P0m1ABZgODAB9wJ3Ad4HjgaeBhRGxs4f6ew+1fdWDN1I9\nsD/dhf7mAw8CG6j9ux642etPgVV0+TVM9HcRHXgNfcquWYb84Z5Zhhx8sww5+GYZcvDNMuTgm2XI\nwTfLkINvliEH3yxD/wcwYPjsH/jWwQAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -526,7 +524,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 12, "metadata": { "collapsed": false }, @@ -543,173 +541,6 @@ "print('Prediction: %d' % mlp.predict(X[4999, None]))" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Example 4 -- Training and Validation Accuracies During Training" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Training accuracies are collected for each epoch by default. Optionally, we can pass validation dataset during model fitting to compute the validation accuracy values for each epoch. Here, pass 4000 samples from MNIST for training and 1000 samples from MNIST for validation." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Epoch: 30/30 | Cost 0.00 | TrainAcc 1.00 | ValidAcc 0.86" - ] - } - ], - "source": [ - "from mlxtend.data import mnist_data\n", - "from mlxtend.preprocessing import shuffle_arrays_unison\n", - "from mlxtend.tf_classifier import TfMultiLayerPerceptron\n", - "import matplotlib.pyplot as plt\n", - "\n", - "X, y = mnist_data()\n", - "X, y = shuffle_arrays_unison((X, y), random_seed=1)\n", - "\n", - "mlp = TfMultiLayerPerceptron(eta=0.01, \n", - " epochs=30, \n", - " hidden_layers=[200, 200],\n", - " activations=['relu', 'relu'],\n", - " print_progress=1, \n", - " minibatches=5, \n", - " optimizer='adam',\n", - " random_seed=1)\n", - "\n", - "mlp.fit(X=X[:4000], \n", - " y=y[:4000],\n", - " X_valid=X[4000:],\n", - " y_valid=y[4000:])" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(range(1, mlp.epochs + 1), mlp.train_acc_, label='training')\n", - "plt.plot(range(1, mlp.epochs + 1), mlp.valid_acc_, label='validation')\n", - "plt.xlabel('Epoch')\n", - "plt.ylabel('Accuracy')\n", - "plt.legend(loc='lower right')\n", - "plt.grid()\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Example 5 -- Dropout" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The 3 most common techniques for preventing overfitting are *Early Termination* and *Regularization*.\n", - "\n", - "In early termination, we stop training the network when we noticed an increasing gap between the training and validation performance. Another method is to apply regularization to reduce the number of parameters in our network and thereby reduce its complexity via this induced bias. Popular examples of regularization are L2 & L1 regularization, which are essentially \"penalties\" against large weights that are added to the cost function. For more details, please see the documentation page at [`general_concepts/regularization-linear`](../general_concepts/regularization-linear.md). (The multi-layer perceptron implementation supports L1 and L2 regularization via the `l1` and `l2` initialization parameters.)\n", - "\n", - "Another regularization technique, next to L1 and L2 regularization, is dropout. In dropout, we simply \"cancel\" half of the \"neural\" connections between layers during training -- randomly. As a consequence, our neural network can never rely on any given activation to be present. Therefore, the network will attempt to learn a redundant representation just to make sure that at least some useful information remains during in epoch. As weird as it sounds, in practice, dropout makes our network more robust and helps reducing the degree of overfitting. However, keep in mind that dropout is only applied during training; during testing, evaluation, and predictions on new data, we want something that's deterministic." - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Epoch: 75/75 | Cost 639.21 | TrainAcc 1.00 | ValidAcc 0.90" - ] - } - ], - "source": [ - "from mlxtend.data import mnist_data\n", - "from mlxtend.preprocessing import shuffle_arrays_unison\n", - "from mlxtend.tf_classifier import TfMultiLayerPerceptron\n", - "import matplotlib.pyplot as plt\n", - "\n", - "X, y = mnist_data()\n", - "X, y = shuffle_arrays_unison((X, y), random_seed=1)\n", - "\n", - "mlp = TfMultiLayerPerceptron(eta=0.01, \n", - " epochs=75, \n", - " hidden_layers=[200, 200],\n", - " activations=['relu', 'relu'],\n", - " print_progress=1, \n", - " minibatches=5, \n", - " optimizer='adam',\n", - " random_seed=1,\n", - " dropout=0.55)\n", - "\n", - "mlp.fit(X=X[:4000], \n", - " y=y[:4000],\n", - " X_valid=X[4000:],\n", - " y_valid=y[4000:])" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n/ziZhwAlv7YOAAAAAElFTkSuQmCC\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(range(1, mlp.epochs + 1), mlp.train_acc_, label='training')\n", - "plt.plot(range(1, mlp.epochs + 1), mlp.valid_acc_, label='validation')\n", - "plt.xlabel('Epoch')\n", - "plt.ylabel('Accuracy')\n", - "plt.legend(loc='lower right')\n", - "plt.grid()\n", - "plt.show()" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -719,7 +550,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 13, "metadata": { "collapsed": false }, @@ -730,7 +561,7 @@ "text": [ "## TfMultiLayerPerceptron\n", "\n", - "*TfMultiLayerPerceptron(eta=0.5, epochs=50, hidden_layers=[50, 10], activations=['logistic', 'logistic'], optimizer='gradientdescent', momentum=0.0, l1=0.0, l2=0.0, dropout=1.0, decay=[0.0, 1], minibatches=1, random_seed=None, print_progress=0, dtype=None)*\n", + "*TfMultiLayerPerceptron(eta=0.5, epochs=50, hidden_layers=[50, 10], n_classes=None, activations=['logistic', 'logistic'], optimizer='gradientdescent', momentum=0.0, l1=0.0, l2=0.0, dropout=1.0, decay=[0.0, 1.0], minibatches=1, random_seed=None, print_progress=0, dtype=None)*\n", "\n", "Multi-layer perceptron classifier.\n", "\n", @@ -743,12 +574,20 @@ "- `epochs` : int (default: 50)\n", "\n", " Passes over the training dataset.\n", + " Prior to each epoch, the dataset is shuffled\n", + " if `minibatches > 1` to prevent cycles in stochastic gradient descent.\n", "\n", "- `hidden_layers` : list (default: [50, 10])\n", "\n", " Number of units per hidden layer. By default 50 units in the\n", " first hidden layer, and 10 hidden units in the second hidden layer.\n", "\n", + "- `n_classes` : int (default: None)\n", + "\n", + " A positive integer to declare the number of class labels\n", + " if not all class labels are present in a partial training set.\n", + " Gets the number of class labels automatically if None.\n", + "\n", "- `activations` : list (default: ['logistic', 'logistic'])\n", "\n", " Activation functions for each layer.\n", @@ -809,11 +648,11 @@ "\n", "**Attributes**\n", "\n", - "- `weights_` : 2d-array, shape=[n_features, n_classes]\n", + "- `w_` : 2d-array, shape=[n_features, n_classes]\n", "\n", " Weights after fitting.\n", "\n", - "- `biases_` : 1D-array, shape=[n_classes]\n", + "- `b_` : 1D-array, shape=[n_classes]\n", "\n", " Bias units after fitting.\n", "\n", @@ -825,9 +664,9 @@ "\n", "
\n", "\n", - "*fit(X, y, init_weights=True, override_minibatches=None, n_classes=None, X_valid=None, y_valid=None)*\n", + "*fit(X, y, init_params=True)*\n", "\n", - "Learn weight coefficients from training data.\n", + "Learn model from training data.\n", "\n", "**Parameters**\n", "\n", @@ -840,29 +679,11 @@ "\n", " Target values.\n", "\n", - "- `init_weights` : bool (default: True)\n", - "\n", - " (Re)initializes weights to small random floats if True.\n", - "\n", - "- `override_minibatches` : int or None (default: None)\n", - "\n", - " Uses a different number of minibatches for this session.\n", - "\n", - "- `n_classes` : int (default: None)\n", - "\n", - " A positive integer to declare the number of class labels\n", - " if not all class labels are present in a partial training set.\n", - " Gets the number of class labels automatically if None.\n", - " Ignored if init_weights=False.\n", + "- `init_params` : bool (default: True)\n", "\n", - "- `X_valid` : {array-like, sparse matrix}, shape = [n_samples, n_features]\n", - "\n", - " Optional validation set to store the validation accuracy values\n", - " for each epoch via self.valid_acc_\n", - "\n", - "- `y_valid` : array-like, shape = [n_samples]\n", - "\n", - " Target values for X_valid\n", + " Re-initializes model parametersprior to fitting.\n", + " Set False to continue training with weights from\n", + " a previous model fitting.\n", "\n", "**Returns**\n", "\n", @@ -938,15 +759,6 @@ "with open('../../api_modules/mlxtend.tf_classifier/TfMultiLayerPerceptron.md', 'r') as f:\n", " print(f.read())" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/docs/sources/user_guide/tf_classifier/TfMultiLayerPerceptron_files/TfMultiLayerPerceptron_15_0.png b/docs/sources/user_guide/tf_classifier/TfMultiLayerPerceptron_files/TfMultiLayerPerceptron_15_0.png new file mode 100644 index 000000000..d4055e811 Binary files /dev/null and b/docs/sources/user_guide/tf_classifier/TfMultiLayerPerceptron_files/TfMultiLayerPerceptron_15_0.png differ diff --git a/docs/sources/user_guide/tf_classifier/TfMultiLayerPerceptron_files/TfMultiLayerPerceptron_17_0.png b/docs/sources/user_guide/tf_classifier/TfMultiLayerPerceptron_files/TfMultiLayerPerceptron_17_0.png index c8943bbfe..8bf80563a 100644 Binary files a/docs/sources/user_guide/tf_classifier/TfMultiLayerPerceptron_files/TfMultiLayerPerceptron_17_0.png and b/docs/sources/user_guide/tf_classifier/TfMultiLayerPerceptron_files/TfMultiLayerPerceptron_17_0.png differ diff --git a/docs/sources/user_guide/tf_classifier/TfMultiLayerPerceptron_files/TfMultiLayerPerceptron_25_0.png b/docs/sources/user_guide/tf_classifier/TfMultiLayerPerceptron_files/TfMultiLayerPerceptron_25_0.png new file mode 100644 index 000000000..9ebfa83cd Binary files /dev/null and b/docs/sources/user_guide/tf_classifier/TfMultiLayerPerceptron_files/TfMultiLayerPerceptron_25_0.png differ diff --git a/docs/sources/user_guide/tf_classifier/TfMultiLayerPerceptron_files/TfMultiLayerPerceptron_25_1.png b/docs/sources/user_guide/tf_classifier/TfMultiLayerPerceptron_files/TfMultiLayerPerceptron_25_1.png index 91020ffa8..362e8cf84 100644 Binary files a/docs/sources/user_guide/tf_classifier/TfMultiLayerPerceptron_files/TfMultiLayerPerceptron_25_1.png and b/docs/sources/user_guide/tf_classifier/TfMultiLayerPerceptron_files/TfMultiLayerPerceptron_25_1.png differ diff --git a/docs/sources/user_guide/tf_classifier/TfMultiLayerPerceptron_files/TfMultiLayerPerceptron_29_0.png b/docs/sources/user_guide/tf_classifier/TfMultiLayerPerceptron_files/TfMultiLayerPerceptron_29_0.png index cbdabf3f6..cc363d927 100644 Binary files a/docs/sources/user_guide/tf_classifier/TfMultiLayerPerceptron_files/TfMultiLayerPerceptron_29_0.png and b/docs/sources/user_guide/tf_classifier/TfMultiLayerPerceptron_files/TfMultiLayerPerceptron_29_0.png differ diff --git a/docs/sources/user_guide/tf_classifier/TfSoftmaxRegression.ipynb b/docs/sources/user_guide/tf_classifier/TfSoftmaxRegression.ipynb index ebb3221e2..4f157e581 100644 --- a/docs/sources/user_guide/tf_classifier/TfSoftmaxRegression.ipynb +++ b/docs/sources/user_guide/tf_classifier/TfSoftmaxRegression.ipynb @@ -25,15 +25,15 @@ "output_type": "stream", "text": [ "Sebastian Raschka \n", - "last updated: 2016-03-27 \n", + "last updated: 2016-05-01 \n", "\n", "CPython 3.5.1\n", "IPython 4.0.3\n", "\n", "matplotlib 1.5.1\n", - "numpy 1.10.4\n", + "numpy 1.11.0\n", "scipy 0.17.0\n", - "mlxtend 0.3.1.dev0\n" + "mlxtend 0.4.1.dev0\n" ] } ], @@ -44,7 +44,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": { "collapsed": false }, @@ -118,7 +118,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": { "collapsed": false }, @@ -127,14 +127,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch: 20/20 | Cost 0.37 | TrainAcc 0.93" + "Iteration: 20/20 | Cost 0.37" ] }, { "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -178,7 +178,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "metadata": { "collapsed": false }, @@ -187,14 +187,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch: 500/500 | Cost 0.13 | TrainAcc 0.97" + "Iteration: 500/500 | Cost 0.13" ] }, { "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -203,7 +203,7 @@ ], "source": [ "lr.epochs = 500\n", - "lr.fit(X, y, init_weights=False)\n", + "lr.fit(X, y, init_params=False)\n", "plt.plot(range(len(lr.cost_)), lr.cost_)\n", "plt.xlabel('Iterations')\n", "plt.ylabel('Cost')\n", @@ -212,7 +212,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": { "collapsed": false }, @@ -221,7 +221,7 @@ "data": { "image/png": "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\nAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -245,7 +245,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "metadata": { "collapsed": false }, @@ -271,7 +271,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 8, "metadata": { "collapsed": false }, @@ -281,9 +281,9 @@ "output_type": "stream", "text": [ "Predicted class probabilities:\n", - " [[ 9.92753923e-01 7.24608125e-03 6.90939350e-09]\n", - " [ 5.35254460e-03 9.61461246e-01 3.31862010e-02]\n", - " [ 1.28487800e-05 2.01715842e-01 7.98271239e-01]]\n" + " [[ 9.92753923e-01 7.24608498e-03 6.90939350e-09]\n", + " [ 5.35254739e-03 9.61461246e-01 3.31862085e-02]\n", + " [ 1.28487918e-05 2.01715842e-01 7.98271239e-01]]\n" ] } ], @@ -307,7 +307,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 9, "metadata": { "collapsed": false }, @@ -316,14 +316,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch: 10/10 | Cost 0.15 | TrainAcc 0.96" + "Iteration: 10/10 | Cost 0.15" ] }, { "data": { - "image/png": "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\n", + "image/png": "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\nfXvrtm1L/sI77DAYMGDfx6GHJv+4O3NA790723uHb98OTz+9b+IofGze3HES6cxdDuvNli17E0Db\nRLBpU/IbFUsEI0YkZ84dyU2S6A5OErY/Xnop6dy+/vqkg/vTn04OsFu2dO1gLyVlmMKDfLEDf9v1\n/fs31kGx0ZNIBDz33KsTQOvzjh3FzwRGjYIhQ/b/LMxJwqyT1qyBGTNgzpxkbEX//qUP8O0d9Pv0\nyfqb1IeuJpFDD00SdetZVLHnamxrb5+tW1+dCFatSv7ib5sAWp9f+9rqngk6SZh10V/+kpRrfI/t\nfCuWRJ56Kvnv13o4KPbc1W37075v31cngpEjk4SWFScJMzMrKTdzN5mZWe1ykjAzs5KcJMzMrCQn\nCTMzK8lJwszMSnKSMDOzkpwkzMysJCcJMzMryUnCzMxKcpIwM7OSnCTMzKwkJwkzMyvJScLMzEpy\nkjAzs5KcJMzMrCQnCTMzK8lJwszMSnKSMDOzkpwkzMysJCcJMzMryUnCzMxKcpIwM7OSnCTMzKwk\nJwkzMyvJScLMzEqqepKQNEXSckkrJc0osn20pPsl7ZD0yc60NTOz6qpqkpDUA/gGcDZwDHC+pKPb\n7PZn4DLg2i60za2WlpasQ3gVx1SePMYE+YzLMZUnjzGVq9pnEuOBxyNiTUTsBGYB5xbuEBGbImIh\n8Epn2+ZZHv+ncEzlyWNMkM+4HFN58hhTuaqdJAYDawuW16Xrqt3WzMwqwB3XZmZWkiKiem8uTQRm\nRsSUdPlKICLiS0X2vRrYGhFf7ULb6n0JM7M6FRHqaJ+mKsewABglaTiwAZgOnN/O/oUBl922nC9q\nZmadV9UkERG7JF0KzCUpbX0nIpZJuiTZHDdIGgg8DPQHdku6HBgbES8Wa1vNeM3MbF9VLTeZmVlt\nq+mO6zwOtpP0HUnPSnok61haSRoi6V5JSyX9UdLHchDTgZIekrQojenqrGNqJamHpD9Iui3rWAAk\nrZa0JP2t5mcdD4CkQyT9TNKy9P+rCTmI6Q3pb/SH9HlLTv5f/4SkRyU9IulHknrlIKbL0393HR4P\navZMIh1stxI4HXiGpA9jekQszziuycCLwA8jYlyWsbSSNAgYFBGLJR0ELATOzcFv1TcitknqCfwe\n+FhEZH4QlPQJ4ATg4Ig4JwfxPAmcEBGbs46llaTvA/dFxPckNQF9I+IvGYe1R3p8WAdMiIi1He1f\nxTheB8wDjo6Iv0r6KXBHRPwww5iOAX4CnEQyPu0u4CMR8WSx/Wv5TCKXg+0iYh6Qm3/MABGxMSIW\np69fBJaRgzEnEbEtfXkgSf9Y5n+xSBoCvBW4MetYCogc/VuVdDDwloj4HkBEvJKnBJE6A1iVZYIo\n0BPo15pMSf6ozdIY4KGIeDkidgG/BaaW2jk3/+N1gQfbdYGkEcBxwEPZRrKnrLMI2AjcExELso4J\n+H/Ap8hBwioQwD2SFki6OOtggKOATZK+l5Z2bpDUJ+ug2ngvyV/LmYqIZ4D/BJ4G1gMvRMT/ZhsV\njwJvkXSYpL4kfxQNLbVzLScJ66S01HQLcHl6RpGpiNgdEW8GhgATJI3NMh5JbwOeTc+6xL6XZGdp\nUkQcT/KP+aNpSTNLTcDxwDfTuLYBV2Yb0l6SDgDOAX6Wg1gOJalwDAdeBxwk6X1ZxpSWmb8E3APc\nCSwCdpXav5aTxHpgWMHykHSdFZGe6t4C3BQRt2YdT6G0VPEbYErGoUwCzkn7AH4CnCYps9pxq4jY\nkD7/CZhNUmrN0jpgbUQ8nC7fQpI08uJvgYXp75W1M4AnI+L5tLTzC+CUjGMiIr4XESdGRDPwAkn/\nblG1nCT2DLZLrxaYDuTiahTy9Vdoq+8Cj0XEdVkHAiDpcEmHpK/7AGcCmXakR8RnImJYRPwNyf9P\n90bE32UZk6S+6RkgkvoBZ5GUCzITEc8CayW9IV11OvBYhiG1dT45KDWlngYmSuotSSS/VebjvSQd\nkT4PA94J/LjUvtUecV01pQbqZRwWkn4MNAOvkfQ0cHVrB1+GMU0C3g/8Me0DCOAzEXF3hmEdCfwg\nvQqlB/DTiLgzw3jyaiAwO516pgn4UUTMzTgmgI8BP0pLO08CF2YcD5AkVZK/3j+cdSwAETFf0i0k\nJZ2d6fMN2UYFwM8lDSCJ6R/bu/CgZi+BNTOz6qvlcpOZmVWZk4SZmZXkJGFmZiU5SZiZWUlOEmZm\nVpKThJmZleQkYQ1P0tb0ebik9u6c2JX3vqrN8rxKvr9ZtTlJmO2dzO8ooFPz6qTTnLfnM/t8UETW\n8y6ZdYqThNle1wCT05lNL09nqf1yenOkxa0zsEo6VdJvJd0KLE3XzU5naf2jpA+l664B+qTvd1O6\nbmvrh0m6Nt1/iaRpBe/9m4Ib+txUsP8X05vXLJb05W77Vayh1ey0HGZVcCVwReuNhtKk8EJETEjn\nB/u9pNYpMd4MHBMRT6fLF0bEC5J6Awsk/TwirpL00XSm1FaRvve7gHERcayk16Zt7kv3OQ4YSzKF\n+u8lnUIyr9V5EXF02v7gav0IZoV8JmFW2lnA36XzXT0EDABen26bX5AgAD4uaTHwIMmMxK+nfZNI\nJ6GLiOeAFpI7hbW+94ZI5sxZDIwAtgDbJd0o6Z3A9v38bmZlcZIwK03AZRHx5vQxsuCGMS/t2Uk6\nFfi/JLfKPI7kwN674D3K/axWLxe83gU0pdNMjyeZlvvtQJaTM1oDcZIw23uA3gr0L1j/K+Af03tx\nIOn16SyjbR0CbI6IlyUdDUws2PbX1vZtPut3wHvTfo8jgLcAJe/vnX7uoenMvZ8EcnH/dKt/7pMw\n23t10yPA7rS89P2IuC693esf0nsBPAecV6T93cBHJC0FVgAPFGy7AXhE0sKIuKD1syJitqSJwBJg\nN/CpiHhO0pgSsR0M3Jr2eQB8outf16x8nirczMxKcrnJzMxKcpIwM7OSnCTMzKwkJwkzMyvJScLM\nzEpykjAzs5KcJMzMrCQnCTMzK+n/A4XkuEpnWc3eAAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -331,9 +331,9 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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\ngg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -388,7 +388,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "metadata": { "collapsed": false }, @@ -397,14 +397,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch: 100/100 | Cost 4.76 | TrainAcc 0.98" + "Iteration: 100/100 | Cost 6.26" ] }, { "data": { - "image/png": "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\nOUzMzCy3qgwTN3OZmRWrKsPENRMzs2I5TMzMLLeqDBM3c5mZFasqw8Q1EzOzYjlMzMwst6oMEzdz\nmZkVqyrDxDUTM7NiOUzMzCy3qgwTN3OZmRWrKsPENRMzs2I5TMzMLLeqDBM3c5mZFasqw8Q1EzOz\nYjlMzMwst6oMEzdzmZkVqyrDxDUTM7NiOUzMzCy3qgwTN3OZmRWrKsPENRMzs2K1KEwk3dWSaW2F\nw8TMrFgtrZnsUfpB0kbAfq1fnNaxciWsWFHpUpiZtR/NhomkIZKWAHtJejd7LQEWAg8UUsL10KmT\naydmZkVSRKx9JumaiBhSQHlykxRbbRXMnQudO1e6NGZmGwZJRITWd/mWNnP9QdLm2Qa/Kul6STus\n70az9XSWdK+klyVNlfRZSV0kPSppuqRHJHUumX+IpJnZ/Ec2t27XTMzMitXSMPk58IGkvYFvAa8C\nd+bc9k3AQxHRH9gbeAUYDIyNiF2BccAQAEm7A6cA/YFjgJGSmkzQTp3cPdjMrEgtDZPlkdrDjgd+\nGhE/A7Zc341K2goYGBF3AETE8ohYnK1/VDbbKOCE7P0gYEw232xgJnBAU+vfZBPXTMzMitTSMFki\naQhwJvBHSR2AjXNsty/wpqQ7JE2UdIukTwDdI6IOICIWAN2y+XsC80qWn59Na5SbuczMitWxhfOd\nCnwFOC8iFkjaHrgu53YHABdHxHOSbiA1cTXsDbD23gGNWLRoODfeCD16QE1NDTU1NTmKamZWfWpr\na6mtrW219bWoNxeApO7A/tnHCRGxcL03mtb1VETsmH0+lBQmOwE1EVEnqQcwPiL6SxoMRESMyOZ/\nGBgWEc80su74zGeCkSNh//0bfmtmZo0ppDeXpFOACcCXSRfCn5F08vpuNGvKmidpl2zS4cBU4EHg\nnGza2ay6l+VB4DRJnST1BXbOytMoN3OZmRWrpc1c3wH2r6+NSNoWGAvcl2PblwKjJW0MzALOBTYC\n7pF0HjCHFFxExDRJ9wDTgGXARdFMlcq9uczMitXSMOnQoFnrLXIOEhkRL7Kq2azUEU3Mfw1wTUvW\n7ZqJmVmxWhomD0t6BPhN9vlU4KHyFCk/dw02MytWs2EiaWdSd92rJJ0EHJp99RQwutyFW19u5jIz\nK9baaiY3kt2FHhH/C/wvgKQ9s++OK2vp1pObuczMirW26x7dI2JKw4nZtD5lKVErcDOXmVmx1hYm\n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\np3ttJk1afVsDBqRrOZ/7XPocseb/MM8+C2eckda3bBn87ncp8NZFBPzLv6R9+cMf4IgjWrbc2LHp\nutV118E3v7lu22xNEyemQD/33MqVwdbPihVrXqdcF5ddBjffnH4Ifv7zrVeulvI1kw38mkklvftu\nuv7SvXvEt78dMXNmy5edNy/i9NMjeveO+PnPI265JeL734848MCIESPWnP9734v45jcj6urS+099\nKqJv34gLL4wYMyYt261bxD33pGstI0emz3/6U/pcVxfxl79EPPZYxLJlTZfrxhsj9twz4qGH0jWi\nxx5b+75MmZKOw623pmtJr73W8uPQmpYujdh994gtt4yora1MGYr29tsRw4ZFLF9e6ZLk8847Eb16\nrf+/21tvRXTpEjF8eMRxx7Vu2VqKnNdMKn7yb+2Xw2TdzJ+fTmLr669/jfjylyPOOy9i6NCIn/wk\nYsmSNeebPDliiy0itt464oIL0ucpU9LJ/7jjIgYNipg7d/VlHn88Yrvt0jLbbBNx8MER++2XgujK\nK9Py9Rf5I1KA9OixqsPC+PEpUGpr08lq9uyIceMiJk6MWLEizfOPf0TssEPE3Xenz1dfHXHUUauv\nN6+nn4447bSIM89MAd6Uq6+O+MIX0n707h3x5putV4Y8/v73iFdfXbdl6urSj4q1hcTpp0dsvnnE\nNdesf/nagqFDUyeaffZZv2C8+uqIs8+OeP/99INmXY93a3CYOEw2CCtXRtx7b8T//d+6Lbd48ZrL\nTJ2aalK9e6dfg2edlUJs220jnnhi9XnHjo3o3Dlik03SvAMHRuyySwqZU0+N2HvvVCuq9/HHEXvt\ntSpcIlLPuR/8IE17/vnGw7Lhvs6eHTFqVMRBB0X06RNx/fUR558f8elPR8yateYyr766eq3o8ssj\nTjihdUNtfbz4Ygrorl1TODRXK6y3dGnEoYemGu+llza9D2PGROy6a8Qrr6R/u4kTW7fsRZk/P/3Y\nmTs37fett67b8h99lH4gTZ6cPl95ZcS3vtX65VybdhUmwNHAK8AM4NtNzJP/qNoGYeXKiOnTUzPb\naaelJrLGLFqUumCXmjMn4vbbUwg1PNlNmJBOhHffncKnd+90cj/11BQ0m22WgumIIyIuvjjiu99N\n//N/4xsRJ58c0bNnaqI78cSI++5bdQJeuTLi5pvTuseOXX0/jj464tprV0376KOIffeN+NnPmj8G\n77wTMXp0ai4cMSLVwt57r+n5Fy1KgTVtWgrG5mo/kyalsv7P/6QAPOKIiAED0nJNWbkyheaJJ6am\nmz32iPjxj9ecb/78dIyeeSZ9vvvuiP79Iz74oPn9bYu+9rWIf/u39P6551L4Ll7c8uV/+ctUG643\na1YK7+b+HeutXJm63b/yyrqVuTF5w2SDuQAvqQMpRA4H/gE8C5wWEa80mC82lH0qt9raWmpqaipd\njDZhXY/F0KFQW5suip50UhptoN6KFamn2/Tp8MoraeyxzTdPry5d0ogGO+3UdI+cxx5LXbQ33jj1\nzNt22zTkzMSJq29nxgw49NDUw61bt/TaeuvUy22LLVKniKeeSp0ajjgidRt/5pnUNXyXXeCQQ9Kr\na9dVA26++ip84hO1dOlSw6abwmuvpZ55xx6b1tO1axrled68NFrDT36SupVD6tzwq1+lY7PjjnD+\n+XDKKav3urvpptQF/Mkn0/S5c1MZrr9+9fUceyzsv38abqh+2umnp16D5XqEQ0TaryefhL/9LXUi\nWbiwli22qAHgqKPS0ERbbtnydb7yShobb8aM9G8PqfNEt24te1heRDr+N920emeR449Px+hrX2t6\n2Y8+gosvTj0yFy2Cr341daapL8e6aje9uSQdCAyLiGOyz4NJSTqiwXwOk8zw4cMZPnx4pYvRJrS1\nYxGRTkTjxqUT2xVXwH77NT7f+++nATzr6mDx4jSawnvvpa7an//8mie/pUvTkD31J82FC1NoHXVU\nCrof/GDVsfjoI/jLX1KYPf10Gutt8eI0htutt8LJJ69ZpmXL0oPibr89Ldu3L/TsCZ/8ZOqJ9NRT\nqSdgvUmTUjl7907drpctS13En3569fBctCg9K2i33dKxGDAg9S5cvDi93n8/BfZWW6XA23bb9KiH\nLbdMwf3BB+nR2fPmpWD9+99TeL7+euqWvmBBCuODD04Bt//+MHr0cL7+9eEsXw4/+xn8+c8pBM44\nI21v+vS0ro4dV4V4166pXFtsAV/6Uhq66KqrVu3HG2+kYYRuuy0t9/776QdIjx6pvN26pXHrXnst\n/fs88ED69yr98TF2bOoVOXly4z9K5s9PP3J6904B/8EHaXSL3/0ujbRx3HGpDFL6N3700fRd797p\nB8Aee6y5zrxhspZe/21KT2BeyefXgQMqVBazXKR0H07//unXZXPz1Z/EWjqW2iabpBPcgQemR043\n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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZMAAAEPCAYAAACHuClZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XucVXW9//HXW4hAUsQUKDAVEQTS8Ib3GiVU8idaKZpm\nXvtpetTUhwaezoGyIlJL62hWpuEtBc2fZIRIOHY5CJgixk3UgwLKKIqKjnL9/P74rjlsxplhZM3s\nPbPn/Xw89sO9v3vttb5rMe73/l7WWooIzMzM8tim1BUwM7PWz2FiZma5OUzMzCw3h4mZmeXmMDEz\ns9wcJmZmlluzhomk30qqkjS3oOwnkhZImiPpAUnbF7w3StLi7P2jC8r3kzRX0nOSbmjOOpuZ2UfX\n3C2T24FjapVNBQZGxCBgMTAKQNIAYATQHxgG3CxJ2Wd+CZwbEX2BvpJqr9PMzEqoWcMkIv4OrKpV\nNi0iNmYvnwB6Zc+HA/dGxPqIWEIKmsGSegDbRcTsbLk7gBObs95mZvbRlHrM5Bxgcva8J7C04L3l\nWVlPYFlB+bKszMzMWoiShYmkfwfWRcTvS1UHMzNrGu1LsVFJZwFfAo4qKF4O7FLwuldWVl95fev2\nxcbMzLZCRGjLS9WtGC0TZY/0QjoWuBIYHhFrCpabBJwqqYOk3YE+wKyIWAG8LWlwNiD/DeChhjYY\nEX5EMHr06JLXoaU8fCx8LHwsGn7k1awtE0n3ABXAJyW9DIwGrgY6AI9mk7WeiIgLI2K+pAnAfGAd\ncGFs2sOLgN8BHYHJETGlOettZmYfTbOGSUScVkfx7Q0sPxYYW0f5P4G9m7BqZmbWhEo9m8uaUUVF\nRamr0GL4WGziY7GJj0XTUVP0lbUkkqLc9snMrLlJIlr4ALyZmZU5h4mZmeXmMDEzs9wcJmZmlpvD\nxMzMcnOYmJlZbg4TMzPLzWFiZma5OUzMzCw3h4mZmeXmMDEzs9wcJmZmlpvDxMzMcnOYmJlZbg4T\nMzPLzWFiZma5OUzMzCw3h4mZmeXmMDEzs9wcJmZmlpvDxMzMcnOYmJlZbg4TMzPLzWFiZma5OUzM\nzCw3h4mZmeXWrGEi6beSqiTNLSjrKmmqpEWSHpHUpeC9UZIWS1og6eiC8v0kzZX0nKQbmrPOZmb2\n0TV3y+R24JhaZSOBaRHRD5gOjAKQNAAYAfQHhgE3S1L2mV8C50ZEX6CvpNrrNDOzEmrWMImIvwOr\nahWfAIzPno8HTsyeDwfujYj1EbEEWAwMltQD2C4iZmfL3VHwGTMzawFKMWbSLSKqACJiBdAtK+8J\nLC1YbnlW1hNYVlC+LCszM7MWoiUMwEepK2BmZvm0L8E2qyR1j4iqrAvrtax8ObBLwXK9srL6yus1\nZsyY/31eUVFBRUVF/lqbmZWRyspKKisrm2x9imjehoGk3YA/RsTe2etxwJsRMU7Sd4CuETEyG4C/\nGziI1I31KLBnRISkJ4BLgNnAn4CfR8SUerYXzb1PZmblRhIRoS0vWbdmbZlIugeoAD4p6WVgNPBj\nYKKkc4CXSDO4iIj5kiYA84F1wIUFqXAR8DugIzC5viAxM7PSaPaWSbG5ZWJm9tHlbZm0hAF4MzNr\n5RwmZmaWm8PEzMxyc5iYmVluDhMzM8vNYWJmZrk5TMzMLDeHiZmZ5eYwMTOz3BwmZmaWm8PEzMxy\nc5iYmVluDhMzM8vNYWJmZrk5TMzMLDeHiZmZ5eYwMTOz3BwmZmaWm8PEzMxyc5iYmVluDhMzM8vN\nYWJmZrk5TMzMLLeyDJOIUtfAzKxtKcswWbeu1DUwM2tbyjJM1q4tdQ3MzNoWh4mZmeXmMDEzs9zK\nMkzWrCl1DczM2paShYmkyyT9S9JcSXdL6iCpq6SpkhZJekRSl4LlR0laLGmBpKMbWrdbJmZmxVWS\nMJH0aeBiYL+I2AdoD3wNGAlMi4h+wHRgVLb8AGAE0B8YBtwsSfWt32FiZlZcpezmagd0ltQe6AQs\nB04AxmfvjwdOzJ4PB+6NiPURsQRYDAyub8UOEzOz4ipJmETEK8D1wMukEHk7IqYB3SOiKltmBdAt\n+0hPYGnBKpZnZXVymJiZFVf7UmxU0g6kVsiuwNvAREmnA7XPXd+qc9lvuWUMf/5zel5RUUFFRcVW\n19XMrBxVVlZSWVnZZOtTlODaI5JOAo6JiG9mr88ADgaOAioiokpSD+CxiOgvaSQQETEuW34KMDoi\nZtax7pg2LRgypGi7Y2bW6kkiIuodi96SUo2ZvAwcLKljNpA+BJgPTALOypY5E3goez4JODWb8bU7\n0AeYVd/KPTXYzKy4StLNFRGzJN0PPA2sy/77a2A7YIKkc4CXSDO4iIj5kiaQAmcdcGE00KTymImZ\nWXGVpJurOUmK++4LRowodU3MzFqP1trN1azcMjEzKy6HiZmZ5eYwMTOz3BwmZmaWW1mGiacGm5kV\nV1mGiVsmZmbF5TAxM7PcHCZmZpabw8TMzHJzmJiZWW4OEzMzy60sw8RTg83Miqssw8QtEzOz4nKY\nmJlZbg4TMzPLzWFiZma5OUzMzCw3h4mZmeVWlmHiqcFmZsVVlmHilomZWXE5TMzMLDeHiZmZ5eYw\nMTOz3BwmZmaWW6PCRNKdjSlrKRwmZmbF1diWycDCF5LaAfs3fXWahqcGm5kVV4NhImmUpNXAPpLe\nyR6rgdeAh4pSw63glomZWXEpIra8kDQ2IkYVoT65SQopWLcO2rUrdW3MzFoHSUSEtvbzje3melhS\n52yDX5f0U0m7bu1Gs/V0kTRR0gJJ8yQdJKmrpKmSFkl6RFKXguVHSVqcLX90Q+vu0AHWrctTOzMz\n+ygaGya/BKolfQ64AngBuCPntm8EJkdEf+BzwEJgJDAtIvoB04FRAJIGACOA/sAw4GZJ9SZohw7u\n6jIzK6bGhsn6SP1hJwD/FRE3Adtt7UYlbQ8cERG3A0TE+oh4O1v/+Gyx8cCJ2fPhwL3ZckuAxcDg\n+tbvMDEzK67GhslqSaOAM4A/SdoG+FiO7e4OrJR0u6SnJP1a0rZA94ioAoiIFUC3bPmewNKCzy/P\nyurUoYNndJmZFVP7Ri53CnAacE5ErJD0GeDanNvdD7goIp6U9DNSF1ft2QBbnh1Qh+rqMfzkJ9C1\nK1RUVFBRUZGjqmZm5aeyspLKysomW1+jZnMBSOoOHJi9nBURr231RtO6ZkRE7+z14aQw2QOoiIgq\nST2AxyKiv6SRQETEuGz5KcDoiJhZx7qjb99g0iTo129ra2hm1rYUZTaXpBHALOBk0kD4TEknbe1G\ns66spZL6ZkVDgHnAJOCsrOxMNp3LMgk4VVIHSbsDfbL61MljJmZmxdXYbq5/Bw6saY1I2hmYBtyf\nY9uXAHdL+hjwInA20A6YIOkc4CVScBER8yVNAOYD64ALo4EmlcPEzKy4Ghsm29Tq1nqDnBeJjIhn\n2NRtVuiL9Sw/FhjbmHU7TMzMiquxYTJF0iPA77PXpwCTm6dK+TlMzMyKq8EwkdSHNF33SklfAQ7P\n3poB3N3cldtanhpsZlZcW2qZ3EB2FnpE/AH4A4CkvbP3jm/W2m0lt0zMzIprS+Me3SPi2dqFWdlu\nzVKjJvDxjztMzMyKaUthskMD73Vqyoo0JbdMzMyKa0th8qSkb9YulHQe8M/mqVJ+DhMzs+La0pjJ\nt4EHJZ3OpvA4AOgAfLk5K5aHw8TMrLgaDJPsTPVDJR0JfDYr/lNETG/2muXgMDEzK65GnWcSEY8B\njzVzXZqMpwabmRVXrrPYWyq3TMzMiqssw8RTg83Miqssw8QtEzOz4nKYmJlZbg4TMzPLzWFiZma5\nlW2YeGqwmVnxlG2YuGViZlY8ZRkmnhpsZlZcZRkmbpmYmRWXw8TMzHJzmJiZWW4OEzMzy61sw8RT\ng83Miqdsw8QtEzOz4inLMPHUYDOz4irLMHHLxMysuBwmZmaWm8PEzMxyK2mYSNpG0lOSJmWvu0qa\nKmmRpEckdSlYdpSkxZIWSDq6ofV6NpeZWXGVumVyKTC/4PVIYFpE9AOmA6MAJA0ARgD9gWHAzZJU\n30rdMjEzK66ShYmkXsCXgFsLik8AxmfPxwMnZs+HA/dGxPqIWAIsBgbXt26HiZlZcZWyZfIz4Eog\nCsq6R0QVQESsALpl5T2BpQXLLc/K6lQTJhH1LWFmZk2pfSk2Kuk4oCoi5kiqaGDRrYqDa64ZA8Do\n0XDUURVUVDS0CTOztqeyspLKysomW5+iBD/fJf0I+DqwHugEbAc8CBwAVERElaQewGMR0V/SSCAi\nYlz2+SnA6IiYWce6IyLYdltYuRK23bZYe2Vm1npJIiLqHYvekpJ0c0XE1RHxmYjoDZwKTI+IM4A/\nAmdli50JPJQ9nwScKqmDpN2BPsCshrbhcRMzs+IpSTdXA34MTJB0DvASaQYXETFf0gTSzK91wIWx\nhSaVpwebmRVPSbq5mlNNN1evXjBjBuyyS6lrZGbW8rXKbq5icDeXmVnxlG2Y+MrBZmbFU7Zh4paJ\nmVnxOEzMzCw3h4mZmeVW1mHiqcFmZsVR1mHilomZWXE4TMzMLLeyDRNPDTYzK56yDRO3TMzMisdh\nYmZmuTlMzMwst7IOE08NNjMrjrIOE7dMzMyKw2FiZma5lW2YeGqwmVnxlG2YuGViZlY8ZRsmHTvC\ne++VuhZmZm1D2YZJnz7w/POlroWZWdtQtmEyYADMm1fqWpiZtQ2KiFLXoUlJiohgwwbYbjt4/XXo\n3LnUtTIza9kkERHa2s+XbcukXTvo2xcWLCh1TczMyl/Zhgmkrq7580tdCzOz8ucwMTOz3Mo6TAYO\n9CC8mVkxlHWYuGViZlYcZTubC2D9+jSj6403YNttS1wxM7MWzLO5GtC+Pey5JyxcWOqamJmVt5KE\niaRekqZLmifpWUmXZOVdJU2VtEjSI5K6FHxmlKTFkhZIOrqx23JXl5lZ8ytVy2Q9cHlEDAQOAS6S\ntBcwEpgWEf2A6cAoAEkDgBFAf2AYcLOkRjXHPAhvZtb8ShImEbEiIuZkz98FFgC9gBOA8dli44ET\ns+fDgXsjYn1ELAEWA4Mbsy23TMzMml/Jx0wk7QYMAp4AukdEFaTAAbpli/UElhZ8bHlWtkUOEzOz\n5lfSMJH0CeB+4NKshVJ7alnuqWZ9+sCyZfD++3nXZGZm9Wlfqg1Lak8Kkjsj4qGsuEpS94ioktQD\neC0rXw7sUvDxXllZncaMGfO/zysqKthjjwoWLYJBg5pyD8zMWq/KykoqKyubbH0lO89E0h3Ayoi4\nvKBsHPBmRIyT9B2ga0SMzAbg7wYOInVvPQrsGXVUvvA8kxojRsAJJ8DppzfjDpmZtWJ5zzMpSctE\n0mHA6cCzkp4mdWddDYwDJkg6B3iJNIOLiJgvaQIwH1gHXFhXkNRn4ECPm5iZNaeyPgO+xsSJcM89\n8OCDJaqUmVkL5zPgG2HgQJg1Kw3Em5lZ02sTYdK/P3zrW7DffnDHHVBmjTEzs5JrE91cNZ5+Gs48\nE3r3hvPPT7O7evSAxp1Lb2ZWvtzN9RHsuy/Mng0HHwzXXw+f/WwKk1/8otQ1MzNr3dpUy6S2CJgz\nB44+Gl5+GTp1aubKmZm1UG6Z5CCl1sqBB8J995W6NmZmrVebDpMaF10EN93U8DLz5sHDDxenPmZm\nrU2b7uaqsWFDuobXhAmplVLbBx/A/vvD6tWwZAls4wg2szLjbq4m0K4dXHBB/a2T730P+vWDHXeE\nJryUjZlZ2XDLJLNyZWqdvPACfPKTm8pnz4bjj4dnnkln0c+ZA+PH178eM7PWyC2TJrLTTjB8ONx2\n26ayNWvgrLPghhuge3c47TR46CF4992SVdPMrEVyy6TAzJlw3HFwxBGw3XZQVQWdO8MDD2w6sfH4\n4+Hkk+Eb32jCSpuZlVjelonDpJaZM2H58jTY/t57cMopm3d7TZwIt9wCf/lL3Z9ftQpeeSVdD8zM\nrLVwmNSSN0y25IMPoGfPdGmWz3xm8/defRWGDk3/feop2HXXZquGmVmT8phJkXXsmG62ddddm5cv\nWZK6x04/HUaOTP9dv74kVTQzK7qS3ba3NTvzzNT91bEj9OqVxlW+9S246ir4t3+DjRvh0UfhmmvS\ntOKm9NhjcPjh8LGPNe16zczycDfXVoiAW29NZ8UvW5a6tc4/f/NB+VdfTZe8v/de+MIXmma7M2bA\noYfCT38Kl13WNOs0MwOPmXxIMcKksSZPTiHz6KOw11751rVxIwweDMceC7/6FfzrX2m6crHMnAkD\nBqRZbmZWfjxm0oJ96Uvw/e/D5z//4et6LV6cxl2mTEmD9VVVDa/rttvg4x9PXWdnnZXGZZrC449D\ndXXDy6xeDccck7ryzMzq4pZJETzxBJx0UrpkS79+qWUxdy4ceSS89VYKkpdeSi2Pq66Co47a/IZd\nq1alu0VOnpy6zt55J71+4IF0b5atNXMmHHYYXHkljB1b/3I33ADTp8OiRfCDH6TzbMysvLibq5aW\nGCaQzj35+tdTd9X558NXvpJaGjXWrEmXa7n22jSwf+aZaaxln33g29+GtWvT+S017rorfcnPnJmu\nLVZoxQr4xz9g2DDYdtu66/Pee+ny+5dcAmPGpMDr0+fDy61fn8onTkxjRccfny4p86lP5T4kZtaC\nOExqaalh0lgbN8Kf/wyTJqUuqNdeg/btYcGCzU+ejEhTkT/+8dRK2WWX9NmHH4b589Prfv3SfVrq\nusrxhRemy8LccQeMG5fCZ9KkDy93333pAph//Wt6PXp0ul7Zn/7U+NsdR6Sw+sc/UjC2b4VzCNev\nb531Nmssh0ktrT1Manv11fRFtssuH37vjTdS4CxdmmaVrV2bWiNHHpm+wIcMSc9/8IPNPzdlSmod\nzZ0LXbqkVtFnP5tuX3zssZuWi0hdb//xH+m6ZQDr1sEhh6Rzba66quG6r1yZ1nnXXWkqc6dOcMIJ\nqSXUWrz+Olx+OUybBs895wkIVr7yhgkRUVaPtEsWEfHaaxG77x4xfnx6/d57ERMnRvTsGTF9+ubL\nPvxwRL9+EWvWbCp7/PGIvn0jNmzYfNkXXojo3z/inHMiqqvr3vaCBRG9e0ecd17E7NkRGzdGvPJK\nRI8eEX/7W9PtY3PZuDHit7+N6NYt4oorIr7ylYgf/rDUtbK6bNgQ8e67pa5F65d9d279d2+eD7fE\nh8Nkc/PmRey8c8SXvxzRpUvE0KEREybUveywYRHDh0f86lcRTz8dcdxxEbfcUveyq1dHnHJKxL77\nRrz44ubvVVamL+Hbbvvw5/74x4hdd41YtSrXbsXq1RH33FN/mOV1wQUR++8f8dRT6fWiRRE77bT1\n9f7DHyJuuqnp6mebXHNNxKBBEevXl7omrVveMHE3Vxswa1bq0jrhBNh55/qXW7ky3W1y1qz0WL06\nde106lT38hGpG+u734U99kjn0nTvDr//fZpMMGRI3Z+7+OI0FnTvvY0fd6mxYUOaJj16dLpZWbdu\naaznE5/4aOtpyN13pyndTz65ebfWOeek67Jdc03j17VxY+rWGz8+jW+dey585ztNV9diePZZ6NAh\njcG1NO++C717p7+Dyy5Lx9e2jsdManGYNJ2Ixn3Zr16dpg0vXAjPP5/GUwYMqH/599+Hgw5KX9QV\nFek8nF13TTcmW7w4zXw74IA0RXqnnVI9nnsOHnkEfvObFCLXX59mo51/fpqcMHlyGv/Ja+HCNLHh\nL39JM+kKLVmSbt+8cGHDoVxj9ep0VYTXX0/TuNevT/t7wQVwxRX561oMb7wBgwalGYNPPpn+PUrh\n0Udh1Kg0waRHj03l112X6nXFFenH0qJFHtfaWg6TWhwmrUN1dZrd9de/psfy5WkK8p57ptbNE0+k\n8j594M03U4vkmGPSlOphwzaF3MaNcOmlafkrrkih89xz6VycwYPTZIHBgzf/golI5+4sWZJ+2e67\nb3q/ujqF3KWXwnnn1V3viy5K062vvbb+fVuxAn73uzSVe+jQNBuuQ4f03tKlKVDOPjvtzw47QNeu\nqdUipZl3HTvWPQOv2CLgq1+F3XZLM9nmzEkzDWtPRW9ud9yRzoUaMiT9LUyenI7PBx+kVsmUKSn4\nv/GNNFHlhz8sbv3KRZsKE0nHAjeQztz/bUSMq2MZh0mZWLs2TUPeYYfU0qmvlRQBP/pR+rLr2zc9\nOndOXXX//d/wz3+m5Tp1So/Vq9O6dtstvX722fSZTp3Sl9Odd9a/rVdeSTPfxoxJJ3x+7nPpi23+\n/BSOU6emEzxPOgm++c0UZLW9/HIKpVdfTaH21ltpXzduTI/OndOv7JNOSl+ga9emsF2+PNVxl13S\neT7N/aX+m9+kIKw5l2no0HSR0cZ089UE9o47bl7+1lupZfbqq3DjjanV09A6xo6FX/86hVifPqnV\neNpp6fyom29OQVIzpX3ZsvTv0ZS3f1ixIu3vpZemv5FiqWnNDh2aupCLoc2EiaRtgOeAIcArwGzg\n1IhYWGs5h0mmsrKSioqKUlej5NJVnCs58MAKqqvT+MoOO2x6f82adH+aefPS1aC3NP4ydSrcf38K\nqpdeSl+0O++cwuXzn08hsP32W1/fl1+GP/whbWP27LT+nj3T4/330/tvvJG6nLbbLtX3E59IoSal\nx847p1bennum8OnYMbWO2rWD6dMr+dSnKqiqgv/5n9Q1tGhROg4nnwxnnJHWe9hhqXVY02VZVZW6\nH2+4IbUQ6wrc6uo0FfznP09dniedBP/5n+mL+Mkn0/EdNix96X/3uykYvv/9zVuOGzemLs3rrkv7\nOXkyfPrT6b3nn0+tzUceSXW4777Umqzxve+lf8urrkrHpHPntP81LcPaGvp/ZPr0dKJxRUXq9rz7\nbvjiFz/yP2ejRaS/qV/+MnXnHXkk/O1v6ThdfHHz/3hoS2FyMDA6IoZlr0eSZh+Mq7WcwyQzZswY\nxrSmkzqaUXMdi1Wr0rk33bo1+aqBFB4dO374i3vt2vTrdfXq1FX37rvpSzjN0Ey/qBcvTo/ly9Py\na9emur7zzhgOOmgM3bunX/D9+qVHRJo4ceed6TM/+9mHr8c2Y0YaE6uuTpf2GTRoUytk1ar05Xfo\noemX/AEHpAkaN9yQLvszc2ZqTZx0UlrXypVpMsKDD6bJG717p8CcNCnt82WXpfApvFIEwO23p/UP\nHpzO/ylUXZ26u5Yv33RcXn89dWUeckhq3bzzTmohVVfDCy+MYezYMey1VwrjDRvS8r/5TarrHXek\n1sHjj6e6fPe7KcSmTEmPF19MPyCGDk3/7dx5y/+mEWk7Nf9WTz+dfjjcf3/a1/PPT1fA2HHH9O93\n7rlpvG3cuBSc9QVjXm0pTL4KHBMR/zd7/XVgcERcUms5h0nGYbKJj8UmWzoWEWmSwV571d/dt2JF\n6j585pk0ntK1a/ry23ffFAqF3n47tVaOPbbuLpua4HvhhdTS+/znU2ugoW7NK69MoVZXN2Jt77yT\nujxnzEjr32GH9OjQAe66awzV1WN4/fUUYG++mfbjgANSoNS0iCAFx/Dhqatz6NC0P336pKB59NHU\n8urWLbWEevVKrcMuXdIjIl3pe+7c1CW6bt2mVmSfPilgTz4Z9t77w/u9cWMaf7v11jQeuP/+qWW3\nalXqLqyqStvq3z+1Ijt1Sv9+CxemMbpevVILtU+f9G+xaNGm9fziF5u2kzdMfIEIM9uMlL6YGtKj\nBxx3XHpsSZcuaYyooXX16JHGQxpbv+uua9yykLocv/jFuruoqqvT+NfKlenX/0471X/ZnN69UxhE\nbN7ldMQRqcXywQepRbRsWfoSX7kyfXm/8koKhMMPT5cxGjiwcS2YGttskz534YUpGGfMSMG0//5p\n7Kx79zTVfv78VL/3308/BM4+OwXJsmUprJ95Jh2Lww9PrZ28t8WorTW1TA4GxkTEsdnreru5SlE/\nM7PWrq10c7UDFpEG4F8FZgFfi4gFJa2YmZm1nm6uiNgg6d+AqWyaGuwgMTNrAVpNy8TMzFquFnCe\nbdOQdKykhZKek9TKrn6Uj6RekqZLmifpWUmXZOVdJU2VtEjSI5Ka4IIjrYOkbSQ9JWlS9rpNHgtJ\nXSRNlLQg+/s4qA0fi8sk/UvSXEl3S+rQVo6FpN9KqpI0t6Cs3n2XNErS4uzv5ujGbKMswiQ7ofG/\ngGOAgcDXJDXxXIUWbT1weUQMBA4BLsr2fyQwLSL6AdOBUSWsY7FdCswveN1Wj8WNwOSI6A98DlhI\nGzwWkj4NXAzsFxH7kLr4v0bbORa3k74fC9W575IGACOA/sAw4GZpy1fpK4swAQYDiyPipYhYB9wL\nnFDiOhVNRKyIiDnZ83eBBUAv0jEYny02HjixNDUsLkm9gC8BtxYUt7ljIWl74IiIuB0gItZHxNu0\nwWORaQd0ltQe6AQsp40ci4j4O7CqVnF9+z4cuDf7e1kCLCZ9xzaoXMKkJ7C04PWyrKzNkbQbMAh4\nAugeEVWQAgdopvO0W5yfAVcChQOCbfFY7A6slHR71uX3a0nb0gaPRUS8AlwPvEwKkbcjYhpt8FgU\n6FbPvtf+Pl1OI75PyyVMDJD0CeB+4NKshVJ7dkXZz7aQdBxQlbXUGmqal/2xIHXl7AfcFBH7Ae+R\nujba4t/FDqRf4rsCnya1UE6nDR6LBuTa93IJk+XAZwpe98rK2oys6X4/cGdEPJQVV0nqnr3fA3it\nVPUrosOA4ZJeBH4PHCXpTmBFGzwWy4ClEfFk9voBUri0xb+LLwIvRsSbEbEBeBA4lLZ5LGrUt+/L\ngV0KlmvU92m5hMlsoI+kXSV1AE4FJpW4TsV2GzA/Im4sKJsEnJU9PxN4qPaHyk1EXB0Rn4mI3qS/\ng+kRcQbwR9resagClkqquXj6EGAebfDvgtS9dbCkjtlg8hDSBI22dCzE5q31+vZ9EnBqNtttd6AP\n6STxhldeLueZZPc6uZFNJzT+uMRVKhpJhwF/BZ4lNVUDuJr0BzCB9CvjJWBERLxVqnoWm6QvAFdE\nxHBJO9IGj4Wkz5EmInwMeBE4mzQQ3RaPxWjSD4x1wNPAecB2tIFjIekeoAL4JFAFjAb+HzCROvZd\n0ijgXNLvQoMbAAACgUlEQVSxujQipm5xG+USJmZmVjrl0s1lZmYl5DAxM7PcHCZmZpabw8TMzHJz\nmJiZWW4OEzMzy81hYlZA0ursv7tK+loTr3tUrdd/b8r1m5WSw8RsczUnXu0OnPZRPpjdWrohV2+2\noYjDP8r6zVoyh4lZ3cYCh2dX2700u9nWTyTNlDRH0jchnWUv6a+SHiJdqgRJD0qand2o7LysbCzQ\nKVvfnVnZ6pqNSbo2W/4ZSSMK1v1Ywc2t7ixY/sfZjZ7mSPpJ0Y6KWT1azT3gzYpsJNmlWACy8Hgr\nIg7Krv/2D0k1l5jYFxgYES9nr8+OiLckdQRmS3ogIkZJuii7em+NyNb9VWCfiNhbUrfsM49nywwC\nBgArsm0eSrrB1YkRsVf2+e2b6yCYNZZbJmaNczTwDUlPAzOBHYE9s/dmFQQJwLclzSHdU6ZXwXL1\nOYx0hWMi4jWgEjiwYN2vRrru0RxgN+Bt4H1Jt0r6MvB+zn0zy81hYtY4Ai6OiH2zxx7ZzZUg3Sck\nLZQuLnkUcFBEDCIFQMeCdTR2WzXWFDzfALTPLqE+mHTLgf8DTPnIe2PWxBwmZpur+SJfTbqibI1H\ngAuz+8Ygac/sroW1dQFWRcQaSXsBBxe8t7bm87W29TfglGxcZmfgCBq45He23R0iYgpwObBP43fP\nrHl4zMRsczWzueYCG7Nurd9FxI3ZLZGfyu6H8Rp13y98CnCBpHnAImBGwXu/BuZK+md2j5UAiIgH\nJR0MPANsBK6MiNck9a+nbtsDD2VjMgCXbf3umjUNX4LezMxyczeXmZnl5jAxM7PcHCZmZpabw8TM\nzHJzmJiZWW4OEzMzy81hYmZmuTlMzMwst/8Paih5L8DB440AAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -433,7 +433,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 11, "metadata": { "collapsed": false }, @@ -442,7 +442,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Training Accuracy: 97.74%\n" + "Training Accuracy: 93.86%\n" ] } ], @@ -454,7 +454,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 12, "metadata": { "collapsed": false }, @@ -463,7 +463,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -481,7 +481,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 13, "metadata": { "collapsed": false }, @@ -490,7 +490,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Prediction: 9\n" + "Prediction: 8\n" ] } ], @@ -498,84 +498,6 @@ "print('Prediction: %d' % lr.predict(X[4999, None]))" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Example 4 -- Training and Validation Accuracies During Training" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Training accuracies are collected for each epoch by default. Optionally, we can pass validation dataset during model fitting to compute the validation accuracy values for each epoch. Here, pass 4000 samples from MNIST for training and 1000 samples from MNIST for validation." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Epoch: 100/100 | Cost 0.59 | TrainAcc 0.99 | ValidAcc 0.85" - ] - } - ], - "source": [ - "from mlxtend.data import mnist_data\n", - "from mlxtend.preprocessing import shuffle_arrays_unison\n", - "from mlxtend.tf_classifier import TfSoftmaxRegression\n", - "import matplotlib.pyplot as plt\n", - "\n", - "X, y = mnist_data()\n", - "X, y = shuffle_arrays_unison((X, y), random_seed=1)\n", - "\n", - "lr = TfSoftmaxRegression(eta=0.01, \n", - " epochs=100, \n", - " minibatches=20, \n", - " print_progress=True, \n", - " random_seed=1)\n", - "lr.fit(X=X[:4000], \n", - " y=y[:4000],\n", - " X_valid=X[4000:],\n", - " y_valid=y[4000:])" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(range(1, lr.epochs + 1), lr.train_acc_, label='training')\n", - "plt.plot(range(1, lr.epochs + 1), lr.valid_acc_, label='validation')\n", - "plt.legend(loc='lower right')\n", - "plt.xlabel('Epoch')\n", - "plt.ylabel('Accuracy')\n", - "plt.legend(loc='lower right')\n", - "plt.grid()\n", - "plt.show()" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -585,7 +507,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": { "collapsed": false }, @@ -596,7 +518,7 @@ "text": [ "## TfSoftmaxRegression\n", "\n", - "*TfSoftmaxRegression(eta=0.5, epochs=50, minibatches=1, random_seed=None, print_progress=0, dtype=None)*\n", + "*TfSoftmaxRegression(eta=0.5, epochs=50, n_classes=None, minibatches=1, random_seed=None, print_progress=0, dtype=None)*\n", "\n", "Softmax regression classifier.\n", "\n", @@ -609,6 +531,14 @@ "- `epochs` : int (default: 50)\n", "\n", " Passes over the training dataset.\n", + " Prior to each epoch, the dataset is shuffled\n", + " if `minibatches > 1` to prevent cycles in stochastic gradient descent.\n", + "\n", + "- `n_classes` : int (default: None)\n", + "\n", + " A positive integer to declare the number of class labels\n", + " if not all class labels are present in a partial training set.\n", + " Gets the number of class labels automatically if None.\n", "\n", "- `minibatches` : int (default: 1)\n", "\n", @@ -636,11 +566,11 @@ "\n", "**Attributes**\n", "\n", - "- `weights_` : 2d-array, shape=[n_features, n_classes]\n", + "- `w_` : 2d-array, shape=[n_features, n_classes]\n", "\n", " Weights after fitting.\n", "\n", - "- `biases_` : 1D-array, shape=[n_classes]\n", + "- `b_` : 1D-array, shape=[n_classes]\n", "\n", " Bias units after fitting.\n", "\n", @@ -648,21 +578,13 @@ "\n", " List of floats, the average cross_entropy for each epoch.\n", "\n", - "- `train_acc_` : list\n", - "\n", - " List of training accuracies for each epoch\n", - "\n", - "- `valid_acc_` : list\n", - "\n", - " List of validation accuracies for each epoch\n", - "\n", "### Methods\n", "\n", "
\n", "\n", - "*fit(X, y, init_weights=True, override_minibatches=None, n_classes=None, X_valid=None, y_valid=None)*\n", + "*fit(X, y, init_params=True)*\n", "\n", - "Learn weight coefficients from training data.\n", + "Learn model from training data.\n", "\n", "**Parameters**\n", "\n", @@ -675,29 +597,11 @@ "\n", " Target values.\n", "\n", - "- `init_weights` : bool (default: True)\n", - "\n", - " (Re)initializes weights to small random floats if True.\n", + "- `init_params` : bool (default: True)\n", "\n", - "- `override_minibatches` : int or None (default: None)\n", - "\n", - " Uses a different number of minibatches for this session.\n", - "\n", - "- `n_classes` : int (default: None)\n", - "\n", - " A positive integer to declare the number of class labels\n", - " if not all class labels are present in a partial training set.\n", - " Gets the number of class labels automatically if None.\n", - " Ignored if init_weights=False.\n", - "\n", - "- `X_valid` : {array-like, sparse matrix}, shape = [n_samples, n_features]\n", - "\n", - " Optional validation set to store the validation accuracy values\n", - " for each epoch via self.valid_acc_\n", - "\n", - "- `y_valid` : array-like, shape = [n_samples]\n", - "\n", - " Target values for X_valid\n", + " Re-initializes model parametersprior to fitting.\n", + " Set False to continue training with weights from\n", + " a previous model fitting.\n", "\n", "**Returns**\n", "\n", @@ -708,7 +612,7 @@ "\n", "*predict(X)*\n", "\n", - "Predict class labels of X.\n", + "Predict targets from X.\n", "\n", "**Parameters**\n", "\n", @@ -719,9 +623,9 @@ "\n", "**Returns**\n", "\n", - "- `class_labels` : array-like, shape = [n_samples]\n", + "- `target_values` : array-like, shape = [n_samples]\n", "\n", - " Predicted class labels.\n", + " Predicted target values.\n", "\n", "
\n", "\n", @@ -773,6 +677,15 @@ "with open('../../api_modules/mlxtend.tf_classifier/TfSoftmaxRegression.md', 'r') as f:\n", " print(f.read())" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/docs/sources/user_guide/tf_classifier/TfSoftmaxRegression_files/TfSoftmaxRegression_22_1.png b/docs/sources/user_guide/tf_classifier/TfSoftmaxRegression_files/TfSoftmaxRegression_22_1.png index b9ee0a42c..416cf0ac0 100644 Binary files a/docs/sources/user_guide/tf_classifier/TfSoftmaxRegression_files/TfSoftmaxRegression_22_1.png and b/docs/sources/user_guide/tf_classifier/TfSoftmaxRegression_files/TfSoftmaxRegression_22_1.png differ diff --git a/docs/sources/user_guide/tf_classifier/TfSoftmaxRegression_files/TfSoftmaxRegression_22_2.png b/docs/sources/user_guide/tf_classifier/TfSoftmaxRegression_files/TfSoftmaxRegression_22_2.png index 40156707c..c31079124 100644 Binary files a/docs/sources/user_guide/tf_classifier/TfSoftmaxRegression_files/TfSoftmaxRegression_22_2.png and b/docs/sources/user_guide/tf_classifier/TfSoftmaxRegression_files/TfSoftmaxRegression_22_2.png differ diff --git a/docs/sources/user_guide/tf_classifier/TfSoftmaxRegression_files/TfSoftmaxRegression_25_1.png b/docs/sources/user_guide/tf_classifier/TfSoftmaxRegression_files/TfSoftmaxRegression_25_1.png index 439f5f68e..0bb9c0923 100644 Binary files a/docs/sources/user_guide/tf_classifier/TfSoftmaxRegression_files/TfSoftmaxRegression_25_1.png and b/docs/sources/user_guide/tf_classifier/TfSoftmaxRegression_files/TfSoftmaxRegression_25_1.png differ diff --git a/docs/sources/user_guide/tf_regressor/TfLinearRegression.ipynb b/docs/sources/user_guide/tf_regressor/TfLinearRegression.ipynb index 51a67e7d3..e33d1a66c 100644 --- a/docs/sources/user_guide/tf_regressor/TfLinearRegression.ipynb +++ b/docs/sources/user_guide/tf_regressor/TfLinearRegression.ipynb @@ -25,7 +25,7 @@ "output_type": "stream", "text": [ "Sebastian Raschka \n", - "last updated: 2016-04-23 \n", + "last updated: 2016-05-01 \n", "\n", "CPython 3.5.1\n", "IPython 4.0.3\n", @@ -131,7 +131,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 3, "metadata": { "collapsed": false }, @@ -140,7 +140,7 @@ "data": { "image/png": "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\nBTE/nibSAAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -169,7 +169,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 19, "metadata": { "collapsed": false }, @@ -178,7 +178,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch: 5/5 | Cost 2.40 | Elapsed: 00:00:00 | ETA: 00:00:00" + "Iteration: 6/5 | Cost 2.40 | Elapsed: 00:00:00 | ETA: 00:00:00" ] }, { @@ -193,7 +193,7 @@ "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAEPCAYAAABCyrPIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmYVOW17/HvYkYBA06oKCBRcULAiDOUiqICxikmUcE4\nJCqOMUfjGPqQGw/xJDFR1Gg0OKKiaMSrqKA0KoqiQEBE4hi9GnHCCRSwWfePd7fdtN3VVdW1a9fw\n+zxPPVTt3rX3Ysew+p3Wa+6OiIhIq6QDEBGR4qCEICIigBKCiIhElBBERARQQhARkYgSgoiIADEn\nBDO7ycyWmdnCBsfPMrMlZrbIzMbHGYOIiGSmTczXnwhcDdxae8DMUsBIYGd3/8bMNoo5BhERyUCs\nLQR3fxpY3uDw6cB4d/8mOuejOGMQEZHMJDGGsC0w2MzmmNlMM/tBAjGIiEgDcXcZNXXPru6+h5nt\nBkwGtk4gDhERqSeJhPAOcB+Au881s7VmtqG7f9zwRDNToSURkRy4u2X7nUJ0GVn0qvUPYH8AM9sW\naNtYMqjl7kX/Gjt2bOIxKE7FqDgVZ+0rV7G2EMxsEpACNjSzt4GxwN+BiWa2CFgFjI4zBhERyUys\nCcHdj23iR6PivK+IiGRPK5XzIJVKJR1CRhRn/pRCjKA4861U4syVtaS/KW5m5sUcn4hIMTIzvEgH\nlUVEpAQoIYiICKCEICIiESUEEREBlBBERCSihCAiIoASgoiIRJQQREQEKIGEMGFC0hGIiFSGok8I\nV1wBt97a/HkiItIySeyHkJXHHoP99oPOneGII5KORkSkfBV9QujbFx56CA4+GDp1ggMPTDoiEZHy\nVPRdRgADB8J998Fxx8Hs2UlHIyJSnkoiIQDssw/cdhsceSTMn590NCIi5adkEgLAsGFw7bUwfDi8\n8krS0YiIlJeiH0No6Kij4Msv4aCD4KmnoGfPpCMSESkPJZcQAE44AT7/HIYODUmhe/ekIxIRKX0l\nmRAAzjoLPvsszDqaNQu6dUs6IhGR0lbSW2i6wwUXwJNPwowZYa2CiEily3ULzZJOCBCSwmmnwauv\nwsMPQ4cOBQpORKRIVWxCAKipgeOPhxUrYMoUaNu2AMGJiBSpXBNCrNNOzewmM1tmZgsb+dmvzGyt\nmbW4979161DvyD0MONfUtPSKIiKVJ+51CBOBYQ0PmlkP4EDg3/m6Udu2MHkyvP8+jBkTkoOIiGQu\n1oTg7k8Dyxv50ZXA+fm+X8eO8MADsGAB/PrXSgoiItko+EplMzsMeMfdF8Vx/c6dYdq08Lr88jju\nICJSngq6DsHMOgIXE7qLvj2c7jtVVVXfvk+lUqRSqWbv061bKJs9eDB06RLWLIiIlKvq6mqqq6tb\nfJ3YZxmZWU/gQXfvZ2Y7ATOAlYRE0AN4Fxjk7h808t2MZhk15a23QlL47W/DYLOISCXIdZZRIVoI\nFr1w95eAbwtNmNmbwEB3b2ycocV69Vp3g50jj4zjLiIi5SHuaaeTgGeAbc3sbTM7scEpTjNdRi3V\nt29YsHb66SE5iIhI48piYVomZs8OW3Defz/svXdeLikiUpSKcmFaMdl7b7j9dm2wIyLSlIpJCBD2\nULjuOjj0UG2wIyLSUMmWv87VkUfCF1+E5PDkk2HgWUREKjAhQJiC+sUXdRvsbLZZ0hGJiCSvIhMC\nwJlnhg12DjpIG+yIiEAFzTJqjHuoeTRrljbYEZHyUdH7IbSEe1ijsHRpWK/QsWOstxMRiZ0SQgvU\n1MDo0fD553DffdpgR0RKm9YhtEDr1nDzzWAWEoM22BGRSqSEEKndYGfZstCFVMQNJxGRWCgh1NOh\nQ9hgZ+FCuOACJQURqSxKCA107hwGlx99FH73u6SjEREpnLTrEMxsT+B4YF9gM+Ar4CXgIeB2d/8s\n9ggTULvBzr77hg12zj476YhEROLXZEIws2nAe8ADwO+AD4AOwLbAfsADZvYnd59aiEALrXv3sDah\nNin87GdJRyQiEq8mp52a2Ubu/lHaL2dwTksUatppOkuXhg12rr4ajjoq0VBERDISx7TTjepdvH2D\nm+0BEGcyKBbbbRfGFMaMCeMKIiLlKl1CmFTv/bMNfnZtDLEUrf79w8Y6o0bB008nHY2ISDzSJQRr\n4n1jn8veXnvBHXeE8tnz5iUdjYhI/qVLCN7E+8Y+V4QDD4Trr4fhw2HJkqSjERHJr3TTTnuY2VWE\n1kDte6LPW8QeWZE64oiwl8KwYdpgR0TKS7qEcH699y80+FnDzxVl9GhtsCMi5Seraqdm1hX4tFBz\nQYth2mk6l18OkyaF/RQ23DDpaEREgrxPOzWz35hZ3+h9ezN7AngdWGZmQ3MPtXxcdFEYTzjkkNBi\nEBEpZekGlX8MLI3en0AYO9gYGAJcnsnFzewmM1tmZgvrHbvCzJaY2QIzm2JmXXKMPXFmMH487Lor\njBwJX32VdEQiIrlLlxBW1+uvGQbc5e417r6EzPdinhh9t77HgB3dvT/wKnBRNgEXGzO45hrYYgv4\n0Y9g9eqkIxIRyU26hLDKzHYys40JtYseq/ez9TK5uLs/DSxvcGyGu6+NPs4BemQRb1Fq1SpssNO6\ntTbYEZHSlS4hnAvcC7wCXOnubwKY2aHA/Dzd/yRgWp6ulai2beHuu+HDD+G007SXgoiUnia7ftx9\nDtC3keMPAw+39MZmdgmwxt0npTuvqqrq2/epVIpUKtXSW8emdoOdoUPh/PPhf/83dCmJiMSpurqa\n6urqFl8nXbXT89J90d3/lNENzHoCD7p7v3rHfgb8HNjf3Vel+W5RTzttyiefQCoVxhQuuyzpaESk\n0uQ67TTd4PAfgAWELp1V5F6/yOp/18wOJix6G5wuGZSy2g12Bg8Oeymcc07SEYmINC9dQhgA/BQY\nDrwI3Ak8ns2v7GY2CUgBG5rZ28BY4GKgHTDdQn/KHHcfk1P0Rax7d5g+vS4pnHhi0hGJiKSX0Upl\nM9uLkByGAr8u1C5ppdplVF/tBjtXXQVHH510NCJSCeLoMqq98MaE1sLOwP8jbKUpGardYGfYMOjU\nCQ4+OOmIREQal25Q+STgGMI+yvcCk929oMmgHFoItZ55Bg4/HKZMCfs0i4jEJdcWQrqEsBZ4Cfh3\ndGidE939sGxvlq1ySggAM2bAscfCI4/AwIFJRyMi5SqOhDAk3RfdfVa2N8tWuSUEgH/8A04/HZ54\nArbfPuloRKQc5X0MoRD/4Feiww8PlVEPOihssNO7d9IRiYgE6cpfP2hmI82sbSM/29rMxkXjDJKl\nUaNC6ewDD4T33ks6GhGRIF2XUXfgPOAo4BPgQ8IAcy/CvggT3P2BWIMrwy6j+v7nf+COO7TBjojk\nV97HEBpcvBewGfAV8C93X5ntjXJR7gkB4MIL4fHHw6tLye4MISLFJNaEkJRKSAjucMYZsHhxmH3U\nsWPSEYlIqVNCKGFr14Z9FJYvh/vvh3btko5IREqZEkKJW7MmVEdt3x4mTQqb7YiI5CLXhJBugxzM\nrLWZ3ZF7WJKptm3hrrvg44+1wY6IJCNtQnD3GqCnmakTowA6dAgL1156Cf7rv5QURKSwmu0yMrNb\nge2BqcCK2uOZbpDTEpXUZVTf8uVhg52jjoLf/CbpaESk1MRW7ZSw5uB1Qmuic7Y3kOx17Ro22Nl3\nX9hgA22wIyKFkfGgspl1AnD3L2ONaN17VmQLodbbb4ekMHYsnKQ14SKSoTj3Q9gJuA3oFn3+CBjt\n7ouzjlKystVWYde1VAo6dw6zkERE4pJJl9ENwHnuPhPAzFLA34C9YoxLIttuC9OmhWJ4nTtrgx0R\niU/aWUaR9WuTAYC7VwPrxxaRfMcuu4TZR6NGwVNPJR2NiJSrTBLCG2Z2mZn1il6XAm/EHZisa889\n4c47w8yjF19MOhoRKUeZJISTgI2B+4ApwEbRMSmwoUPhhhtg+HB4+eWkoxGRcpN2DMHMWgOXuPvZ\nBYpHmlG7wc6wYdpgR0TyK21CcPcaM9unUMFIZkaNCklh6NAwprD55klHJCLlIJNZRvPNbCpwD+uu\nVL6vuS+a2U3ACGCZu/eLjnUF7gZ6Am8Bx7j7Z9mHXtnGjIHPPgu7rs2aBRttlHREIlLqMhlD6AB8\nDOwPjIxeIzK8/kRgWINjFwIz3H074AngogyvJQ1cdBGMHBmmon7+edLRiEipS7tSORpDONvdr8z5\nBmY9gQfrtRBeAYa4+7Jom85qd+/bxHcreqVyJupvsDNtGqy3XtIRiUjSYil/HVU7/WnOUTVuE3df\nFl3/fWCTPF+/opjBhAmw5ZZw9NGwenXSEYlIqcpkDGG2mU0g9PvXH0OYl6cY0jYBqqqqvn2fSqVI\npVJ5um35aNUKJk4MpS2OPz6sV9AGOyKVo7q6murq6hZfJ5Py1zMbOezuvn9GN/hul9ESIFWvy2im\nu2/fxHfVZZSFr7+GESOgVy/4299C60FEKk/RbqFpZr0ICWHn6PPvgU/c/fdm9mugq7tf2MR3lRCy\n9OWXYebRnnvCH/+opCBSiWIZQ4guvKmZ3WRm06LPO5jZyRkGNQl4BtjWzN42sxOB8cCBZrYUOCD6\nLHnSqRM8/DA8/jiMG5d0NCJSSjLpMppGmD56ibvvYmZtgPm1v/HHGpxaCDlbtizspTBmDJx7btLR\niEghxdZCADZy98nAWgB3/waoyfZGUlibbgozZsCVV8Lf/550NCJSCjKZZbTCzDYkmg1kZnsAWllc\nArTBjohkI5OEcB4wFehjZrMJlU+PjjUqyZv6G+y89Racd56mpIpI4zKaZRSNG2wHGLDU3dfEHVh0\nX40h5Mmbb4Z9mVetCmsWttsu6YhEJC5xjiHg7t+4+2J3f6lQyUDyq3fvMPPo2GNh773hT3+CGo0E\niUg9sa9DaAm1EOLx+utw4omwdm1oLWyzTdIRiUg+xdpCkPLSpw9UV8Mxx4QFbH/5S0gOIlLZmmwh\nmNnAdF/MYy2jJqmFEL9XXw2thdatw/TUPn2SjkhEWirvpSvq1TDqAPwA+CdhULkf8IK775ljrJkH\np4RQEDU1cNVV8LvfQVVVWMzWSm1HkZIVWy0jM7sPGOvui6LPOwFV7h771FMlhMJaujS0Ftq3D60F\n7dcsUpriHEPYrjYZALj7S0Cj1UmltG23XdijefhwGDQIrrtOYwsilSSTFsKdhH0Qbo8OHQd0cvd8\nb5zT2L3VQkjIK6/ACSeEYnk33RRKaotIaYizhXAisBg4J3q9HB2TMta3L8yeHVY477YbXH992K5T\nRMpXpiuVOwJbufvS+ENa575qIRSBxYvhZz+Drl3hxhtDjSQRKV5x7odwGLAAeCT63N/MpmYfopSq\nHXeEZ58NRfJ23TUkBeVpkfKTyRjCi8D+QLW7D4iOLdJ+CJVp0aLQWth445AYevRIOiIRaSjOMYQ1\n7t6w3LX+la5QO+8Mc+bAPvvAgAGh9IVytkh5yCQhLDazY4HWZraNmV1N2BZTKlTbtnDppaFY3lVX\nwYgR8O67SUclIi2VSUI4C9gRWAVMImyOo00ZhX794Pnnw5qFAQPg1lvVWhApZWnHEMysNfB7d/+v\nwoW0zv01hlAi5s8P6xZ69QpTVDfbLOmIRCpXLGMI7l4D7JNzVFIxBgyAF16A/v1hl13gjjvUWhAp\nNZnMMroO2AK4h7BiGQB3vy/e0NRCKFUvvhhaC9//Pvz1r9C9e9IRiVSWOGcZdQA+Jkw9HRm9RmR7\nI6kcu+4aksKOO4bWwp13qrUgUgoS2zHNzH4JnAysBRYBJ7r76gbnqIVQ4ubODesW+vYNxfI22STp\niETKX5wrlTuY2Rlmdq2Z/b32lVuY315zc8LspYHu3g9oA/ykJdeU4rTbbqG1sM02YVbS5MlJRyQi\nTcmky+g2oDswDJgF9AC+yMO9WwPrm1kbYD3gvTxcU4pQhw4wfjw88ACMHRu27vzww6SjEpGGMkkI\n33f3y4AV7n4LMBzYvSU3dff3gD8CbwPvAp+6+4yWXFOK3+67w7x5YWpqv34wZUrSEYlIfW0yOGdN\n9Oen0W5p7wMt6gk2s+8BPwR6Eha63Wtmx7r7pIbnVlVVffs+lUqRSqVacmtJWMeOcMUVcPjhYWzh\nnntgwgTYaKOkIxMpXdXV1VRXV7f4OplMOz0FmELYS3ki0An4jbv/Neebmh0NDHP3n0efRwG7u/uZ\nDc7ToHIZW7kylMC46y645ho44oikIxIpD7HtqRwHMxsE3ATsRiiJMRGY6+7XNDhPCaECPP102Mt5\n991DbaRu3ZKOSKS0xZYQzOw3jR1393HZ3qzBdccSZhatAeYDp7j7mgbnKCFUiJUr4eKLQxfSddfB\nYYclHZFI6YozIfyq3scOhEVpS9z9pGxvli0lhMozaxacdBLsvTf85S9hlzYRyU7BuozMrD3wqLun\nsr1ZtpQQKtOKFXDhhXD//aFQ3vDhSUckUloKmRC6Evr7v5/tzbKlhFDZZs6Ek0+GIUPgyivhe99L\nOiKR0hDnSuVFZrYwei0GlgJ/ziVIkWzstx8sXBimqu68MzzySNIRiZS3TMYQetb7+A2wzN2/iTWq\nunurhSBA2J3t5JNh6FD44x9hgw2SjkikeMVZ7fSLeq+vgC5m1q32le0NRXJxwAGhtdC6dWgtPPZY\n0hGJlJ9MWghvAVsCywEDvkcoOQHg7r51bMGphSCNeOwxOOUUOPhg+MMfoEuXpCMSKS5xthCmAyPd\nfSN335Aw7fQxd+8dZzIQacpBB8GiRbB2baiJNENVsETyIpMWwiJ337m5Y3FQC0GaM20a/OIXMGJE\nqJHUuXPSEYkkL84WwntmdqmZ9Ypel6BS1VIkDjkktBa+/jq0FmbOTDoikdKVSQuhGzAWGBwdmgWM\nc/dPYo5NLQTJykMPwamnhiJ548fD+usnHZFIMgqyMM3MWgPru/vn2d4oF0oIkq3ly+Hcc0PBvIkT\nYfDg5r8jUm7iXJg2ycy6mNn6hL2PXzaz83MJUiRuXbvCLbfAn/8MP/0pnHNOKIUhIs3LZAxhh6hF\ncDgwDegNjIo1KpEWGjkyjC18/DH07x9aDCKSXiYJoa2ZtSUkhKlRiWr140jR69YNbr89zD760Y/g\nvPNCmW0RaVwmCeF64C1gfeDJqJRFQcYQRPLhiCNCa+E//wmthWeeSToikeKUS7VTA1oXop6RBpUl\n36ZMgTPPhOOPh3HjQuE8kXIT5zqEdXhQkOJ2Ivl21FGhJtK//w0DBsCcOUlHJFI8EtlTOVNqIUic\nJk+Gs8+GE06A//5v6NAh6YhE8qNgLQSRcnHMMfDPf8Jrr8HAgTB3btIRiSQroxaCme0F9ALa1B5z\n91vjC+vb+6qFILFzh7vvDmsWTj4Zxo6F9u2Tjkokd7GtVDaz24A+wAKgJjrs7n521lFmSQlBCun9\n9+G000KL4ZZbYNddk45IJDdxJoQlhMVpBf+XWQlBCs0d7rgjrFk49VS47DJo1y7pqESyE+cYwktA\n9+xDEik9ZmFK6oIF4bXbbjB/ftJRiRRGJglhI0L9okfNbGrtq6U3NrMNzOweM1tiZovNbPeWXlMk\nXzbfHKZOhV/9CoYNg6oqWL066ahE4pVJl9GQxo67+6wW3djsZmCWu080szbAeg2rqKrLSIrBu++G\nTXjeew9uvhl22SXpiETSK0j563wxsy7AfHfv08x5SghSFNxDMrjggrB24cILoW3bpKMSaVyc5a/3\nMLO5Zvalma02sxoza2kto97AR2Y20czmmdkNZqYiAlK0zODEE2HePJg9O6xbuPnmsFObSLlo0/wp\nTAB+AtwD/AAYDWybh/sOBM5w9xfM7M/AhYSd2dZRVVX17ftUKkUqlWrhrUVyt+WWYR/nadNgwoTQ\nYjj55DBdtWfPpKOTSlVdXU11dXWLr5PJGMIL7v4DM1vo7v2iY/PdfUDONzXbFHjW3beOPu8D/Nrd\nRzY4T11GUtRefRWuvRZuvTXsznbWWbDffqFFIZKUOKedrjSzdsACM7vCzH6Z4fea5O7LgHfMrLal\ncQDwckuuKZKEbbaBK68MxfIOPjiML+y4Y0gSX3yRdHQi2cmkhdATWAa0A34JbABc6+6vtejGZrsA\nNwJtgTeAE939swbnqIUgJcUdZs0K3UkzZ4Y1DWPGwHbbJR2ZVJJYZxlFA75bufvSXILLlRKClLJ3\n3oG//hVuvDFszHPWWXDIIdC6ddKRSbmLs3TFSOAPQDt3721m/YFx7n5YbqFmEZwSgpSBr78Opbav\nvjrs8TxmDJx0UtjiUyQOcY4hVAGDgE8B3H0BYdqoiGSgQwcYPTqU177rrlByu08f+PnPw3uRYpFJ\nQljTsG8f0K/tIjkYNAhuuw1eeQV69YLhw8PspMmTYc2apKOTSpdJQlhsZscCrc1sGzO7GtA25SIt\nsOmmcMkl8OabYWbStdeGBPHb34Yy3CJJyCQhnAXsCKwC7gQ+B86NMyiRStG2LRx9NFRXwyOPhLpJ\n228Pxx0Hzz4bZi2JFIr2VBYpMsuXh7IY11wDG2wQZif9+MfQUcVdJENxzjL6AXAx391Cs1+2N8uW\nEoJUsrVrQ6thwgR44YUwM+n001UiQ5oXZ0JYCpwPLALW1h53939ne7NsKSGIBA1LZJx5Juy/v0pk\nSOPiTAhPu/s+OUfWAkoIIuv68suwxefVV4cWxJlnwqhR0Llz0pFJMYkzIRwA/BR4nDCwDIC735ft\nzbKlhCDSOJXIkHTiTAi3A32BxdR1Gbm7n5R1lFlSQhBpnkpkSEOxjiG4eyK/dyghiGTu66/hnntC\nd9JHH6lERiWLs3TFM2a2Qw4xiUgBdegQxhOefz6UyFi4MJTIOOUUlciQzGTSQlgC9AHeJIwhGKHL\nSNNORYrcBx/A3/4G110HvXuHQegjj9R+0OUuzi6jRmc9a9qpSOn45ht44IEwCP2vf8Gpp8IvfgHd\nuycdmcQh1v0QkqKEIJJ/ixaFVdB33w2HHhpaDXvsoTUN5UQJQUSy8umnMHGiSmSUIyUEEcnJ2rXw\n6KNhdpJKZJSHOGcZiUgZa9UqrFt4+GF45hlYvRoGDoQjjoDHH1fF1UqiFoKIfEdtiYwJE6CmRiUy\nSo26jEQk79zhySdDd9ITT4QSGWecoRIZxU5dRiKSd2YwZAjce29Y3NalS6i2OmwYPPhgaD1I+VAL\nQUSysmpV2AN6wgT48EOVyChGJdlCMLNWZjbPzKYmGYeIZK59+zCe8NxzKpFRbpLuMjoHeDnhGEQk\nR4MGhU17li6FrbeGESNg333Dorc1a5KOTrKVWEIwsx7AocCNScUgIvmxySZw8cXw5ptw7rmhHHev\nXjBuHLz/ftLRSaaSbCFcSdiaU4MEImWiTRs46qiwac8jj8B778H228Oxx8Kzz2pNQ7Frk8RNzWw4\nsMzdF5hZilBBtVFVVVXfvk+lUqRSqbjDE5E82Hnn0FIYPx5uvhlGjw6zlM48E37yE5XIyKfq6mqq\nq6tbfJ1EZhmZ2eXA8cA3QEegM3Cfu49ucJ5mGYmUidoSGRMmwNy5KpERp5JdmGZmQ4BfufthjfxM\nCUGkDL32Glx7LdxyS1jXcMIJsN9+ocietJwSgoiUnBUr4PbbYcqUMMaw884wdGh47bEHtGuXdISl\nqWQTQjpKCCKV4+uvYfZsmDEDpk8PG/nsu29IDgceCDvuqD0bMqWEICJl5eOPw2yl6dNDkli5Eg44\nICSHoUNhiy2SjrB4KSGISFl7442QGGbMCIX2NtmkrnsplQozmCRQQhCRirF2LcyfX5cg5syBfv3q\nupd23x3atk06yuQoIYhIxfrqq3XHH157bd3xhx12qKzxByUEEZHIRx/VjT9Mnx4GrGuTwwEHlP/4\ngxKCiEgTascfpk8P4w+bblo3OD1kSPmNPyghiIhkoKYGFiyom7303HOwyy51A9TlMP6ghCAikoOv\nvoKnn64boH7ttbB6uraLafvtS2/8QQlBRCQPPvoodCvVdjGtWrXu+MPmmycdYfOUEERE8sw9jD/U\ndi898QRsttm64w+dOycd5XcpIYiIxKymBubNq+teeu456N+/LkEMGlQc4w9KCCIiBbZyZd34w/Tp\noTUxZEjdAHVS4w9KCCIiCfvww3XHH9asWXf8YbPNChOHEoKISBFxh9dfr0sOM2eGAena7qXBg+Mb\nf1BCEBEpYrXjD7UD1HPnwoABdd1LgwaFPanzQQlBRKSErFwJTz1VN0D95pvrjj/07Zv7+IMSgohI\nCfvgg3XHH2pq6pLD0KHQvXvm11JCEBEpE+5hxXT98YcePeoGqAcPhk6dmv6+EoKISJn65pvvjj8M\nHFg3QL3bbuuOPyghiIhUiBUr1h1/eOutsGtc3foHJQQRkYq0bNm64w/vvKOEICJS8dyhVavcEkKr\nOAJqjpn1MLMnzGyxmS0ys7OTiENEpNy0pFRGIgkB+AY4z913BPYEzjCzvgnF0mLV1dVJh5ARxZk/\npRAjKM58K5U4c5VIQnD39919QfT+S2AJULK7nJbKfySKM39KIUZQnPlWKnHmKqkWwrfMrBfQH3gu\n2UhERCpbognBzDoB9wLnRC0FERFJSGKzjMysDfB/gWnu/pcmztEUIxGRHJTUtFMzuxX4yN3PSyQA\nERFZRyIJwcz2Bp4EFgEevS5290cKHoyIiABFvjBNREQKpxhmGd1kZsvMbGGac64ys1fNbIGZ9S9k\nfPViSBunmQ0xs0/NbF70ujSBGDNa8Jf088wkziJ5nu3N7Dkzmx/FObaJ85J+ns3GWQzPM4qjVXT/\nqU38PPH/r0dxNBlnsTzLKJa3zOyf0f/2zzdxTubP1N0TfQH7EKadLmzi54cAD0XvdwfmFGmcQ4Cp\nCT/L7kD/6H0nYCnQt9ieZ4ZxJv48ozjWi/5sDcwBBhXb88wwzmJ5nr8Ebm8slmJ5lhnEWRTPMorl\nDaBrmp9n9UwTbyG4+9PA8jSn/BC4NTr3OWADM9u0ELHVl0GcAC1YNN5yntmCv8SfZ4ZxQsLPE8Dd\nV0Zv2wNtCONd9SX+PKN7NxcnJPw8zawHcChwYxOnFMWzzCBOKIL/NiNG+p6erJ5p4gkhA1sA79T7\n/C7Fu6pb2FLcAAAEGklEQVR5z6hZ9pCZ7ZBkIGkW/BXV82xmYWLizzPqOpgPvA9Md/e5DU4piueZ\nQZyQ/PO8EjifxpMVFMmzpPk4IflnWcuB6WY218x+3sjPs3qmpZAQSsWLwFbu3h+YAPwjqUBKZcFf\nM3EWxfN097XuPgDoAeyedKJvSgZxJvo8zWw4sCxqGRrF8xv2OjKMsyj+24zs7e4DCS2aM8xsn5Zc\nrBQSwrvAlvU+94iOFRV3/7K22e7u04C2Ztat0HFEC/7uBW5z9wcaOaUonmdzcRbL86wXz+fATODg\nBj8qiudZq6k4i+B57g0cZmZvAHcC+0VrkeorhmfZbJxF8Czrx/Kf6M8PgfuBQQ1OyeqZFktCSPcb\nw1RgNICZ7QF86u7LChVYA03GWb9fzswGEab0flKowOr5O/CyN7H6m+J5nmnjLIbnaWYbmdkG0fuO\nwIHAKw1OS/x5ZhJn0s/T3S92963cfWvgJ8AT7j66wWmJP8tM4kz6Wda793pRKxszWx84CHipwWlZ\nPdM2Tf2gUMxsEpACNjSzt4GxQDvA3f0Gd3/YzA41s9eAFcCJxRgncLSZnQ6sAb4CfpxAjHsDxwGL\nov5kBy4GelJEzzOTOCmC5wlsBtxiZq0IvzzdHT2/Uymi55lJnBTH8/yOInyWjSrSZ7kpcL+FEj9t\ngDvc/bGWPFMtTBMREaB4uoxERCRhSggiIgIoIYiISEQJQUREACUEERGJKCGIiAighCCSV1Fp5AeT\njkMkF0oIIvmnxT1SkpQQpCKZ2XEWNpWZZ2bXRdVCvzCzP5nZS2Y23cw2jM7tb2bPRtUtp9QrE9En\nOm+Bmb1gZr2jy3c2s3vMbImZ3VbvnuOjay8wsysS+GuLpKWEIBXHzPoSyg3sFVWKXEsopbEe8Ly7\n70TY87t257FbgPOj6pYv1Tt+B3B1dHwv4D/R8f7A2cAOQB8z2ysqfna4u+8Unf9/4v57imRLCUEq\n0QHAQGBuVEtpf6A3ITFMjs65HdjHzLoAG0QbJEFIDoOjomJbuPtUAHdf7e5fR+c87+7/8VAXZgHQ\nC/gM+MrMbjSzIwg1cESKihKCVCIDbnH3ge4+wN23d/dxjZzn9c7Pxqp672uANu5eQyhNfC8wAngk\n26BF4qaEIJXocULFyo0BzKyrmW1F2I/46Oic44Cno/0FPokqtAKMAmZFG/q8Y2Y/jK7RLio93Sgz\nWw/4nrs/ApwH9IvjLybSEomXvxYpNHdfYmaXAo9FJaNXA2cSygMPMrPLgGXUlTU+Abg++gf/DepK\nCI8CbjCzcdE1ftTY7aI/uwAPmFmH6PMv8/zXEmkxlb8WiZjZF+7eOek4RJKiLiOROvrtSCqaWggi\nIgKohSAiIhElBBERAZQQREQkooQgIiKAEoKIiESUEEREBID/DzfgMKBR4zkOAAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -209,8 +209,8 @@ " print_progress=3)\n", "gd_lr.fit(X, y)\n", "\n", - "print('Intercept: %.2f' % gd_lr.bias_)\n", - "print('Slope: %.2f' % gd_lr.weights_)\n", + "print('Intercept: %.2f' % gd_lr.b_)\n", + "print('Slope: %.2f' % gd_lr.w_)\n", "\n", "plt.plot(range(1, gd_lr.epochs+1), gd_lr.cost_)\n", "plt.xlabel('epochs')\n", @@ -227,7 +227,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 20, "metadata": { "collapsed": false }, @@ -236,7 +236,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch: 50/50 | Cost 0.00 | Elapsed: 0:00:00 | ETA: 0:00:00" + "Iteration: 51/50 | Cost 0.00 | Elapsed: 0:00:00 | ETA: 0:00:00" ] }, { @@ -249,9 +249,9 @@ }, { "data": { - "image/png": "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\nCJgAAAAASUVORK5CYII=\n", + "image/png": "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\nRK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -260,12 +260,12 @@ ], "source": [ "gd_lr.epochs = 50\n", - "gd_lr.fit(X, y, init_weights=False)\n", + "gd_lr.fit(X, y, init_params=False)\n", "\n", - "print('Intercept: %.2f' % gd_lr.bias_)\n", - "print('Slope: %.2f' % gd_lr.weights_)\n", + "print('Intercept: %.2f' % gd_lr.b_)\n", + "print('Slope: %.2f' % gd_lr.w_)\n", "\n", - "plt.plot(range(1, gd_lr.epochs+1), gd_lr.cost_)\n", + "plt.plot(range(1, 56), gd_lr.cost_)\n", "plt.xlabel('epochs')\n", "plt.ylabel('mean squared error (MSE)')\n", "plt.show()" @@ -280,7 +280,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 21, "metadata": { "collapsed": false }, @@ -289,7 +289,7 @@ "data": { "image/png": "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\nIQV/EZEs9P8BbhLi+7qb/q8AAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -315,7 +315,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 22, "metadata": { "collapsed": false }, @@ -324,14 +324,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch: 10/10 | Cost 0.01 | Elapsed: 0:00:00 | ETA: 0:00:00" + "Iteration: 11/10 | Cost 0.01 | Elapsed: 0:00:00 | ETA: 0:00:00" ] }, { "data": { "image/png": "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\nJEm19f8BNgAdd6TdfoYAAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -357,7 +357,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 23, "metadata": { "collapsed": false }, @@ -366,7 +366,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -394,7 +394,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 24, "metadata": { "collapsed": false }, @@ -426,7 +426,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 25, "metadata": { "collapsed": false }, @@ -435,14 +435,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "Epoch: 200/200 | Cost 0.27 | Elapsed: 0:00:00 | ETA: 0:00:00" + "Iteration: 201/200 | Cost 0.27 | Elapsed: 0:00:00 | ETA: 0:00:00" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAakAAAEbCAYAAABgLnslAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmUFfWd/vH30zQquIIKJhBQUYgiIojITBhtwIVsGJ24\nYMIYjMaficvkJBE1ZyKZlTiT5DhRM4MxxGwatyTuGqOdxIwdUJCgguCG4IJLCKJGZfn8/qjqcGlu\ntw1961bd28/rnDq3tlv3uX26+fCt+ta3FBGYmZkVUUPeAczMzNrjImVmZoXlImVmZoXlImVmZoXl\nImVmZoXlImVmZoWVeZGSNFnSEklLJc0os/1USQvT6QFJI9L1QyUtkDQ/fV0j6byS950rabGkRZJm\nZf09zMys+pTlfVKSGoClwCTgBWAecEpELCnZZxywOCLWSJoMzIyIcWWOsxIYGxErJTUBFwMfiYj1\nkvaIiFcz+yJmZpaLrFtSY4FlEbE8ItYB1wHHle4QES0RsSZdbAEGlDnOUcBTEbEyXT4bmBUR69Nj\nuECZmdWhrIvUAGBFyfJKyhehVmcAd5ZZfzJwbcnyUOAISS2S7pc0pstJzcyscBrzDtBK0gRgOjC+\nzfqewBTgwpLVjUCfiBgn6TDgemDfamU1M7PqyLpIPQ8MKlkemK7bjKSDgdnA5IhY3Wbzh4GHI+KV\nknUrgJsBImKepI2Sdo+I19oc1wMTmpnlLCK0re/N+nTfPGA/SYMlbQecAtxSuoOkQcBNwLSIeKrM\nMaay+ak+gF8AE9P3DwV6ti1QrSKiZqZLLrkk9wz1nLcWMzuv89Z65q7KtEhFxAbgHOAe4DHguohY\nLOksSZ9Ld/snoC9wZdrVfG7r+yX1Juk0cXObQ88B9pW0CPgp8A9Zfo9ynn0Wrrii2p9qZta9ZH5N\nKiLuAoa1Wfe/JfNnAme28963gD3LrF8HTKts0q3z7rvwrW/BF76QZwozs/rmESe20T77wPPPwzvv\nVO6YTU1NlTtYFdRaXqi9zM6brVrLC7WZuSsyvZk3b5Iiy+83bBjcfDMMH57ZR5iZ1TRJRIE7TtS1\nYcNg6dK8U5iZ1S8XqS4YOhSeeCLvFGZm9ctFqgvckjIzy5aLVBcMG+aWlJlZllykusCn+8zMsuUi\n1QX9+8O6dfBa2bEuzMysq1ykukBKWlO+LmVmlg0XqS5y5wkzs+y4SHWRr0uZmWXHRaqL3MPPzCw7\nLlJd5NN9ZmbZ8dh9XfTmm7DHHvDGG9CjR6YfZWZWczx2X8523BH69UueL2VmZpXlIlUBBx4Ijz+e\ndwozs/rjIlUBLlJmZtlwkaqAAw6AxYvzTmFmVn9cpCrALSkzs2y4d18FrF4NgwbB668nQyWZmVnC\nvfsKoE8f2GknWLky7yRmZvXFRapCfMrPzKzyXKQqxEXKzKzyXKQq5IADXKTMzCrNRapCDjzQ3dDN\nzCrNRapCWk/31XFnSTOzqnORqpA990y6n69alXcSM7P64SJVIRIMHw6PPZZ3EjOz+uEiVUEHHQSL\nFuWdwsysfrhIVdCIES5SZmaVlHmRkjRZ0hJJSyXNKLP9VEkL0+kBSSPS9UMlLZA0P31dI+m8Nu/9\nkqSNkvpm/T06w0XKzKyyMh27T1IDsBSYBLwAzANOiYglJfuMAxZHxBpJk4GZETGuzHFWAodHxIp0\n3UDge8Aw4NCI+FOZz6/K2H2t/vxnGDgwGcOvwW1UM7PCj903FlgWEcsjYh1wHXBc6Q4R0RIRa9LF\nFmBAmeMcBTzVWqBS3wa+kkHmbbbbbrD77vD003knMTOrD1kXqQFAaWFZSfki1OoM4M4y608Grm1d\nkDQFWBERhTu55lN+ZmaVU5iTUpImANOBGW3W9wSmADeky72Ai4FLSnerUsz35CJlZlY5jRkf/3lg\nUMnywHTdZiQdDMwGJkfE6jabPww8HBGvpMtDgL2BhZKUHvNhSWMj4uW2x545c+Zf55uammhqatrW\n79IpI0bAz3+e6UeYmRVWc3Mzzc3NFTte1h0negBPkHSceBGYC0yNiMUl+wwCfg1Mi4iWMse4Frgr\nIq5p5zOeAUaXKW5V7zgBSSvqxBNhyZL33tfMrN51teNE5k/mTXvsXUZyavHqiJgl6SwgImK2pKuA\nE4DlJKft1kXE2PS9vdP1+0bE2naO/zQwpgi9+wDefRd23RX+9Cfo1auqH21mVjiFL1J5yqNIQXLK\n75prYPToqn+0mVmhFL0LerfkzhNmZpXhIpWBkSNh4cK8U5iZ1T4XqQyMGgULFuSdwsys9vmaVAZe\nfhmGDUs6T6gwd3CZmVWfr0kVUL9+0Ls3LF+edxIzs9rmIpWRQw7xKT8zs65ykcrIqFHwyCN5pzAz\nq20uUhlxS8rMrOtcpDLilpSZWde5SGVkn31gzRp47bW8k5iZ1S4XqYw0NCQ39bo1ZWa27VykMuTr\nUmZmXeMilaFRo2D+/LxTmJnVLhepDI0ZAw8/nHcKM7Pa5WGRMrR+Pey2G6xcmbyamXU3HhapwBob\nk+tSPuVnZrZtXKQyNmYMPPRQ3inMzGqTi1TGDjvMRcrMbFu5SGVszBiYNy/vFGZmtclFKmP77588\nV+rVV/NOYmZWe1ykMtbQAIce6q7oZmbbwkWqCnzKz8xs27hIVYE7T5iZbRsXqSo47DCYOxfq+L5p\nM7NMuEhVweDBsHEjrFiRdxIzs9riIlUFEvzN38CDD+adxMystrhIVcm4cdDSkncKM7Pa4iJVJW5J\nmZltPY+CXiVvvgn9+iU39m6/fd5pzMyqw6Og14gdd4QPftAjopuZbQ0XqSrydSkzs62TeZGSNFnS\nEklLJc0os/1USQvT6QFJI9L1QyUtkDQ/fV0j6bx026WSFkt6RNJNknbJ+ntUgq9LmZltnUyvSUlq\nAJYCk4AXgHnAKRGxpGSfccDiiFgjaTIwMyLGlTnOSmBsRKyUdBRwX0RslDQLiIi4qMznF+aaFMCT\nT8LEifDcc3knMTOrjqJfkxoLLIuI5RGxDrgOOK50h4hoiYg16WILMKDMcY4CnoqIlel77o2IjSXv\nGZhJ+gobMgTefts39ZqZdVbWRWoAUPpP8krKF6FWZwB3lll/MnBtO+85vZ33FI4E48fDAw/kncTM\nrDY05h2glaQJwHRgfJv1PYEpwIVl3vNVYF1E/LS9486cOfOv801NTTQ1NVUm8DYaPx5+9zuYOjXX\nGGZmmWhubqa5ublix8v6mtQ4kmtMk9PlC0muH32jzX4HAzcBkyPiqTbbpgCfbz1GyfrPAGcCEyPi\nnXY+v1DXpCB5ZMfpp8OiRXknMTPLXtGvSc0D9pM0WNJ2wCnALaU7SBpEUqCmtS1Qqam0OdWXdrD4\nCjClvQJVVKNGwfLlyU29ZmbWsUyLVERsAM4B7gEeA66LiMWSzpL0uXS3fwL6AlemXc3ntr5fUm+S\nThM3tzn0d4CdgF+lXdSvzPJ7VFJjIxx+OPz+93knMTMrPg+LlIN//md44w249NK8k5iZZavop/us\njNbOE2Zm1jG3pHLw1luw557wyivQu3feaczMsuOWVA3q3RtGjIA//CHvJGZmxeYilZMJE+D++/NO\nYWZWbC5SOZk4Ee67L+8UZmbF5mtSOXnrreQhiKtWJc+aMjOrR74mVaN694bRoz2On5lZR1ykcjRh\ngk/5mZl1xEUqRxMnuvOEmVlHfE0qR++8A3vskTxfarfd8k5jZlZ5viZVw7bfPhnH77e/zTuJmVkx\nuUjlbNIkuPfevFOYmRWTi1TOjjkG7rkn7xRmZsXkIpWzUaOSZ0stX553EjOz4nGRyllDAxx9NNx9\nd95JzMyKx0WqAI491qf8zMzKcRf0AnjxRTjwwOTRHY2NeacxM6scd0GvA+97HwwaBPPm5Z3EzKxY\nXKQK4thjfV3KzKwtF6mCmDwZ7rgj7xRmZsXia1IF8e670L8/LFmSvJqZ1QNfk6oT222XdEV3a8rM\nbBMXqQL52MfgttvyTmFmVhw+3Vcgr7wC++0HL7+cDD5rZlbrfLqvjuy5Jwwf7lHRzcxauUgVzMc/\nDrfemncKM7Ni6FSRkvSjzqyzrvvYx5IiVUNnKc3MMtPZltTw0gVJPYBDKx/HDjooGXR24cK8k5iZ\n5a/DIiXpIklrgYMlvZ5Oa4GXgV9WJWE3I8EJJ8DNN+edxMwsf53q3SfpPyLioirkqaha693X6sEH\n4cwz4dFH805iZtY11erdd5ukHdMP/LSkb0ka3MmAkyUtkbRU0owy20+VtDCdHpA0Il0/VNICSfPT\n1zWSzku39ZF0j6QnJN0taddOfo+acPjhsHo1PPFE3knMzPLV2SL1XeAtSSOBLwFPAT98rzdJagAu\nB44lua41VdIH2+z2NHBERIwE/hW4CiAilkbEqIgYTXL9602g9STYhcC9ETEMuA+ouVZeRxoa4Pjj\nfcrPzKyzRWp9et7sOODyiLgC2LkT7xsLLIuI5RGxDrguPcZfRURLRKxJF1uAAWWOcxTwVESsTJeP\nA65J568BPtHJ71EzfF3KzKzzRWqtpIuAacDtaQupZyfeNwBYUbK8kvJFqNUZwJ1l1p8MXFuy3C8i\nVgFExEtAv05kqSlHHAHPPptMZmbdVWefA3sycCpwekS8JGkQ8J+VDCJpAjAdGN9mfU9gCskpvva0\n2zti5syZf51vamqiqampKzGrprExaU1dfz1ccEHeaczMOqe5uZnm5uaKHa/TY/dJ6g8cli7OjYiX\nO/GeccDMiJicLl8IRER8o81+BwM3AZMj4qk226YAn289RrpuMdAUEask7QXcHxEHlPn8muzd1+r+\n++FLX4L58/NOYma2barSu0/SScBc4ETgJOAPkj7ZibfOA/aTNFjSdsApwC1tjj2IpEBNa1ugUlPZ\n/FQf6TE+k86fRp3es3XEEfDSS+7lZ2bdV2fvk1oIHN3aepK0J0nvupGdeO9k4DKSgnh1RMySdBZJ\ni2q2pKuAE4DlgIB1ETE2fW/vdP2+EbG25Jh9geuBD6TbT4qIP5f57JpuSQH84z9Cnz5wySV5JzEz\n23pdbUl1tkgtiogRJcsNwMLSdUVUD0WqpQWmT4fHH09GozAzqyVdLVKd7Thxl6S72XTa7WTAz5Ct\ngsMPh7ffTsbyO+SQvNOYmVVXhy0pSfsB/SPi95JOYFPPuz8DP2nnGlJh1ENLCuCrX00K1Te/mXcS\nM7Otk+npPkm3ARdFxKI260cA/x4RH9/WD66GeilSTzwBRx4JK1cmXdPNzGpF1r37+rctUADpur23\n9UNt6wwbBvvsA3ffnXcSM7Pqeq8itVsH23pVMoh17LTT4Jpr3ns/M7N68l5F6iFJZ7ZdKekM4OFs\nIlk5J5+ctKRWr847iZlZ9bzXNan+wM+Bd9lUlMYA2wHHp+PmFVa9XJNqdfLJ0NQEZ5+ddxIzs86p\n1n1SE4CD0sXHIuK+bf3Aaqq3InX33XDxxfCw27BmViOqUqRqVb0VqY0bYcgQuOEGGDMm7zRmZu+t\nWk/mtQJoaEgeKz97dt5JzMyqwy2pGvPSS3DAAbB8OeyyS95pzMw65pZUN7PXXjBxIlzbdlx4M7M6\n5CJVg846C777XaizRqKZ2RZcpGrQUUclY/n97nd5JzEzy5aLVA1qaIBzz4X//u+8k5iZZcsdJ2rU\n2rWw996wYAEMGpR3GjOz8txxopvaeedkPL8rrsg7iZlZdtySqmFPPQXjxsEzz8BOO+WdxsxsS25J\ndWNDhiTPmbr66ryTmJllwy2pGjdvHnzyk/Dkk9CzZ95pzMw255ZUN3fYYbDvvvCzn+WdxMys8lyk\n6sCMGXDppb6518zqj4tUHTj22OTeqVtvzTuJmVlluUjVAQm+9jX4+tfdmjKz+uIiVSc+8QlYvx5u\nvz3vJGZmleMiVScaGpLW1MyZbk2ZWf1wkaojxx8P774Lt92WdxIzs8pwkaojDQ3wL/8CX/0qbNiQ\ndxozs65zkaozU6Yk4/r95Cd5JzEz6zqPOFGHHngAPv1pWLIEdtgh7zRm1p0VfsQJSZMlLZG0VNKM\nMttPlbQwnR6QdHDJtl0l3SBpsaTHJB2erh8p6UFJCyTNlTQm6+9RS8aPh4MPhiuvzDuJmVnXZNqS\nktQALAUmAS8A84BTImJJyT7jgMURsUbSZGBmRIxLt/0A+E1EzJHUCPSOiNcl3Q18MyLukfRh4IKI\nmFDm87tlSwrg8ceTwWcXL4Y99sg7jZl1V0VvSY0FlkXE8ohYB1wHHFe6Q0S0RMSadLEFGAAgaRfg\n7yJiTrrf+oh4Pd1vI7BrOr8b8Hy2X6P2HHggTJ2adEs3M6tVWRepAcCKkuWV6br2nAHcmc7vA7wq\naY6k+ZJmS+qVbvsi8F+SngMuBS6qcO66MHMm3HQT/PGPeScxM9s2hendJ2kCMB1ovW7VCIwGroiI\n0cBbwIXptrOB8yNiEEnB+n6V49aEvn2TltT55/sGXzOrTY0ZH/95YFDJ8kDKnJpLO0vMBiZHxOp0\n9UpgRUQ8lC7fyKYCdlpEnA8QETdKavexfzNnzvzrfFNTE01NTdv0RWrVWWfB974HP/4xTJuWdxoz\nq3fNzc00NzdX7HhZd5zoATxB0nHiRWAuMDUiFpfsMwj4NTAtIlravP83wJkRsVTSJSQdJ2ZIegz4\nfET8RtIkYFZEHFbm87ttx4lSc+cm9089/njSujIzq5audpzI/D6ptMfeZSSnFq+OiFmSzgIiImZL\nugo4AVgOCFgXEWPT944Evgf0BJ4Gpqe9AD+UHrMH8DZJwVpQ5rNdpFLnnAPvvANXXZV3EjPrTgpf\npPLkIrXJmjUwfDj86EcwYYvO+mZm2Sh6F3QriF13hf/5H/jsZ+GNN/JOY2bWOW5JdTOnnZaM7Xf5\n5XknMbPuwKf7OuAitaXVq2HECLjmGpg0Ke80ZlbvfLrPtkqfPjBnTtKievXVvNOYmXXMLalu6stf\nhiefhJ//HLTN/8cxM+uYW1K2Tf7t3+C55+C73807iZlZ+9yS6saWLYMPfQhuvx0O2+JWaDOzrnNL\nyrbZ/vsn3dJPPBFeey3vNGZmW3JLyvjyl2HRoqRF1Zj1aI5m1q24JWVdNmtWMkr6V76SdxIzs825\nSBmNjfCzn8EddyQjppuZFYVP7hiQ3D91661wxBEweDAcfXTeiczM3JKyEkOHwo03wqc+BQu2GFPe\nzKz6XKRsM+PHJz3+Pv7xpIu6mVmefLrPtnDCCckYf5Mmwf33w5AheScys+7KRcrK+uxnYcMGmDgx\nKVT77pt3IjPrjlykrF2f+9ymQtXcDHvvnXciM+tuXKSsQ2efDRs3bmpRDR6cdyIz605cpOw9feEL\nyc2+48fDbbfByJF5JzKz7sK9+6xTzjkHvvWt5P6pX/0q7zRm1l24SFmnnXgi3HwzTJsGP/hB3mnM\nrDvwALO21Z54Aj78YfiHf4CvfQ0a/F8dM2tHVweYdZGybbJqVXI/VZ8+8MMfQt++eScysyLyKOiW\ni/79k27pw4bBoYfCvHl5JzKzeuQiZdusZ0/45jeT6aMfhcsvT3oBmplVik/3WUU8+WTSseIDH0jG\n/nv/+/NOZGZF4NN9Vgj77QctLXDIIcn0wx+6VWVmXeeWlFXcggUwfToMGAD/+78wcGDeicwsL25J\nWeGMGgVz58LYsUmr6tJL4Z138k5lZrXIRcoysd12cMkl8OCD8Pvfw/Dh8Mtf+hSgmW2dzIuUpMmS\nlkhaKmlGme2nSlqYTg9IOrhk266SbpC0WNJjkg4v2XZuun6RpFlZfw/bNvvvnxSnK6+Eiy+GY46B\nhx/OO5WZ1YpMi5SkBuBy4FhgODBV0gfb7PY0cEREjAT+FZhdsu0y4I6IOAAYCSxOj9sEfBwYEREj\ngP/K8ntY1x1zDDzyCBx/PBx3HEyZAvPn553KzIou65bUWGBZRCyPiHXAdcBxpTtEREtErEkXW4AB\nAJJ2Af4uIuak+62PiNfT/c4GZkXE+nTbqxl/D6uAnj3h859PuqsffXTyiPpPfAIeeijvZGZWVFkX\nqQHAipLllem69pwB3JnO7wO8KmmOpPmSZkvqlW4bChwhqUXS/ZLGVDy5ZWaHHeDcc5NiNWFCMrzS\nEUckg9du2JB3OjMrksJ0nJA0AZgOtF63agRGA1dExGjgLeDCkm19ImIccAFwfZXjWgX06gXnnw9P\nPZU8CuQ//zO53+rb34bXXss7nZkVQdYPPXweGFSyPDBdt5m0s8RsYHJErE5XrwRWRETryaAb2VTA\nVgI3A0TEPEkbJe0eEVv80zZz5sy/zjc1NdHU1NSV72MZ6NkTTjopmVpa4Dvfga9/HY49Fk4/HY46\nCnr0yDulmXVGc3Mzzc3NFTtepjfzSuoBPAFMAl4E5gJTI2JxyT6DgF8D0yKipc37fwOcGRFLJV0C\n9I6IGZLOAt4fEZdIGgr8KiK2eLC5b+atXatXw3XXwZw58OKL8KlPJcMujR4N2ubbAs2s2gr/qA5J\nk0l66TUAV0fErLTIRETMlnQVcAKwHBCwLiLGpu8dCXwP6EnSC3B6RKyR1BP4PnAI8A7wpYj4TZnP\ndpGqA4sWwbXXwvXXJ/dZnXQSfPKTLlhmtaDwRSpPLlL1JSLpxn799XDjjfDWW/CRjyQjsB91FOy0\nU94JzawtF6kOuEjVt6VL4fbbk+kPf4AxY+DII6GpCcaNS3oRmlm+XKQ64CLVfaxdmwy/1NycTI8+\nuqloHXlkMr/LLnmnNOt+XKQ64CLVfa1dC//3f0nB+u1vYeHC5FlXY8bAYYcl0yGHJN3gzSw7LlId\ncJGyVuvXw+OPJ4+5f+ih5PXxx2HIkGTw2+HD4aCDktchQ9zl3axSXKQ64CJlHXnnHVi8ODk1+Nhj\nm15fegmGDYOhQ5Obi/fbLxkod7/9oH9/9yg02xouUh1wkbJt8cYbSfFatiwZuql0euutpKX1gQ/A\noEHJa+n8gAHJY0rMLOEi1QEXKau0NWvg6afhuedgxYpkKp1/8UXYfffkacT9+2857bXXpvk+fdwq\ns/rnItUBFymrtg0bkkL1/POwalVy6nDVqi2nl16CN99MClXfvu897bZb0jtx5503vfq6mdUCF6kO\nuEhZkb37bjL805/+tGlqu1y6fu3aZHr99eSU5A47bF602r7uvDP07p1MvXptmm+73Ha+Vy8XQKsc\nF6kOuEhZvYpIWmKlhav0tXX+L39JrqO1vrZOHS3/5S/JdbXtt99yaru+3H7trdtuO2hsTKaePSs7\n3/raUJjnOlirrhaprEdBN7MMSMkwUDvtBO97X2WPHQFvv530fmw7vftux8vl1q1dm7yuW5fcCtD6\nurXzndkubV7EevRIClePHtWdb29dQ0OSUdo0/16vldonq+O1/j62N3WVi5SZbUbadNqv1mzYsHnx\n2rgxWbdhQz7zbddFbHotnW/vdcOGzu/bmX22Zt/32mfjxuRn3rpve1NX+XSfmZllpqun+3wG18zM\nCstFyszMCstFyszMCstFyszMCstFyszMCstFyszMCstFyszMCstFyszMCstFyszMCstFyszMCstF\nyszMCstFyszMCstFyszMCstFyszMCstFyszMCstFyszMCstFyszMCivzIiVpsqQlkpZKmlFm+6mS\nFqbTA5IOLtm2q6QbJC2W9Jikw9u890uSNkrqm/X3MDOz6su0SElqAC4HjgWGA1MlfbDNbk8DR0TE\nSOBfgdkl2y4D7oiIA4CRwOKSYw8EjgaWZ/cNqqu5uTnvCFul1vJC7WV23mzVWl6ozcxdkXVLaiyw\n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\nRK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -473,7 +473,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 26, "metadata": { "collapsed": false }, @@ -511,7 +511,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 27, "metadata": { "collapsed": false }, @@ -532,9 +532,9 @@ "\n", "
\n", "\n", - "*fit(X, y, init_weights=True)*\n", + "*fit(X, y, init_params=True)*\n", "\n", - "Learn weight coefficients from training data.\n", + "Learn model from training data.\n", "\n", "**Parameters**\n", "\n", @@ -547,9 +547,11 @@ "\n", " Target values.\n", "\n", - "- `init_weights` : bool (default: True)\n", + "- `init_params` : bool (default: True)\n", "\n", - " Reinitialize weights\n", + " Re-initializes model parametersprior to fitting.\n", + " Set False to continue training with weights from\n", + " a previous model fitting.\n", "\n", "**Returns**\n", "\n", diff --git a/docs/sources/user_guide/tf_regressor/TfLinearRegression_files/TfLinearRegression_17_2.png b/docs/sources/user_guide/tf_regressor/TfLinearRegression_files/TfLinearRegression_17_2.png index 2a72fb4c0..f8001f25d 100644 Binary files a/docs/sources/user_guide/tf_regressor/TfLinearRegression_files/TfLinearRegression_17_2.png and b/docs/sources/user_guide/tf_regressor/TfLinearRegression_files/TfLinearRegression_17_2.png differ diff --git a/mlxtend/__init__.py b/mlxtend/__init__.py index 2739c1b81..b6b9504a4 100644 --- a/mlxtend/__init__.py +++ b/mlxtend/__init__.py @@ -4,4 +4,4 @@ # # License: BSD 3 clause -__version__ = '0.4.1dev' +__version__ = '0.4.1' diff --git a/mlxtend/_base/__init__.py b/mlxtend/_base/__init__.py new file mode 100644 index 000000000..bce7b0e94 --- /dev/null +++ b/mlxtend/_base/__init__.py @@ -0,0 +1,19 @@ +# Sebastian Raschka 2014-2016 +# mlxtend Machine Learning Library Extensions +# Author: Sebastian Raschka +# +# License: BSD 3 clause + +from ._base_estimator import _BaseEstimator +from ._base_supervised_estimator import _BaseSupervisedEstimator +from ._base_unsupervised_estimator import _BaseUnsupervisedEstimator +from ._base_classifier import _BaseClassifier +from ._base_multiclass import _BaseMultiClass +from ._base_multilayer import _BaseMultiLayer +from ._base_regressor import _BaseRegressor +from ._base_cluster import _BaseCluster + +__all__ = ["_BaseEstimator", + "_BaseSupervisedEstimator", "_BaseUnsupervisedEstimator", + "_BaseClassifier", "_BaseMultiClass", "_BaseMultiLayer", + "_BaseRegressor", "_BaseCluster"] diff --git a/mlxtend/_base/_base_classifier.py b/mlxtend/_base/_base_classifier.py new file mode 100644 index 000000000..1cedf29e8 --- /dev/null +++ b/mlxtend/_base/_base_classifier.py @@ -0,0 +1,60 @@ +# Sebastian Raschka 2014-2016 +# mlxtend Machine Learning Library Extensions +# +# Base Clusteer (Clutering Parent Class) +# Author: Sebastian Raschka +# +# License: BSD 3 clause + +import numpy as np +from ._base_supervised_estimator import _BaseSupervisedEstimator + + +class _BaseClassifier(_BaseSupervisedEstimator): + + """Parent Class Classifier + + A base class that is implemented by classifiers + + """ + def __init__(self, print_progress=0, random_seed=0): + super(_BaseClassifier, self).__init__( + print_progress=print_progress, + random_seed=random_seed) + self._binary_classifier = False + + def _check_target_array(self, y, allowed=None): + if not np.issubdtype(y[0], int): + raise AttributeError('y must be an integer array.\nFound %s' + % y.dtype) + found_labels = np.unique(y) + if (found_labels < 0).any(): + raise AttributeError('y array must not contain negative labels.' + '\nFound %s' % found_labels) + if allowed is not None: + found_labels = tuple(found_labels) + if found_labels not in allowed: + raise AttributeError('Labels not in %s.\nFound %s' + % (allowed, found_labels)) + + def score(self, X, y): + """ Compute the prediction accuracy + + Parameters + ---------- + X : {array-like, sparse matrix}, shape = [n_samples, n_features] + Training vectors, where n_samples is the number of samples and + n_features is the number of features. + y : array-like, shape = [n_samples] + Target values (true class labels). + + Returns + --------- + acc : float + The prediction accuracy as a float + between 0.0 and 1.0 (perfect score). + + """ + y_pred = self.predict(X) + acc = np.sum(y == y_pred, axis=0) / float(X.shape[0]) + return acc diff --git a/mlxtend/_base/_base_cluster.py b/mlxtend/_base/_base_cluster.py new file mode 100644 index 000000000..747b46064 --- /dev/null +++ b/mlxtend/_base/_base_cluster.py @@ -0,0 +1,22 @@ +# Sebastian Raschka 2014-2016 +# mlxtend Machine Learning Library Extensions +# +# Base Clusteer (Clutering Parent Class) +# Author: Sebastian Raschka +# +# License: BSD 3 clause + +from ._base_unsupervised_estimator import _BaseUnsupervisedEstimator + + +class _BaseCluster(_BaseUnsupervisedEstimator): + + """Parent Class Unsupervised Estimator + + A base class that is implemented by clustering estimators + + """ + def __init__(self, print_progress=0, random_seed=0): + super(_BaseCluster, self).__init__( + print_progress=print_progress, + random_seed=random_seed) diff --git a/mlxtend/tf_regressor/tf_base.py b/mlxtend/_base/_base_estimator.py similarity index 53% rename from mlxtend/tf_regressor/tf_base.py rename to mlxtend/_base/_base_estimator.py index efd173306..fe8c83e8a 100644 --- a/mlxtend/tf_regressor/tf_base.py +++ b/mlxtend/_base/_base_estimator.py @@ -1,7 +1,7 @@ # Sebastian Raschka 2014-2016 # mlxtend Machine Learning Library Extensions # -# Base Regressor (Regressor Parent Class) +# Base Clusteer (Clutering Parent Class) # Author: Sebastian Raschka # # License: BSD 3 clause @@ -11,21 +11,29 @@ from time import time -class _TfBaseRegressor(object): +class _BaseEstimator(object): - """Parent Class Base Regressor + """Parent Class Estimator A base class that is implemented by - regressor child classes. + classifiers, regressors, and clustering estimators. """ - def __init__(self, print_progress=0, random_seed=None): + def __init__(self, print_progress=0, + random_seed=None): self.print_progress = print_progress self.random_seed = random_seed + if self.random_seed is not None: + np.random.seed(self.random_seed) self._is_fitted = False + self._allowed_labels = None + + def _fit(self, X, y=None, init_params=True): + # Implemented in child class + pass - def fit(self, X, y, init_weights=True): - """Learn weight coefficients from training data. + def fit(self, X, y=None, init_params=True): + """Learn model from training data. Parameters ---------- @@ -34,8 +42,10 @@ def fit(self, X, y, init_weights=True): n_features is the number of features. y : array-like, shape = [n_samples] Target values. - init_weights : bool (default: True) - Reinitialize weights + init_params : bool (default: True) + Re-initializes model parametersprior to fitting. + Set False to continue training with weights from + a previous model fitting. Returns ------- @@ -43,21 +53,17 @@ def fit(self, X, y, init_weights=True): """ self._is_fitted = False - if not (init_weights is None or isinstance(init_weights, bool)): - raise AttributeError("init_weights must be True or False") self._check_arrays(X=X, y=y) if self.random_seed is not None: np.random.seed(self.random_seed) - self._fit(X=X, y=y, init_weights=init_weights) + if init_params: + self._init_params + self._fit(X=X, y=y) self._is_fitted = True return self - def _fit(self, X, y, init_weights=True): - # Implemented in child class - pass - def predict(self, X): - """Predict class labels of X. + """Predict targets from X. Parameters ---------- @@ -67,11 +73,11 @@ def predict(self, X): Returns ---------- - class_labels : array-like, shape = [n_samples] - Predicted class labels. + target_values : array-like, shape = [n_samples] + Predicted target values. """ - self._check_arrays(X) + self._check_arrays(X=X) if not self._is_fitted: raise AttributeError('Model is not fitted, yet.') return self._predict(X) @@ -80,29 +86,32 @@ def _predict(self, X): # Implemented in child class pass - def _shuffle(self, arrays): + def _shuffle_arrays(self, arrays): """Shuffle arrays in unison.""" r = np.random.permutation(len(arrays[0])) return [ary[r] for ary in arrays] - def _print_progress(self, epoch, cost=None, time_interval=10): + def _print_progress(self, iteration, n_iter, + cost=None, time_interval=10): if self.print_progress > 0: - s = '\rEpoch: %d/%d' % (epoch, self.epochs) + s = '\rIteration: %d/%d' % (iteration, n_iter) if cost: s += ' | Cost %.2f' % cost if self.print_progress > 1: if not hasattr(self, 'ela_str_'): self.ela_str_ = '00:00:00' - if not epoch % time_interval: + if not iteration % time_interval: ela_sec = time() - self.init_time_ self.ela_str_ = self._to_hhmmss(ela_sec) s += ' | Elapsed: %s' % self.ela_str_ if self.print_progress > 2: if not hasattr(self, 'eta_str_'): self.eta_str_ = '00:00:00' - if not epoch % time_interval: - eta_sec = ((ela_sec / float(epoch)) * - self.epochs - ela_sec) + if not iteration % time_interval: + eta_sec = ((ela_sec / float(iteration)) * + n_iter - ela_sec) + if eta_sec < 0.0: + eta_sec = 0.0 self.eta_str_ = self._to_hhmmss(eta_sec) s += ' | ETA: %s' % self.eta_str_ stderr.write(s) @@ -122,12 +131,39 @@ def _check_arrays(self, X, y=None): if y is None: return except(AttributeError): - pass - else: - if not isinstance(y, np.ndarray): - raise ValueError('y must be a numpy array.') if not len(y.shape) == 1: - raise ValueError('y must be a 1D numpy array.') + raise ValueError('y must be a 1D array.') if not len(y) == X.shape[0]: raise ValueError('X and y must contain the same number of samples') + + def _init_params(self, weights_shape, bias_shape=(1,), dtype='float64', + scale=0.01, random_seed=None): + """Initialize weight coefficients.""" + if random_seed: + np.random.seed(random_seed) + w = np.random.normal(loc=0.0, scale=scale, size=weights_shape) + b = np.zeros(shape=bias_shape) + return b.astype(dtype), w.astype(dtype) + + def _yield_minibatches_idx(self, n_batches, data_ary, shuffle=True): + indices = np.arange(data_ary.shape[0]) + + if shuffle: + indices = np.random.permutation(indices) + if n_batches > 1: + remainder = data_ary.shape[0] % n_batches + + if remainder: + minis = np.array_split(indices[:-remainder], n_batches) + minis[-1] = np.concatenate((minis[-1], + indices[-remainder:]), + axis=0) + else: + minis = np.array_split(indices, n_batches) + + else: + minis = (indices,) + + for idx_batch in minis: + yield idx_batch diff --git a/mlxtend/_base/_base_multiclass.py b/mlxtend/_base/_base_multiclass.py new file mode 100644 index 000000000..07a69ae63 --- /dev/null +++ b/mlxtend/_base/_base_multiclass.py @@ -0,0 +1,40 @@ +# Sebastian Raschka 2014-2016 +# mlxtend Machine Learning Library Extensions +# +# Base Clusteer (Clutering Parent Class) +# Author: Sebastian Raschka +# +# License: BSD 3 clause + +import numpy as np + + +class _BaseMultiClass(object): + """Add-on Parent Class for Multi-class classifier""" + + def __init__(self): + pass + + def _one_hot(self, y, n_labels, dtype): + """Returns a matrix where each sample in y is represented + as a row, and each column represents the class label in + the one-hot encoding scheme. + + Example: + + y = np.array([0, 1, 2, 3, 4, 2]) + mc = _BaseMultiClass() + mc._one_hot(y=y, n_labels=5, dtype='float') + + np.array([[1., 0., 0., 0., 0.], + [0., 1., 0., 0., 0.], + [0., 0., 1., 0., 0.], + [0., 0., 0., 1., 0.], + [0., 0., 0., 0., 1.], + [0., 0., 1., 0., 0.]]) + + """ + mat = np.zeros((len(y), n_labels)) + for i, val in enumerate(y): + mat[i, val] = 1 + return mat.astype(dtype) diff --git a/mlxtend/_base/_base_multilayer.py b/mlxtend/_base/_base_multilayer.py new file mode 100644 index 000000000..e32749577 --- /dev/null +++ b/mlxtend/_base/_base_multilayer.py @@ -0,0 +1,62 @@ +# Sebastian Raschka 2014-2016 +# mlxtend Machine Learning Library Extensions +# +# Base Clusteer (Clutering Parent Class) +# Author: Sebastian Raschka +# +# License: BSD 3 clause + +import numpy as np + + +class _BaseMultiLayer(object): + """Add-on Parent Class for Multi-layer classifiers""" + + def __init__(self): + pass + + def _layermapping(self, n_features, n_classes, hidden_layers): + """Creates a dictionaries of layer dimensions for weights and biases. + + For example, given + `n_features=10`, `n_classes=10`, and `hidden_layers=[8, 7, 6]`: + + biases = + {1: [[8], 'n_hidden_1'], + 2: [[7], 'n_hidden_2'], + 3: [[6], 'n_hidden_3'], + 'out': [[10], 'n_classes'] + } + + weights = + {1: [[10, 8], 'n_features, n_hidden_1'], + 2: [[8, 7], 'n_hidden_1, n_hidden_2'], + 3: [[7, 6], 'n_hidden_2, n_hidden_3'], + 'out': [[6, 10], 'n_hidden_3, n_classes'] + } + + """ + weights = {1: [[n_features, hidden_layers[0]], + 'n_features, n_hidden_1'], + 'out': [[hidden_layers[-1], n_classes], + 'n_hidden_%d, n_classes' % len(hidden_layers)]} + biases = {1: [[hidden_layers[0]], 'n_hidden_1'], + 'out': [[n_classes], 'n_classes']} + + if len(hidden_layers) > 1: + for i, h in enumerate(hidden_layers[1:]): + layer = i + 2 + weights[layer] = [[weights[layer - 1][0][1], h], + 'n_hidden_%d, n_hidden_%d' % (layer - + 1, layer)] + biases[layer] = [[h], 'n_hidden_%d' % layer] + return weights, biases + + def _init_params_from_layermapping(self, weight_maps, bias_maps): + weights, biases = {}, {} + for i, k in enumerate(zip(weight_maps, bias_maps)): + weights[k[0]] = np.random.normal(loc=0.0, + scale=0.01, + size=weight_maps[k[0]][0]) + biases[k[1]] = np.zeros(shape=bias_maps[k[1]][0]) + return weights, biases diff --git a/mlxtend/_base/_base_regressor.py b/mlxtend/_base/_base_regressor.py new file mode 100644 index 000000000..836399879 --- /dev/null +++ b/mlxtend/_base/_base_regressor.py @@ -0,0 +1,28 @@ +# Sebastian Raschka 2014-2016 +# mlxtend Machine Learning Library Extensions +# +# Base Clusteer (Clutering Parent Class) +# Author: Sebastian Raschka +# +# License: BSD 3 clause + +import numpy as np +from ._base_supervised_estimator import _BaseSupervisedEstimator + + +class _BaseRegressor(_BaseSupervisedEstimator): + + """Parent Class Classifier + + A base class that is implemented by regressors + + """ + def __init__(self, print_progress=0, random_seed=0): + super(_BaseRegressor, self).__init__( + print_progress=print_progress, + random_seed=random_seed) + + def _check_target_array(self, y, allowed=None): + if not np.issubdtype(y[0], float): + raise AttributeError('y must be a float array.\nFound %s' + % y.dtype) diff --git a/mlxtend/_base/_base_supervised_estimator.py b/mlxtend/_base/_base_supervised_estimator.py new file mode 100644 index 000000000..9857cdebb --- /dev/null +++ b/mlxtend/_base/_base_supervised_estimator.py @@ -0,0 +1,57 @@ +# Sebastian Raschka 2014-2016 +# mlxtend Machine Learning Library Extensions +# +# Base Clusteer (Clutering Parent Class) +# Author: Sebastian Raschka +# +# License: BSD 3 clause + +import numpy as np +from ._base_estimator import _BaseEstimator + + +class _BaseSupervisedEstimator(_BaseEstimator): + + """Parent Class Supervised Estimator + + A base class that is implemented by + classifiers and regressors + + """ + def __init__(self, print_progress=0, random_seed=0): + super(_BaseSupervisedEstimator, self).__init__( + print_progress=print_progress, + random_seed=random_seed) + + def fit(self, X, y, init_params=True): + """Learn model from training data. + + Parameters + ---------- + X : {array-like, sparse matrix}, shape = [n_samples, n_features] + Training vectors, where n_samples is the number of samples and + n_features is the number of features. + y : array-like, shape = [n_samples] + Target values. + init_params : bool (default: True) + Re-initializes model parametersprior to fitting. + Set False to continue training with weights from + a previous model fitting. + + Returns + ------- + self : object + + """ + self._is_fitted = False + self._check_arrays(X=X, y=y) + self._check_target_array(y) + if self.random_seed is not None: + np.random.seed(self.random_seed) + self._fit(X=X, y=y, init_params=init_params) + self._is_fitted = True + return self + + def _check_target_array(self, y): + # implemented by child class + pass diff --git a/mlxtend/_base/_base_unsupervised_estimator.py b/mlxtend/_base/_base_unsupervised_estimator.py new file mode 100644 index 000000000..935ff3c8c --- /dev/null +++ b/mlxtend/_base/_base_unsupervised_estimator.py @@ -0,0 +1,50 @@ +# Sebastian Raschka 2014-2016 +# mlxtend Machine Learning Library Extensions +# +# Base Clusteer (Clutering Parent Class) +# Author: Sebastian Raschka +# +# License: BSD 3 clause + +import numpy as np +from ._base_estimator import _BaseEstimator + + +class _BaseUnsupervisedEstimator(_BaseEstimator): + + """Parent Class Supervised Estimator + + A base class that is implemented by + classifiers and regressors + + """ + def __init__(self, print_progress=0, random_seed=0): + super(_BaseUnsupervisedEstimator, self).__init__( + print_progress=print_progress, + random_seed=random_seed) + + def fit(self, X, init_params=True): + """Learn model from training data. + + Parameters + ---------- + X : {array-like, sparse matrix}, shape = [n_samples, n_features] + Training vectors, where n_samples is the number of samples and + n_features is the number of features. + init_params : bool (default: True) + Re-initializes model parametersprior to fitting. + Set False to continue training with weights from + a previous model fitting. + + Returns + ------- + self : object + + """ + self._is_fitted = False + self._check_arrays(X=X) + if self.random_seed is not None: + np.random.seed(self.random_seed) + self._fit(X=X, init_params=init_params) + self._is_fitted = True + return self diff --git a/mlxtend/_base/tests/test_base_classifier.py b/mlxtend/_base/tests/test_base_classifier.py new file mode 100644 index 000000000..602cbfc06 --- /dev/null +++ b/mlxtend/_base/tests/test_base_classifier.py @@ -0,0 +1,55 @@ +# Sebastian Raschka 2014-2016 +# mlxtend Machine Learning Library Extensions +# Author: Sebastian Raschka +# +# License: BSD 3 clause + +from mlxtend._base import _BaseClassifier +import numpy as np +from mlxtend.utils import assert_raises + + +def test_init(): + cl = _BaseClassifier(print_progress=0, random_seed=1) + assert hasattr(cl, 'print_progress') + assert hasattr(cl, 'random_seed') + + +def test_check_labels_ok_1(): + y = np.array([1, 1, 0]) + cl = _BaseClassifier(print_progress=0, random_seed=1) + cl._check_target_array(y=y, allowed={(0, 1)}) + + +def test_check_labels_ok_2(): + y = np.array([1, 2, 2]) + cl = _BaseClassifier(print_progress=0, random_seed=1) + cl._check_target_array(y=y, allowed={(1, 2), (0, 1)}) + + +def test_check_labels_not_ok_1(): + y = np.array([1, 3, 2]) + cl = _BaseClassifier(print_progress=0, random_seed=1) + assert_raises(AttributeError, + 'Labels not in {(1, 2), (0, 1)}.\nFound (1, 2, 3)', + cl._check_target_array, + y, + {(0, 1), (1, 2)}) + + +def test_check_labels_interger_notok(): + y = np.array([1., 2.], dtype=np.float64) + cl = _BaseClassifier(print_progress=0, random_seed=1) + assert_raises(AttributeError, + 'y must be an integer array.\nFound float64', + cl._check_target_array, + y) + + +def test_check_labels_positive_notok(): + y = np.array([1, 1, -1]) + cl = _BaseClassifier(print_progress=0, random_seed=1) + assert_raises(AttributeError, + 'y array must not contain negative labels.\nFound [-1 1]', + cl._check_target_array, + y) diff --git a/mlxtend/_base/tests/test_base_cluster.py b/mlxtend/_base/tests/test_base_cluster.py new file mode 100644 index 000000000..890b0b96e --- /dev/null +++ b/mlxtend/_base/tests/test_base_cluster.py @@ -0,0 +1,13 @@ +# Sebastian Raschka 2014-2016 +# mlxtend Machine Learning Library Extensions +# Author: Sebastian Raschka +# +# License: BSD 3 clause + +from mlxtend._base import _BaseCluster + + +def test_init(): + cl = _BaseCluster(print_progress=0, random_seed=1) + assert hasattr(cl, 'print_progress') + assert hasattr(cl, 'random_seed') diff --git a/mlxtend/_base/tests/test_base_estimator.py b/mlxtend/_base/tests/test_base_estimator.py new file mode 100644 index 000000000..5bcb37547 --- /dev/null +++ b/mlxtend/_base/tests/test_base_estimator.py @@ -0,0 +1,127 @@ +# Sebastian Raschka 2014-2016 +# mlxtend Machine Learning Library Extensions +# Author: Sebastian Raschka +# +# License: BSD 3 clause + +from mlxtend._base import _BaseEstimator +import numpy as np +from mlxtend.utils import assert_raises + + +def test_init(): + est = _BaseEstimator(print_progress=0, random_seed=1) + assert hasattr(est, 'print_progress') + assert hasattr(est, 'random_seed') + + +def test_check_array_1(): + X = np.array([1, 2, 3]) + est = _BaseEstimator(print_progress=0, random_seed=1) + assert_raises(ValueError, + 'X must be a 2D array. Try X[:, numpy.newaxis]', + est._check_arrays, + X) + + +def test_check_array_2(): + X = list([[1], [2], [3]]) + est = _BaseEstimator(print_progress=0, random_seed=1) + + assert_raises(ValueError, + 'X must be a numpy array', + est._check_arrays, + X) + + +def test_check_array_3(): + X = np.array([[1], [2], [3]]) + est = _BaseEstimator(print_progress=0, random_seed=1) + est._check_arrays(X) + + +def test_fit(): + X = np.array([[1], [2], [3]]) + est = _BaseEstimator(print_progress=0, random_seed=1) + est._fit(X) + + +def test_predict_1(): + X = np.array([[1], [2], [3]]) + est = _BaseEstimator(print_progress=0, random_seed=1) + + assert_raises(AttributeError, + 'Model is not fitted, yet.', + est.predict, + X) + + +def test_predict_2(): + X = np.array([[1], [2], [3]]) + est = _BaseEstimator(print_progress=0, random_seed=1) + + est.fit(X) + est.predict(X) + + +def test_shuffle(): + X = np.array([[1], [2], [3]]) + y = np.array([1, 2, 3]) + est = _BaseEstimator(print_progress=0, random_seed=1) + X_sh, y_sh = est._shuffle_arrays(arrays=[X, np.array(y)]) + np.testing.assert_equal(X_sh, np.array([[1], [3], [2]])) + np.testing.assert_equal(y_sh, np.array([1, 3, 2])) + + +def test_init_params(): + est = _BaseEstimator(print_progress=0, random_seed=1) + b, w = est._init_params(weights_shape=(3, 3), + bias_shape=(1,), + random_seed=0) + assert b == np.array([0.0]), b + + expect_w = np.array([[0.016, -0.006, -0.005], + [-0.011, 0.009, -0.023], + [0.017, -0.008, 0.003]]) + np.testing.assert_almost_equal(w, expect_w, decimal=3) + + +def test_minibatches_divisible(): + ary = np.array([1, 2, 3, 4, 5, 6, 7, 8]) + est = _BaseEstimator(print_progress=0, random_seed=1) + gen_arys = est._yield_minibatches_idx(n_batches=2, data_ary=ary) + arys = list(gen_arys) + + assert (arys[0] == np.array([7, 2, 1, 6])).all() + assert (arys[1] == np.array([0, 4, 3, 5])).all() + + +def test_minibatches_remainder(): + ary = np.array([1, 2, 3, 4, 5, 6, 7]) + est = _BaseEstimator(print_progress=0, random_seed=1) + gen_arys = est._yield_minibatches_idx(n_batches=2, data_ary=ary) + arys = list(gen_arys) + + assert len(arys) == 2 + assert (arys[0] == np.array([6, 2, 1])).all() + assert (arys[1] == np.array([0, 4, 3, 5])).all() + + +def test_minibatch_1sample(): + ary = np.array([1, 2, 3, 4, 5, 6, 7]) + est = _BaseEstimator(print_progress=0, random_seed=1) + gen_arys = est._yield_minibatches_idx(n_batches=7, data_ary=ary) + arys = list(gen_arys) + + assert len(arys) == 7 + assert arys[0] == np.array([6]) + + +def test_minibatch_allsample(): + ary = np.array([1, 2, 3, 4, 5, 6, 7]) + est = _BaseEstimator(print_progress=0, random_seed=1) + gen_arys = est._yield_minibatches_idx(n_batches=1, + data_ary=ary, + shuffle=False) + arys = list(gen_arys)[0] + assert (arys == np.array([0, 1, 2, 3, 4, 5, 6])).all() diff --git a/mlxtend/_base/tests/test_base_multiclass.py b/mlxtend/_base/tests/test_base_multiclass.py new file mode 100644 index 000000000..6b0745745 --- /dev/null +++ b/mlxtend/_base/tests/test_base_multiclass.py @@ -0,0 +1,39 @@ +# Sebastian Raschka 2014-2016 +# mlxtend Machine Learning Library Extensions +# Author: Sebastian Raschka +# +# License: BSD 3 clause + +from mlxtend._base import _BaseMultiClass +import numpy as np + + +def test_default(): + y = np.array([0, 1, 2, 3, 4, 2]) + mc = _BaseMultiClass() + expect = np.array([[1., 0., 0., 0., 0.], + [0., 1., 0., 0., 0.], + [0., 0., 1., 0., 0.], + [0., 0., 0., 1., 0.], + [0., 0., 0., 0., 1.], + [0., 0., 1., 0., 0.]], dtype='float') + out = mc._one_hot(y=y, n_labels=5, dtype='float') + np.testing.assert_array_equal(expect, out) + + +def test_oneclass(): + y = np.array([0, 0, 0]) + mc = _BaseMultiClass() + out = mc._one_hot(y=y, n_labels=1, dtype='float') + expect = np.array([[1.], [1.], [1.]]) + np.testing.assert_array_equal(expect, out) + + +def test_morelabels(): + y = np.array([0, 0, 1]) + mc = _BaseMultiClass() + out = mc._one_hot(y=y, n_labels=4, dtype='float') + expect = np.array([[1., 0., 0., 0.], + [1., 0., 0., 0.], + [0., 1., 0., 0.]]) + np.testing.assert_array_equal(expect, out) diff --git a/mlxtend/_base/tests/test_base_multilayer.py b/mlxtend/_base/tests/test_base_multilayer.py new file mode 100644 index 000000000..c0383741a --- /dev/null +++ b/mlxtend/_base/tests/test_base_multilayer.py @@ -0,0 +1,65 @@ +# Sebastian Raschka 2014-2016 +# mlxtend Machine Learning Library Extensions +# Author: Sebastian Raschka +# +# License: BSD 3 clause + +from mlxtend._base import _BaseMultiLayer + + +def test_layermapping(): + mlp = _BaseMultiLayer() + w, b = mlp._layermapping(n_features=10, + n_classes=11, + hidden_layers=[8, 7, 6]) + + expect_b = {1: [[8], 'n_hidden_1'], + 2: [[7], 'n_hidden_2'], + 3: [[6], 'n_hidden_3'], + 'out': [[11], 'n_classes']} + + expect_w = {1: [[10, 8], 'n_features, n_hidden_1'], + 2: [[8, 7], 'n_hidden_1, n_hidden_2'], + 3: [[7, 6], 'n_hidden_2, n_hidden_3'], + 'out': [[6, 11], 'n_hidden_3, n_classes']} + + assert expect_b == b, b + assert expect_w == w, w + + +def test_init_from_layermapping(): + mlp = _BaseMultiLayer() + wm, bm = mlp._layermapping(n_features=5, + n_classes=4, + hidden_layers=[3, 2]) + w, b = mlp._init_params_from_layermapping(weight_maps=wm, bias_maps=bm) + + """ + expect_w = {1: np.array([[0.016, -0.006, -0.005], + [-0.011, 0.009, -0.023], + [0.017, -0.008, 0.003], + [-0.002, 0.015, -0.021], + [-0.003, -0.004, 0.011]]), + 2: np.array([[-0.011, -0.002], + [-0.009, 0.000], + [0.006, -0.011]]), + 'out': np.array([[0.011, 0.009, 0.005, 0.009], + [-0.007, -0.001, -0.009, -0.003]])} + + expect_b = {1: np.array([0., 0., 0.]), + 2: np.array([0., 0.]), + 'out': np.array([0., 0., 0., 0.])} + """ + + assert len(w.keys()) == 3 + assert len(b.keys()) == 3 + assert set(w.keys()) == set([1, 2, 'out']) + assert set(b.keys()) == set([1, 2, 'out']) + + assert w[1].shape == (5, 3) + assert w[2].shape == (3, 2) + assert w['out'].shape == (2, 4) + + assert b[1].shape == (3,) + assert b[2].shape == (2,) + assert b['out'].shape == (4,) diff --git a/mlxtend/_base/tests/test_base_regressor.py b/mlxtend/_base/tests/test_base_regressor.py new file mode 100644 index 000000000..5fedb739c --- /dev/null +++ b/mlxtend/_base/tests/test_base_regressor.py @@ -0,0 +1,30 @@ +# Sebastian Raschka 2014-2016 +# mlxtend Machine Learning Library Extensions +# Author: Sebastian Raschka +# +# License: BSD 3 clause + +from mlxtend._base import _BaseRegressor +import numpy as np +from mlxtend.utils import assert_raises + + +def test_init(): + reg = _BaseRegressor(print_progress=0, random_seed=1) + assert hasattr(reg, 'print_progress') + assert hasattr(reg, 'random_seed') + + +def test_float_ok(): + y = np.array([1., 2.]) + reg = _BaseRegressor(print_progress=0, random_seed=1) + reg._check_target_array(y=y) + + +def test_float_fail(): + y = np.array([1, 2], dtype=np.int64) + reg = _BaseRegressor(print_progress=0, random_seed=1) + assert_raises(AttributeError, + 'y must be a float array.\nFound int64', + reg._check_target_array, + y) diff --git a/mlxtend/_base/tests/test_base_supervised_estimator.py b/mlxtend/_base/tests/test_base_supervised_estimator.py new file mode 100644 index 000000000..f56206cf8 --- /dev/null +++ b/mlxtend/_base/tests/test_base_supervised_estimator.py @@ -0,0 +1,37 @@ +# Sebastian Raschka 2014-2016 +# mlxtend Machine Learning Library Extensions +# Author: Sebastian Raschka +# +# License: BSD 3 clause + +from mlxtend._base import _BaseSupervisedEstimator +import numpy as np +from mlxtend.utils import assert_raises + + +def test_init(): + est = _BaseSupervisedEstimator(print_progress=0, random_seed=1) + assert hasattr(est, 'print_progress') + assert hasattr(est, 'random_seed') + + +def test_fit_1(): + X = np.array([[1], [2], [3]]) + est = _BaseSupervisedEstimator(print_progress=0, random_seed=1) + assert_raises(TypeError, + "fit() missing 1 required positional argument: 'y'", + est.fit, + X) + + +def test_fit_2(): + X = np.array([[1], [2], [3]]) + y = np.array([1, 2, 3]) + est = _BaseSupervisedEstimator(print_progress=0, random_seed=1) + est.fit(X=X, y=y) + + +def test_check_target_array(): + y = np.array([1, 2, 3]) + est = _BaseSupervisedEstimator(print_progress=0, random_seed=1) + est._check_target_array(y) diff --git a/mlxtend/_base/tests/test_base_unsupervised_estimator.py b/mlxtend/_base/tests/test_base_unsupervised_estimator.py new file mode 100644 index 000000000..9ae96ec9f --- /dev/null +++ b/mlxtend/_base/tests/test_base_unsupervised_estimator.py @@ -0,0 +1,20 @@ +# Sebastian Raschka 2014-2016 +# mlxtend Machine Learning Library Extensions +# Author: Sebastian Raschka +# +# License: BSD 3 clause + +from mlxtend._base import _BaseUnsupervisedEstimator +import numpy as np + + +def test_init(): + est = _BaseUnsupervisedEstimator(print_progress=0, random_seed=1) + assert hasattr(est, 'print_progress') + assert hasattr(est, 'random_seed') + + +def test_fit(): + X = np.array([[1], [2], [3]]) + est = _BaseUnsupervisedEstimator(print_progress=0, random_seed=1) + est.fit(X=X) diff --git a/mlxtend/classifier/__init__.py b/mlxtend/classifier/__init__.py index a7eb7ef57..d9cdb5116 100644 --- a/mlxtend/classifier/__init__.py +++ b/mlxtend/classifier/__init__.py @@ -8,11 +8,11 @@ from .adaline import Adaline from .logistic_regression import LogisticRegression from .softmax_regression import SoftmaxRegression -from .neuralnet_mlp import NeuralNetMLP +from .multilayerperceptron import MultiLayerPerceptron from .ensemble_vote import EnsembleVoteClassifier from .stacking_classification import StackingClassifier __all__ = ["Perceptron", "Adaline", "LogisticRegression", "SoftmaxRegression", - "NeuralNetMLP", + "MultiLayerPerceptron", "EnsembleVoteClassifier", "StackingClassifier"] diff --git a/mlxtend/classifier/adaline.py b/mlxtend/classifier/adaline.py index 2f471134c..9b435ef00 100644 --- a/mlxtend/classifier/adaline.py +++ b/mlxtend/classifier/adaline.py @@ -8,32 +8,32 @@ import numpy as np from time import time -from .base import _BaseClassifier +from .._base import _BaseClassifier class Adaline(_BaseClassifier): """ADAptive LInear NEuron classifier. + Note that this implementation of Adaline expects binary class labels + in {0, 1}. + Parameters ------------ eta : float (default: 0.01) solver rate (between 0.0 and 1.0) epochs : int (default: 50) Passes over the training dataset. + Prior to each epoch, the dataset is shuffled + if `minibatches > 1` to prevent cycles in stochastic gradient descent. minibatches : int (default: None) The number of minibatches for gradient-based optimization. If None: Normal Equations (closed-form solution) If 1: Gradient Descent learning - If len(y): Stochastic Gradient Descent learning - If 1 < minibatches < len(y): Minibatch learning + If len(y): Stochastic Gradient Descent (SGD) online learning + If 1 < minibatches < len(y): SGD Minibatch learning random_seed : int (default: None) Set random state for shuffling and initializing the weights. - zero_init_weight : bool (default: False) - If True, weights are initialized to zero instead of small random - numbers following a standard normal distribution with mean=0 and - stddev=1; - ignored if solver='normal equation' print_progress : int (default: 0) Prints progress in fitting to stderr if not solver='normal equation' 0: No output @@ -41,93 +41,62 @@ class Adaline(_BaseClassifier): 2: 1 plus time elapsed 3: 2 plus estimated time until completion - Attributes ----------- - w_ : 1d-array - Weights after fitting. + w_ : 2d-array, shape={n_features, 1} + Model weights after fitting. + b_ : 1d-array, shape={1,} + Bias unit after fitting. cost_ : list Sum of squared errors after each epoch. """ def __init__(self, eta=0.01, epochs=50, minibatches=None, random_seed=None, - zero_init_weight=False, print_progress=0): + print_progress=0): - super(Adaline, self).__init__(print_progress=print_progress) - self.random_seed = random_seed + super(Adaline, self).__init__(print_progress=print_progress, + random_seed=random_seed) self.eta = eta self.minibatches = minibatches self.epochs = epochs - self.zero_init_weight = zero_init_weight - - def fit(self, X, y, init_weights=True): - """Learn weight coefficients from training data. - - Parameters - ---------- - X : {array-like, sparse matrix}, shape = [n_samples, n_features] - Training vectors, where n_samples is the number of samples and - n_features is the number of features. - y : array-like, shape = [n_samples] - Target values. - init_weights : bool (default: True) - Re-initializes weights prior to fitting. Set False to continue - training with weights from a previous fitting. - - Returns - ------- - self : object - - """ - self._check_arrays(X, y) - - # check if {0, 1} or {-1, 1} class labels are used - self.classes_ = np.unique(y) - if not len(self.classes_) == 2 \ - or not self.classes_[0] in (-1, 0) \ - or not self.classes_[1] == 1: - raise ValueError('Only supports binary class' - ' labels {0, 1} or {-1, 1}.') - if self.classes_[0] == -1: - self.thres_ = 0.0 - else: - self.thres_ = 0.5 - - if init_weights: - self.w_ = self._init_weights( - shape=1 + X.shape[1], - zero_init_weight=self.zero_init_weight, - seed=self.random_seed) - self.cost_ = [] + def _fit(self, X, y, init_params=True): + self._check_target_array(y, allowed={(0, 1)}) + y_data = np.where(y == 0, -1., 1.) - # random seed for shuffling - if self.random_seed: - np.random.seed(self.random_seed) + if init_params: + self.b_, self.w_ = self._init_params( + weights_shape=(X.shape[1], 1), + bias_shape=(1,), + random_seed=self.random_seed) + self.cost_ = [] if self.minibatches is None: - self.w_ = self._normal_equation(X, y) + self.b_, self.w_ = self._normal_equation(X, y_data) # Gradient descent or stochastic gradient descent learning else: - n_idx = list(range(y.shape[0])) - # skip shuffling if gradient descent - if self.minibatches > 1: - n_idx = np.random.permutation(n_idx) self.init_time_ = time() for i in range(self.epochs): - minis = np.array_split(n_idx, self.minibatches) - for idx in minis: - y_val = self._activation(X[idx]) - errors = (y[idx] - y_val) - self.w_[1:] += self.eta * X[idx].T.dot(errors) - self.w_[0] += self.eta * errors.sum() - - cost = self._sum_squared_error_cost(y, self._activation(X)) + + for idx in self._yield_minibatches_idx( + n_batches=self.minibatches, + data_ary=y_data, + shuffle=True): + + y_val = self._net_input(X[idx]) + errors = (y_data[idx] - y_val) + self.w_ += (self.eta * + X[idx].T.dot(errors).reshape(self.w_.shape)) + self.b_ += self.eta * errors.sum() + + cost = self._sum_squared_error_cost(y_data, self._net_input(X)) self.cost_.append(cost) if self.print_progress: - self._print_progress(epoch=i + 1, cost=cost) + self._print_progress(iteration=(i + 1), + n_iter=self.epochs, + cost=cost) return self @@ -140,17 +109,13 @@ def _normal_equation(self, X, y): Xb = np.hstack((np.ones((X.shape[0], 1)), X)) w = np.zeros(X.shape[1]) z = np.linalg.inv(np.dot(Xb.T, Xb)) - w = np.dot(z, np.dot(Xb.T, y)) - return w + params = np.dot(z, np.dot(Xb.T, y)) + b, w = np.array([params[0]]), params[1:].reshape(X.shape[1], 1) + return b, w def _net_input(self, X): """Compute the linear net input.""" - return np.dot(X, self.w_[1:]) + self.w_[0] - - def _activation(self, X): - """Compute the linear activation from the net input.""" - return self._net_input(X) + return (np.dot(X, self.w_) + self.b_).flatten() def _predict(self, X): - return np.where(self._net_input(X) >= self.thres_, - self.classes_[1], self.classes_[0]) + return np.where(self._net_input(X) < 0.0, 0, 1) diff --git a/mlxtend/classifier/base.py b/mlxtend/classifier/base.py deleted file mode 100644 index e488b8be1..000000000 --- a/mlxtend/classifier/base.py +++ /dev/null @@ -1,151 +0,0 @@ -# Sebastian Raschka 2014-2016 -# mlxtend Machine Learning Library Extensions -# -# Base Classifier (Classifier Parent Class) -# Author: Sebastian Raschka -# -# License: BSD 3 clause - -import numpy as np -from sys import stderr -from time import time - - -class _BaseClassifier(object): - - """Parent Class Base Classifier - - A base class that is important by - classifier child classes. - - """ - def __init__(self, print_progress=0): - self.print_progress = print_progress - - def fit(self, X, y, init_weights=True): - """Learn weight coefficients from training data. - - Parameters - ---------- - X : {array-like, sparse matrix}, shape = [n_samples, n_features] - Training vectors, where n_samples is the number of samples and - n_features is the number of features. - y : array-like, shape = [n_samples] - Target values. - init_weights : bool (default: None) - Reinitialize weights - - Returns - ------- - self : object - - """ - if not (init_weights is None or isinstance(init_weights, bool)): - raise AttributeError("init_weights must be True, False, or None") - init_weights - self._check_arrays(X=X, y=y) - return self - - def predict(self, X): - """Predict class labels of X. - - Parameters - ---------- - X : {array-like, sparse matrix}, shape = [n_samples, n_features] - Training vectors, where n_samples is the number of samples and - n_features is the number of features. - - Returns - ---------- - class_labels : array-like, shape = [n_samples] - Predicted class labels. - - """ - self._check_arrays(X) - return self._predict(X) - - def _predict(X, y): - # Implemented in child class - pass - - def _shuffle(self, arrays): - """Shuffle arrays in unison.""" - r = np.random.permutation(len(arrays[0])) - return [ary[r] for ary in arrays] - - def _print_progress(self, epoch, cost=None, time_interval=10): - if self.print_progress > 0: - s = '\rEpoch: %d/%d' % (epoch, self.epochs) - if cost: - s += ' | Cost %.2f' % cost - if self.print_progress > 1: - if not hasattr(self, 'ela_str_'): - self.ela_str_ = '00:00:00' - if not epoch % time_interval: - ela_sec = time() - self.init_time_ - self.ela_str_ = self._to_hhmmss(ela_sec) - s += ' | Elapsed: %s' % self.ela_str_ - if self.print_progress > 2: - if not hasattr(self, 'eta_str_'): - self.eta_str_ = '00:00:00' - if not epoch % time_interval: - eta_sec = ((ela_sec / float(epoch)) * - self.epochs - ela_sec) - self.eta_str_ = self._to_hhmmss(eta_sec) - s += ' | ETA: %s' % self.eta_str_ - stderr.write(s) - stderr.flush() - - def _to_hhmmss(self, sec): - m, s = divmod(sec, 60) - h, m = divmod(m, 60) - return "%d:%02d:%02d" % (h, m, s) - - def _check_arrays(self, X, y=None): - if isinstance(X, list): - raise ValueError('X must be a numpy array') - if not len(X.shape) == 2: - raise ValueError('X must be a 2D array. Try X[:,numpy.newaxis]') - try: - if y is None: - return - except(AttributeError): - if not len(y.shape) == 1: - raise ValueError('y must be a 1D array.') - - if not len(y) == X.shape[0]: - raise ValueError('X and y must contain the same number of samples') - - def _init_weights(self, shape, zero_init_weight=False, - coef=0.001, - dtype='float64', seed=None): - """Initialize weight coefficients.""" - if seed: - np.random.seed(seed) - if zero_init_weight: - w = np.zeros(shape) - else: - w = coef * np.random.normal(loc=0.0, scale=1.0, size=shape) - return w.astype(dtype) - - def score(self, X, y): - """ Compute the prediction accuracy - - Parameters - ---------- - X : {array-like, sparse matrix}, shape = [n_samples, n_features] - Training vectors, where n_samples is the number of samples and - n_features is the number of features. - y : array-like, shape = [n_samples] - Target values (true class labels). - - Returns - --------- - acc : float - The prediction accuracy as a float - between 0.0 and 1.0 (perfect score). - - """ - y_pred = self.predict(X) - acc = np.sum(y == y_pred, axis=0) / float(X.shape[0]) - return acc diff --git a/mlxtend/classifier/ensemble_vote.py b/mlxtend/classifier/ensemble_vote.py index 09978b72d..d9c0b741a 100644 --- a/mlxtend/classifier/ensemble_vote.py +++ b/mlxtend/classifier/ensemble_vote.py @@ -19,7 +19,7 @@ class EnsembleVoteClassifier(BaseEstimator, ClassifierMixin, TransformerMixin): - + """Soft Voting/Majority Rule classifier for scikit-learn estimators. Parameters diff --git a/mlxtend/classifier/logistic_regression.py b/mlxtend/classifier/logistic_regression.py index 8e4a9ea4f..e1157fde4 100644 --- a/mlxtend/classifier/logistic_regression.py +++ b/mlxtend/classifier/logistic_regression.py @@ -8,34 +8,34 @@ import numpy as np from time import time -from .base import _BaseClassifier +from .._base import _BaseClassifier class LogisticRegression(_BaseClassifier): """Logistic regression classifier. + Note that this implementation of Logistic Regression + expects binary class labels in {0, 1}. + Parameters ------------ eta : float (default: 0.01) Learning rate (between 0.0 and 1.0) epochs : int (default: 50) Passes over the training dataset. + Prior to each epoch, the dataset is shuffled + if `minibatches > 1` to prevent cycles in stochastic gradient descent. l2_lambda : float Regularization parameter for L2 regularization. No regularization if l2_lambda=0.0. minibatches : int (default: 1) - Divide the training data into *k* minibatches - for accelerated stochastic gradient descent learning. - Gradient Descent Learning if `minibatches` = 1 - Stochastic Gradient Descent learning if `minibatches` = len(y) - Minibatch learning if `minibatches` > 1 + The number of minibatches for gradient-based optimization. + If 1: Gradient Descent learning + If len(y): Stochastic Gradient Descent (SGD) online learning + If 1 < minibatches < len(y): SGD Minibatch learning random_seed : int (default: None) Set random state for shuffling and initializing the weights. - zero_init_weight : bool (default: False) - If True, weights are initialized to zero instead of small random - numbers following a standard normal distribution with mean=0 and - stddev=1. print_progress : int (default: 0) Prints progress in fitting to stderr. 0: No output @@ -45,90 +45,68 @@ class LogisticRegression(_BaseClassifier): Attributes ----------- - w_ : 1d-array - Weights after fitting. + w_ : 2d-array, shape={n_features, 1} + Model weights after fitting. + b_ : 1d-array, shape={1,} + Bias unit after fitting. cost_ : list - List of floats with sum of squared error cost (sgd or gd) for every + List of floats with cross_entropy cost (sgd or gd) for every epoch. """ def __init__(self, eta=0.01, epochs=50, l2_lambda=0.0, minibatches=1, - random_seed=None, zero_init_weight=False, + random_seed=None, print_progress=0): - super(LogisticRegression, self).__init__(print_progress=print_progress) - self.random_seed = random_seed + super(LogisticRegression, self).__init__(print_progress=print_progress, + random_seed=random_seed) self.eta = eta self.epochs = epochs self.l2_lambda = l2_lambda self.minibatches = minibatches - self.zero_init_weight = zero_init_weight - - def fit(self, X, y, init_weights=True): - """Learn weight coefficients from training data. - - Parameters - ---------- - X : {array-like, sparse matrix}, shape = [n_samples, n_features] - Training vectors, where n_samples is the number of samples and - n_features is the number of features. - y : array-like, shape = [n_samples] - Target values. - init_weights : bool (default: True) - (Re)initializes weights to small random floats if True. - - Returns - ------- - self : object - """ - self._check_arrays(X, y) + def _fit(self, X, y, init_params=True): - if (np.unique(y) != np.array([0, 1])).all(): - raise ValueError('Supports only binary class labels 0 and 1') + self._check_target_array(y, allowed={(0, 1)}) - if init_weights: - self.w_ = self._init_weights( - shape=1 + X.shape[1], - zero_init_weight=self.zero_init_weight, - seed=self.random_seed) + if init_params: + self.b_, self.w_ = self._init_params( + weights_shape=(X.shape[1], 1), + bias_shape=(1,), + random_seed=self.random_seed) + self.cost_ = [] - self.m_ = len(self.w_) - self.cost_ = [] - - # random seed for shuffling - if self.random_seed: - np.random.seed(self.random_seed) - - n_idx = list(range(y.shape[0])) self.init_time_ = time() for i in range(self.epochs): - if self.minibatches > 1: - n_idx = np.random.permutation(n_idx) - minis = np.array_split(n_idx, self.minibatches) - for idx in minis: + for idx in self._yield_minibatches_idx( + n_batches=self.minibatches, + data_ary=y, + shuffle=True): + y_val = self._activation(X[idx]) errors = (y[idx] - y_val) - neg_grad = X[idx].T.dot(errors) - l2_reg = self.l2_lambda * self.w_[1:] - self.w_[1:] += self.eta * (neg_grad - l2_reg) - self.w_[0] += self.eta * errors.sum() + neg_grad = X[idx].T.dot(errors).reshape(self.w_.shape) + l2_reg = self.l2_lambda * self.w_ + self.w_ += self.eta * (neg_grad - l2_reg) + self.b_ += self.eta * errors.sum() cost = self._logit_cost(y, self._activation(X)) self.cost_.append(cost) if self.print_progress: - self._print_progress(epoch=i + 1, cost=cost) + self._print_progress(iteration=(i + 1), + n_iter=self.epochs, + cost=cost) return self def _predict(self, X): - # equivalent to np.where(self._activation(X) >= 0.5, 1, 0) - return np.where(self._net_input(X) >= 0.0, 1, 0) + # equivalent to np.where(self._activation(X) < 0.5, 0, 1) + return np.where(self._net_input(X) < 0.0, 0, 1) def _net_input(self, X): """Compute the linear net input.""" - return X.dot(self.w_[1:]) + self.w_[0] + return (X.dot(self.w_) + self.b_).flatten() def _activation(self, X): """ Compute sigmoid activation.""" diff --git a/mlxtend/classifier/multilayerperceptron.py b/mlxtend/classifier/multilayerperceptron.py new file mode 100644 index 000000000..e7c9f96c1 --- /dev/null +++ b/mlxtend/classifier/multilayerperceptron.py @@ -0,0 +1,259 @@ +# Sebastian Raschka 2014-2016 +# mlxtend Machine Learning Library Extensions +# +# Implementation of a Multi-layer Perceptron in Tensorflow +# Author: Sebastian Raschka +# +# License: BSD 3 clause + +import numpy as np +from time import time +from scipy.special import expit +from .._base import _BaseClassifier +from .._base import _BaseMultiClass +from .._base import _BaseMultiLayer + + +class MultiLayerPerceptron(_BaseClassifier, _BaseMultiClass, _BaseMultiLayer): + """Multi-layer perceptron classifier with logistic sigmoid activations + + Parameters + ------------ + eta : float (default: 0.5) + Learning rate (between 0.0 and 1.0) + epochs : int (default: 50) + Passes over the training dataset. + Prior to each epoch, the dataset is shuffled + if `minibatches > 1` to prevent cycles in stochastic gradient descent. + hidden_layers : list (default: [50]) + Number of units per hidden layer. By default 50 units in the + first hidden layer. At the moment only 1 hidden layer is supported + n_classes : int (default: None) + A positive integer to declare the number of class labels + if not all class labels are present in a partial training set. + Gets the number of class labels automatically if None. + l1 : float (default: 0.0) + L1 regularization strength + l2 : float (default: 0.0) + L2 regularization strength + momentum : float (default: 0.0) + Momentum constant. Factor multiplied with the + gradient of the previous epoch t-1 to improve + learning speed + w(t) := w(t) - (grad(t) + momentum * grad(t-1)) + decrease_const : float (default: 0.0) + Decrease constant. Shrinks the learning rate + after each epoch via eta / (1 + epoch*decrease_const) + minibatches : int (default: 1) + Divide the training data into *k* minibatches + for accelerated stochastic gradient descent learning. + Gradient Descent Learning if `minibatches` = 1 + Stochastic Gradient Descent learning if `minibatches` = len(y) + Minibatch learning if `minibatches` > 1 + random_seed : int (default: None) + Set random state for shuffling and initializing the weights. + print_progress : int (default: 0) + Prints progress in fitting to stderr. + 0: No output + 1: Epochs elapsed and cost + 2: 1 plus time elapsed + 3: 2 plus estimated time until completion + + Attributes + ----------- + w_ : 2d-array, shape=[n_features, n_classes] + Weights after fitting. + b_ : 1D-array, shape=[n_classes] + Bias units after fitting. + cost_ : list + List of floats; the mean categorical cross entropy + cost after each epoch. + + """ + def __init__(self, eta=0.5, epochs=50, + hidden_layers=[50], + n_classes=None, + momentum=0.0, l1=0.0, l2=0.0, + dropout=1.0, + decrease_const=0.0, + minibatches=1, random_seed=None, + print_progress=0): + + super(MultiLayerPerceptron, self).__init__( + print_progress=print_progress, random_seed=random_seed) + if len(hidden_layers) > 1: + raise AttributeError('Currently, only 1 hidden layer is supported') + self.hidden_layers = hidden_layers + self.eta = eta + self.n_classes = n_classes + self.l1 = l1 + self.l2 = l2 + self.decrease_const = decrease_const + self.momentum = momentum + self.epochs = epochs + self.minibatches = minibatches + + def _fit(self, X, y, init_params=True): + + self._check_target_array(y) + + if init_params: + self._decr_eta = self.eta + if self.n_classes is None: + self.n_classes = np.max(y) + 1 + + self._n_features = X.shape[1] + self._weight_maps, self._bias_maps = self._layermapping( + n_features=self._n_features, + n_classes=self.n_classes, + hidden_layers=self.hidden_layers) + + self.w_, self.b_ = self._init_params_from_layermapping( + weight_maps=self._weight_maps, + bias_maps=self._bias_maps) + + self.cost_ = [] + + if self.momentum != 0.0: + prev_grad_b_1 = np.zeros(shape=self.b_[1].shape) + prev_grad_w_1 = np.zeros(shape=self.w_[1].shape) + prev_grad_b_out = np.zeros(shape=self.b_['out'].shape) + prev_grad_w_out = np.zeros(shape=self.w_['out'].shape) + + y_enc = self._one_hot(y=y, n_labels=self.n_classes, dtype=np.float) + + self.init_time_ = time() + for i in range(self.epochs): + for idx in self._yield_minibatches_idx( + n_batches=self.minibatches, + data_ary=y, + shuffle=True): + + net_1, act_1, net_out, act_out = self._feedforward(X[idx]) + + # GRADIENTS VIA BACKPROPAGATION + + # [n_samples, n_classlabels] + sigma_out = act_out - y_enc[idx] + + # [n_samples, n_hidden] + sigmoid_derivative_1 = act_1 * (1.0 - act_1) + + # [n_samples, n_classlabels] dot [n_classlabels, n_hidden] + # -> [n_samples, n_hidden] + sigma_1 = (np.dot(sigma_out, self.w_['out'].T) * + sigmoid_derivative_1) + + # [n_features, n_samples] dot [n_samples, n_hidden] + # -> [n_features, n_hidden] + grad_W_1 = np.dot(X[idx].T, sigma_1) + + grad_B_1 = np.sum(sigma_1, axis=0) + + # [n_hidden, n_samples] dot [n_samples, n_classlabels] + # -> [n_hidden, n_classlabels] + grad_W_out = np.dot(act_1.T, sigma_out) + + grad_B_out = np.sum(sigma_out, axis=0) + + # LEARNING RATE ADJUSTEMENTS + self._decr_eta /= (1 + self.decrease_const * i) + + # REGULARIZATION AND WEIGHT UPDATES + + dW_1 = (self._decr_eta * grad_W_1 + + self._decr_eta * self.l2 * self.w_[1]) + + dW_out = (self._decr_eta * grad_W_out + + self._decr_eta * self.l2 * self.w_['out']) + + dB_1 = self._decr_eta * grad_B_1 + dB_out = self._decr_eta * grad_B_out + + self.w_[1] -= dW_1 + self.b_[1] -= dB_1 + self.w_['out'] -= dW_out + self.b_['out'] -= dB_out + + if self.momentum != 0.0: + self.w_[1] -= self.momentum * prev_grad_w_1 + self.b_[1] -= self.momentum * prev_grad_b_1 + self.w_['out'] -= self.momentum * prev_grad_w_out + self.b_['out'] -= self.momentum * prev_grad_b_out + prev_grad_b_1 = grad_B_1 + prev_grad_w_1 = grad_W_1 + prev_grad_b_out = grad_B_out + prev_grad_w_out = grad_W_out + + net_1, act_1, net_out, act_out = self._feedforward(X) + cross_ent = self._cross_entropy(output=act_out, y_target=y_enc) + cost = self._compute_cost(cross_ent) + + self.cost_.append(cost) + if self.print_progress: + self._print_progress(iteration=i + 1, + n_iter=self.epochs, + cost=cost) + + return self + + def _feedforward(self, X): + + # [n_samples, n_features] dot [n_features, n_hidden] + # -> [n_samples, n_hidden] + net_1 = np.dot(X, self.w_[1]) + self.b_[1] + act_1 = self._sigmoid(net_1) + + # [n_samples, n_hidden] dot [n_hidden, n_classlabels] + # -> [n_samples, n_classlabels] + net_out = np.dot(act_1, self.w_['out']) + self.b_['out'] + act_out = self._softmax(net_out) + + return net_1, act_1, net_out, act_out + + def _compute_cost(self, cross_entropy): + L2_term = (self.l2 * + (np.sum(self.w_[1] ** 2) + np.sum(self.w_['out'] ** 2))) + + L1_term = (self.l1 * + (np.abs(self.w_[1]).sum() + np.abs(self.w_['out']).sum())) + + cross_entropy = cross_entropy + L2_term + L1_term + return 0.5 * np.mean(cross_entropy) + + def _predict(self, X): + net_1, act_1, net_out, act_out = self._feedforward(X) + y_pred = np.argmax(net_out, axis=1) + return y_pred + + def _softmax(self, z): + return (np.exp(z.T) / np.sum(np.exp(z), axis=1)).T + + def _cross_entropy(self, output, y_target): + return - np.sum(np.log(output) * (y_target), axis=1) + + def predict_proba(self, X): + """Predict class probabilities of X from the net input. + + Parameters + ---------- + X : {array-like, sparse matrix}, shape = [n_samples, n_features] + Training vectors, where n_samples is the number of samples and + n_features is the number of features. + + Returns + ---------- + Class probabilties : array-like, shape= [n_samples, n_classes] + + """ + net_1, act_1, net_out, act_out = self._feedforward(X) + softm = self._softmax(act_out) + return softm + + def _sigmoid(self, z): + """Compute logistic function (sigmoid). + Uses scipy.special.expit to avoid overflow + error for very small input values z. + """ + # return 1.0 / (1.0 + np.exp(-z)) + return expit(z) diff --git a/mlxtend/classifier/neuralnet_mlp.py b/mlxtend/classifier/neuralnet_mlp.py deleted file mode 100644 index c1aa07ac6..000000000 --- a/mlxtend/classifier/neuralnet_mlp.py +++ /dev/null @@ -1,411 +0,0 @@ -# Sebastian Raschka 2014-2016 -# mlxtend Machine Learning Library Extensions -# -# Implementation of a multi-layer perceptron for classification. -# Author: Sebastian Raschka -# -# License: BSD 3 clause - -import numpy as np -from .base import _BaseClassifier -from scipy.special import expit -from time import time - - -class NeuralNetMLP(_BaseClassifier): - - """ Feedforward neural network / Multi-layer perceptron classifier. - - Parameters - ------------ - n_output : int - Number of output units, should be equal to the - number of unique class labels. - n_features : int - Number of features (dimensions) in the target dataset. - Should be equal to the number of columns in the X array. - n_hidden : int (default: 30) - Number of hidden units. - l1 : float (default: 0.0) - Lambda value for L1-regularization. - No regularization if l1=0.0 (default) - l2 : float (default: 0.0) - Lambda value for L2-regularization. - No regularization if l2=0.0 (default) - epochs : int (default: 500) - Number of passes over the training set. - eta : float (default: 0.001) - Learning rate. - alpha : float (default: 0.0) - Momentum constant. Factor multiplied with the - gradient of the previous epoch t-1 to improve - learning speed - w(t) := w(t) - (grad(t) + alpha*grad(t-1)) - decrease_const : float (default: 0.0) - Decrease constant. Shrinks the learning rate - after each epoch via eta / (1 + epoch*decrease_const) - random_weights : list (default: [-1.0, 1.0]) - Min and max values for initializing the random weights. - Initializes weights to 0 if None or False. - shuffle_init : bool (default: True) - Shuffles (a copy of the) training data before training. - shuffle_epoch : bool (default: True) - Shuffles training data before every epoch if True to prevent circles. - minibatches : int (default: 1) - Divides training data into k minibatches for efficiency. - Normal gradient descent learning if k=1 (default). - random_seed : int (default: None) - Set random seed for shuffling and initializing the weights. - zero_init_weight : bool (default: False) - If True, weights are initialized to zero instead of small random - numbers following a standard normal distribution with mean=0 and - stddev=1. - print_progress : int (default: 0) - Prints progress in fitting to stderr. - 0: No output - 1: Epochs elapsed and cost - 2: 1 plus time elapsed - 3: 2 plus estimated time until completion - - Attributes - ----------- - cost_ : list - Sum of squared errors after each epoch. - - """ - def __init__(self, n_output, n_features, n_hidden=30, - l1=0.0, l2=0.0, epochs=500, eta=0.001, - alpha=0.0, decrease_const=0.0, - shuffle_init=True, - shuffle_epoch=True, - minibatches=1, - zero_init_weight=False, - random_seed=None, - print_progress=0): - - super(NeuralNetMLP, self).__init__(print_progress=print_progress) - self.n_output = n_output - self.n_features = n_features - self.n_hidden = n_hidden - self.random_seed = random_seed - self.zero_init_weight = zero_init_weight - self.w1, self.w2 = self._initialize_weights() - self.l1 = l1 - self.l2 = l2 - self.epochs = epochs - self.eta = eta - self.alpha = alpha - self.decrease_const = decrease_const - self.shuffle_init = shuffle_init - self.shuffle_epoch = shuffle_epoch - self.minibatches = minibatches - self.print_progress = print_progress - - def _encode_labels(self, y, k): - """Encode labels into one-hot representation. - - Parameters - ------------ - y : array, shape = [n_samples] - Target values. - - Returns - ----------- - onehot : array, shape = (n_labels, n_samples) - One-hot encoded class labels. - - """ - onehot = np.zeros((k, y.shape[0])) - for idx, val in enumerate(y): - onehot[val, idx] = 1.0 - return onehot - - def _initialize_weights(self): - """Initialize weights with small random numbers.""" - w1 = self._init_weights(shape=self.n_hidden * (self.n_features + 1), - zero_init_weight=self.zero_init_weight, - seed=self.random_seed) - w1 = w1.reshape(self.n_hidden, self.n_features + 1) - w2 = self._init_weights(shape=self.n_output * (self.n_hidden + 1), - zero_init_weight=self.zero_init_weight, - seed=self.random_seed) - w2 = w2.reshape(self.n_output, self.n_hidden + 1) - return w1, w2 - - def _sigmoid(self, z): - """Compute logistic function (sigmoid). - Uses scipy.special.expit to avoid overflow - error for very small input values z. - """ - # return 1.0 / (1.0 + np.exp(-z)) - return expit(z) - - def _sigmoid_gradient(self, z): - """Compute gradient of the logistic function.""" - sg = self._sigmoid(z) - return sg * (1.0 - sg) - - def _add_bias_unit(self, X, how='column'): - """Add bias unit (column or row of 1s) to array at index 0.""" - if how == 'column': - X_new = np.ones((X.shape[0], X.shape[1] + 1)) - X_new[:, 1:] = X - elif how == 'row': - X_new = np.ones((X.shape[0] + 1, X.shape[1])) - X_new[1:, :] = X - else: - raise AttributeError('how must be columns or row') - return X_new - - def _feedforward(self, X, w1, w2): - """Compute feedforward step - - Parameters - ----------- - X : array, shape = [n_samples, n_features] - Input layer with original features. - w1 : array, shape = [n_hidden_units, n_features] - Weight matrix for input layer -> hidden layer. - w2 : array, shape = [n_output_units, n_hidden_units] - Weight matrix for hidden layer -> output layer. - - Returns - ---------- - a1 : array, shape = [n_samples, n_features+1] - Input values with bias unit. - z2 : array, shape = [n_hidden, n_samples] - Net input of hidden layer. - a2 : array, shape = [n_hidden+1, n_samples] - Activation of hidden layer. - z3 : array, shape = [n_output_units, n_samples] - Net input of output layer. - a3 : array, shape = [n_output_units, n_samples] - Activation of output layer. - - """ - a1 = self._add_bias_unit(X, how='column') - z2 = w1.dot(a1.T) - a2 = self._sigmoid(z2) - a2 = self._add_bias_unit(a2, how='row') - z3 = w2.dot(a2) - a3 = self._sigmoid(z3) - return a1, z2, a2, z3, a3 - - def _L2_reg(self, lambda_, w1, w2): - """Compute L2-regularization cost.""" - return ((lambda_ / 2.0) * (np.sum(w1[:, 1:] ** 2) + - np.sum(w2[:, 1:] ** 2))) - - def _L1_reg(self, lambda_, w1, w2): - """Compute L1-regularization cost.""" - return ((lambda_ / 2.0) * (np.abs(w1[:, 1:]).sum() + - np.abs(w2[:, 1:]).sum())) - - def _get_cost(self, y_enc, output, w1, w2): - """Compute cost function. - - y_enc : array, shape = (n_labels, n_samples) - one-hot encoded class labels. - output : array, shape = [n_output_units, n_samples] - Activation of the output layer (feedforward) - w1 : array, shape = [n_hidden_units, n_features] - Weight matrix for input layer -> hidden layer. - w2 : array, shape = [n_output_units, n_hidden_units] - Weight matrix for hidden layer -> output layer. - - Returns - --------- - cost : float - Regularized cost. - - """ - term1 = -y_enc * (np.log(output)) - term2 = (1.0 - y_enc) * np.log(1.0 - output) - cost = np.sum(term1 - term2) - L1_term = self._L1_reg(self.l1, w1, w2) - L2_term = self._L2_reg(self.l2, w1, w2) - cost = cost + L1_term + L2_term - return cost - - def _get_gradient(self, a1, a2, a3, z2, y_enc, w1, w2): - """Compute gradient step using backpropagation. - - Parameters - ------------ - a1 : array, shape = [n_samples, n_features+1] - Input values with bias unit. - a2 : array, shape = [n_hidden+1, n_samples] - Activation of hidden layer. - a3 : array, shape = [n_output_units, n_samples] - Activation of output layer. - z2 : array, shape = [n_hidden, n_samples] - Net input of hidden layer.= - y_enc : array, shape = (n_labels, n_samples) - one-hot encoded class labels. - w1 : array, shape = [n_hidden_units, n_features] - Weight matrix for input layer -> hidden layer. - w2 : array, shape = [n_output_units, n_hidden_units] - Weight matrix for hidden layer -> output layer. - - Returns - --------- - grad1 : array, shape = [n_hidden_units, n_features] - Gradient of the weight matrix w1. - grad2 : array, shape = [n_output_units, n_hidden_units] - Gradient of the weight matrix w2. - - """ - # backpropagation - sigma3 = a3 - y_enc - z2 = self._add_bias_unit(z2, how='row') - sigma2 = w2.T.dot(sigma3) * self._sigmoid_gradient(z2) - sigma2 = sigma2[1:, :] - grad1 = sigma2.dot(a1) - grad2 = sigma3.dot(a2.T) - - # regularize - grad1[:, 1:] += (w1[:, 1:] * (self.l1 + self.l2)) - grad2[:, 1:] += (w2[:, 1:] * (self.l1 + self.l2)) - - return grad1, grad2 - - def _predict(self, X): - a1, z2, a2, z3, a3 = self._feedforward(X, self.w1, self.w2) - y_pred = np.argmax(z3, axis=0) - return y_pred - - def fit(self, X, y): - """Learn weight coefficients from training data. - - Parameters - ----------- - X : array, shape = [n_samples, n_features] - Input layer with original features. - y : array, shape = [n_samples] - Target class labels. - - Returns: - ---------- - self - - """ - np.random.seed(self.random_seed) - self.cost_ = [] - self.gradient_ = np.array([]) - X_data, y_data = X.copy(), y.copy() - - if self.shuffle_init: - X_data, y_data = self._shuffle([X_data, y_data]) - - y_enc = self._encode_labels(y_data, self.n_output) - - delta_w1_prev = np.zeros(self.w1.shape) - delta_w2_prev = np.zeros(self.w2.shape) - - self.init_time_ = time() - for i in range(self.epochs): - - # adaptive learning rate - self.eta /= (1 + self.decrease_const * i) - - if self.shuffle_epoch: - idx = np.random.permutation(y_enc.shape[1]) - X_data, y_enc = X_data[idx], y_enc[:, idx] - - mini = np.array_split(range(y_data.shape[0]), self.minibatches) - for idx in mini: - - # feedforward - a1, z2, a2, z3, a3 = self._feedforward(X_data[idx], - self.w1, - self.w2) - cost = self._get_cost(y_enc=y_enc[:, idx], - output=a3, - w1=self.w1, - w2=self.w2) - self.cost_.append(cost) - - # compute gradient via backpropagation - grad1, grad2 = self._get_gradient(a1=a1, a2=a2, - a3=a3, z2=z2, - y_enc=y_enc[:, idx], - w1=self.w1, - w2=self.w2) - - # gradient_ attribute used for gradient checking - self.gradient_ = np.hstack((grad1.flatten(), grad2.flatten())) - - # update weights; [alpha * delta_w_prev] for momentum learning - delta_w1, delta_w2 = self.eta * grad1, self.eta * grad2 - self.w1 -= (delta_w1 + (self.alpha * delta_w1_prev)) - self.w2 -= (delta_w2 + (self.alpha * delta_w2_prev)) - delta_w1_prev, delta_w2_prev = delta_w1, delta_w2 - - if self.print_progress: - self._print_progress(epoch=i + 1) - - return self - - def _numerically_approximated_gradient(self, X, y, w1, w2, epsilon): - """Numerically approx. gradient for gradient checking (debugging only). - - Returns - --------- - num_grad : array-like, shape = [n_weights] - Numerical gradient enrolled as row vector. - - """ - y_enc = self._encode_labels(y, self.n_output) - num_grad1 = np.zeros(np.shape(w1)) - epsilon_ary1 = np.zeros(np.shape(w1)) - for i in range(w1.shape[0]): - for j in range(w1.shape[1]): - epsilon_ary1[i, j] = epsilon - a1, z2, a2, z3, a3 = self._feedforward(X, - w1 - epsilon_ary1, - w2) - cost1 = self._get_cost(y_enc, a3, w1 - epsilon_ary1, w2) - a1, z2, a2, z3, a3 = self._feedforward(X, - w1 + epsilon_ary1, - w2) - cost2 = self._get_cost(y_enc, a3, w1 + epsilon_ary1, w2) - num_grad1[i, j] = (cost2 - cost1) / (2 * epsilon) - epsilon_ary1[i, j] = 0 - - num_grad2 = np.zeros(np.shape(w2)) - epsilon_ary2 = np.zeros(np.shape(w2)) - for i in range(w2.shape[0]): - for j in range(w2.shape[1]): - epsilon_ary2[i, j] = epsilon - a1, z2, a2, z3, a3 = self._feedforward(X, - w1, - w2 - epsilon_ary2) - cost1 = self._get_cost(y_enc, a3, w1, w2 - epsilon_ary2) - a1, z2, a2, z3, a3 = self._feedforward(X, - w1, - w2 + epsilon_ary2) - cost2 = self._get_cost(y_enc, a3, w1, w2 + epsilon_ary2) - num_grad2[i, j] = (cost2 - cost1) / (2 * epsilon) - epsilon_ary2[i, j] = 0 - - num_grad = np.hstack((num_grad1.flatten(), num_grad2.flatten())) - return num_grad - - def _gradient_checking(self, X, y, epsilon=1e-5): - """ Apply gradient checking (for debugging only). - - Returns - --------- - eucl_dist : float - Euclidean distance (L2) between the numerically - approximated gradients and the backpropagated gradients. - - """ - num_grad = self._numerically_approximated_gradient(X=X, - y=y, - w1=self.w1, - w2=self.w2, - epsilon=epsilon) - self.fit(X=X, y=y) - eucl_dist = np.linalg.norm(num_grad - self.gradient_) - return eucl_dist diff --git a/mlxtend/classifier/perceptron.py b/mlxtend/classifier/perceptron.py index 9e7ddbfab..6d2fc7235 100644 --- a/mlxtend/classifier/perceptron.py +++ b/mlxtend/classifier/perceptron.py @@ -8,27 +8,25 @@ import numpy as np from time import time -from .base import _BaseClassifier +from .._base import _BaseClassifier class Perceptron(_BaseClassifier): - + """Perceptron classifier. + Note that this implementation of the Perceptron expects binary class labels + in {0, 1}. + Parameters ------------ eta : float (default: 0.1) Learning rate (between 0.0 and 1.0) epochs : int (default: 50) Number of passes over the training dataset. - shuffle : bool (default: True) - Shuffles training data every epoch if True to prevent circles. + Prior to each epoch, the dataset is shuffled to prevent cycles. random_seed : int Random state for initializing random weights and shuffling. - zero_init_weight : bool (default: False) - If True, weights are initialized to zero instead of small random - numbers following a standard normal distribution with mean=0 and - stddev=1. print_progress : int (default: 0) Prints progress in fitting to stderr. 0: No output @@ -38,83 +36,59 @@ class Perceptron(_BaseClassifier): Attributes ----------- - w_ : 1d-array - Weights after fitting. + w_ : 2d-array, shape={n_features, 1} + Model weights after fitting. + b_ : 1d-array, shape={1,} + Bias unit after fitting. cost_ : list Number of misclassifications in every epoch. """ - def __init__(self, eta=0.1, epochs=50, shuffle=True, - random_seed=None, zero_init_weight=False, + def __init__(self, eta=0.1, epochs=50, random_seed=None, print_progress=0): - super(Perceptron, self).__init__(print_progress=print_progress) - self.random_seed = random_seed + super(Perceptron, self).__init__(print_progress=print_progress, + random_seed=random_seed) self.eta = eta self.epochs = epochs - self.shuffle = shuffle - self.zero_init_weight = zero_init_weight - - def fit(self, X, y, init_weights=True): - """Learn weight coefficients from training data. - - Parameters - ---------- - X : {array-like, sparse matrix}, shape = [n_samples, n_features] - Training vectors, where n_samples is the number of samples and - n_features is the number of features. - y : array-like, shape = [n_samples] - Target values. - init_weights : bool (default: True) - Re-initializes weights prior to fitting. Set False to continue - training with weights from a previous fitting. - - Returns - ------- - self - - """ - self._check_arrays(X, y) - - # check if {0, 1} or {-1, 1} class labels are used - self.classes_ = np.unique(y) - if not (np.all(np.array([0, 1]) == self.classes_) or - np.all(np.array([-1, 1]) == self.classes_)): - raise ValueError('Only supports binary' - ' class labels {0, 1} or {-1, 1}.') - - if init_weights: - self.w_ = self._init_weights( - shape=1 + X.shape[1], - zero_init_weight=self.zero_init_weight, - seed=self.random_seed) - - self.cost_ = [] - - if self.shuffle: - np.random.seed(self.random_seed) - - # learn weights + + def _fit(self, X, y, init_params=True): + self._check_target_array(y, allowed={(0, 1)}) + y_data = np.where(y == 0, -1., 1.) + + if init_params: + self.b_, self.w_ = self._init_params( + weights_shape=(X.shape[1], 1), + bias_shape=(1,), + random_seed=self.random_seed) + self.cost_ = [] + self.init_time_ = time() - n_idx = list(range(y.shape[0])) + for i in range(self.epochs): - if self.shuffle: - n_idx = np.random.permutation(n_idx) errors = 0 - for xi, target in zip(X[n_idx], y[n_idx]): - update = self.eta * (target - self._predict(xi)) - self.w_[1:] += update * xi - self.w_[0] += update + + for idx in self._yield_minibatches_idx( + n_batches=y_data.shape[0], data_ary=y_data, shuffle=True): + + update = self.eta * (y_data[idx] - + self._to_classlabels(X[idx])) + self.w_ += (update * X[idx]).reshape(self.w_.shape) + self.b_ += update errors += int(update != 0.0) if self.print_progress: - self._print_progress(epoch=i + 1, cost=errors) + self._print_progress(iteration=i + 1, + n_iter=self.epochs, + cost=errors) self.cost_.append(errors) return self def _net_input(self, X): """ Net input function """ - return np.dot(X, self.w_[1:]) + self.w_[0] + return (np.dot(X, self.w_) + self.b_).flatten() + + def _to_classlabels(self, X): + return np.where(self._net_input(X) < 0.0, -1., 1.) def _predict(self, X): - return np.where(self._net_input(X) >= 0.0, - self.classes_[1], self.classes_[0]) + return np.where(self._net_input(X) < 0.0, 0, 1) diff --git a/mlxtend/classifier/softmax_regression.py b/mlxtend/classifier/softmax_regression.py index cdd8d14bf..fea0b7a33 100644 --- a/mlxtend/classifier/softmax_regression.py +++ b/mlxtend/classifier/softmax_regression.py @@ -10,10 +10,11 @@ import numpy as np from time import time -from .base import _BaseClassifier +from .._base import _BaseClassifier +from .._base import _BaseMultiClass -class SoftmaxRegression(_BaseClassifier): +class SoftmaxRegression(_BaseClassifier, _BaseMultiClass,): """Softmax regression classifier. @@ -23,21 +24,22 @@ class SoftmaxRegression(_BaseClassifier): Learning rate (between 0.0 and 1.0) epochs : int (default: 50) Passes over the training dataset. - l2_lambda : float + Prior to each epoch, the dataset is shuffled + if `minibatches > 1` to prevent cycles in stochastic gradient descent. + l2 : float Regularization parameter for L2 regularization. - No regularization if l2_lambda=0.0. + No regularization if l2=0.0. minibatches : int (default: 1) - Divide the training data into *k* minibatches - for accelerated stochastic gradient descent learning. - Gradient Descent Learning if `minibatches` = 1 - Stochastic Gradient Descent learning if `minibatches` = len(y) - Minibatch learning if `minibatches` > 1 + The number of minibatches for gradient-based optimization. + If 1: Gradient Descent learning + If len(y): Stochastic Gradient Descent (SGD) online learning + If 1 < minibatches < len(y): SGD Minibatch learning + n_classes : int (default: None) + A positive integer to declare the number of class labels + if not all class labels are present in a partial training set. + Gets the number of class labels automatically if None. random_seed : int (default: None) Set random state for shuffling and initializing the weights. - zero_init_weight : bool (default: False) - If True, weights are initialized to zero instead of small random - numbers following a standard normal distribution with mean=0 and - stddev=1. print_progress : int (default: 0) Prints progress in fitting to stderr. 0: No output @@ -47,31 +49,28 @@ class SoftmaxRegression(_BaseClassifier): Attributes ----------- - w_ : 2d-array, shape=[n_features, n_classes] - Weights after fitting. + w_ : 2d-array, shape={n_features, 1} + Model weights after fitting. + b_ : 1d-array, shape={1,} + Bias unit after fitting. cost_ : list List of floats, the average cross_entropy for each epoch. """ def __init__(self, eta=0.01, epochs=50, - l2_lambda=0.0, minibatches=1, + l2=0.0, + minibatches=1, + n_classes=None, random_seed=None, - zero_init_weight=False, print_progress=0): - super(SoftmaxRegression, self).__init__(print_progress=print_progress) - self.random_seed = random_seed + super(SoftmaxRegression, self).__init__(print_progress=print_progress, + random_seed=random_seed) self.eta = eta self.epochs = epochs - self.l2_lambda = l2_lambda + self.l2 = l2 self.minibatches = minibatches - self.zero_init_weight = zero_init_weight - - def _one_hot(self, y, n_labels): - mat = np.zeros((len(y), n_labels)) - for i, val in enumerate(y): - mat[i, val] = 1 - return mat.astype(float) + self.n_classes = n_classes def _net_input(self, X, W, b): return (X.dot(W) + b) @@ -83,64 +82,34 @@ def _cross_entropy(self, output, y_target): return - np.sum(np.log(output) * (y_target), axis=1) def _cost(self, cross_entropy): - return np.mean(cross_entropy) + L2_term = self.l2 * np.sum(self.w_ ** 2) + cross_entropy = cross_entropy + L2_term + return 0.5 * np.mean(cross_entropy) def _to_classlabels(self, z): return z.argmax(axis=1) - def fit(self, X, y, init_weights=True, n_classes=None): - """Learn weight coefficients from training data. - - Parameters - ---------- - X : {array-like, sparse matrix}, shape = [n_samples, n_features] - Training vectors, where n_samples is the number of samples and - n_features is the number of features. - y : array-like, shape = [n_samples] - Target values. - init_weights : bool (default: True) - (Re)initializes weights to small random floats if True. - n_classes : int (default: None) - A positive integer to declare the number of class labels - if not all class labels are present in a partial training set. - Gets the number of class labels automatically if None. - Ignored if init_weights=False. - - Returns - ------- - self : object - - """ - if init_weights: - if n_classes: - self._n_classes = n_classes - else: - self._n_classes = np.max(y) + 1 + def _fit(self, X, y, init_params=True): + self._check_target_array(y) + if init_params: + if self.n_classes is None: + self.n_classes = np.max(y) + 1 self._n_features = X.shape[1] - self.w_ = self._init_weights( - shape=(self._n_features, self._n_classes), - zero_init_weight=self.zero_init_weight, - seed=self.random_seed) - self.b_ = self._init_weights( - shape=self._n_classes, - zero_init_weight=self.zero_init_weight, - seed=self.random_seed) - self.cost_ = [] - n_idx = list(range(y.shape[0])) - y_enc = self._one_hot(y, self._n_classes) + self.b_, self.w_ = self._init_params( + weights_shape=(self._n_features, self.n_classes), + bias_shape=(self.n_classes,), + random_seed=self.random_seed) + self.cost_ = [] - # random seed for shuffling - if self.random_seed: - np.random.seed(self.random_seed) + y_enc = self._one_hot(y=y, n_labels=self.n_classes, dtype=np.float) self.init_time_ = time() for i in range(self.epochs): - if self.minibatches > 1: - n_idx = np.random.permutation(n_idx) - - minis = np.array_split(n_idx, self.minibatches) - for idx in minis: + for idx in self._yield_minibatches_idx( + n_batches=self.minibatches, + data_ary=y, + shuffle=True): # givens: # w_ -> n_feat x n_classes @@ -156,8 +125,8 @@ def fit(self, X, y, init_weights=True, n_classes=None): # update in opp. direction of the cost gradient self.w_ -= (self.eta * grad + - self.eta * self.l2_lambda * self.w_) - self.b_ -= np.mean(diff, axis=0) + self.eta * self.l2 * self.w_) + self.b_ -= (self.eta * np.mean(diff, axis=0)) # compute cost of the whole epoch net = self._net_input(X, self.w_, self.b_) @@ -167,7 +136,9 @@ def fit(self, X, y, init_weights=True, n_classes=None): self.cost_.append(cost) if self.print_progress: - self._print_progress(epoch=i + 1, cost=cost) + self._print_progress(iteration=i + 1, + n_iter=self.epochs, + cost=cost) return self @@ -189,20 +160,6 @@ def predict_proba(self, X): softm = self._softmax(net) return softm - def predict(self, X): - """Predict class labels of X. - - Parameters - ---------- - X : {array-like, sparse matrix}, shape = [n_samples, n_features] - Training vectors, where n_samples is the number of samples and - n_features is the number of features. - - Returns - ---------- - class_labels : array-like, shape = [n_samples] - Predicted class labels. - - """ + def _predict(self, X): probas = self.predict_proba(X) return self._to_classlabels(probas) diff --git a/mlxtend/classifier/stacking_classification.py b/mlxtend/classifier/stacking_classification.py index 867b6651a..5db757754 100644 --- a/mlxtend/classifier/stacking_classification.py +++ b/mlxtend/classifier/stacking_classification.py @@ -18,7 +18,7 @@ class StackingClassifier(BaseEstimator, ClassifierMixin, TransformerMixin): - + """A Stacking classifier for scikit-learn estimators for classification. Parameters diff --git a/mlxtend/classifier/tests/test_adaline.py b/mlxtend/classifier/tests/test_adaline.py index 863241c14..1eb2dcba8 100644 --- a/mlxtend/classifier/tests/test_adaline.py +++ b/mlxtend/classifier/tests/test_adaline.py @@ -4,19 +4,17 @@ # # License: BSD 3 clause +import numpy as np from mlxtend.classifier import Adaline from mlxtend.data import iris_data -import numpy as np -from nose.tools import raises +from mlxtend.utils import assert_raises # Iris Data X, y = iris_data() X = X[:, [0, 3]] # sepal length and petal width X = X[0:100] # class 0 and class 1 -y0 = y[0:100] # class 0 and class 1 -y1 = np.where(y[0:100] == 0, -1, 1) # class -1 and class 1 -y2 = np.where(y[0:100] == 0, -2, 1) # class -2 and class 1 +y1 = y[0:100] # standardize X_std = np.copy(X) @@ -24,36 +22,55 @@ X_std[:, 1] = (X[:, 1] - X[:, 1].mean()) / X[:, 1].std() -@raises(Exception) -def test_array_dimensions(): +def test_invalid_labels_1(): + y2 = np.where(y1 == 0, 2, 1) ada = Adaline(epochs=15, eta=0.01, random_seed=1) - ada = ada.fit(np.array([1, 2, 3]), [-1]) + assert_raises(AttributeError, + 'Labels not in {(0, 1)}.\nFound (1, 2)', + ada.fit, + X, + y2, + {(0, 1)}) + + +def test_invalid_labels_2(): + y2 = np.where(y1 == 0, -1, 1) + ada = Adaline(epochs=15, eta=0.01, random_seed=1) + assert_raises(AttributeError, + 'y array must not contain negative labels.\nFound [-1 1]', + ada.fit, + X, + y2, + {(-1, 1)}) def test_normal_equation(): - t1 = np.array([-5.21e-16, -7.86e-02, 1.02e+00]) + t1 = np.array([[-0.08], [1.02]]) + b1 = np.array([0.00]) ada = Adaline(epochs=30, eta=0.01, minibatches=None, - random_seed=1) + random_seed=None) ada.fit(X_std, y1) - np.testing.assert_almost_equal(ada.w_, t1, 2) - assert((y1 == ada.predict(X_std)).all()) + np.testing.assert_almost_equal(ada.w_, t1, decimal=2) + np.testing.assert_almost_equal(ada.b_, b1, decimal=2) + assert (y1 == ada.predict(X_std)).all(), ada.predict(X_std) def test_gradient_descent(): - t1 = np.array([-5.21e-16, -7.86e-02, 1.02e+00]) + t1 = np.array([[-0.08], [1.02]]) + b1 = np.array([0.00]) ada = Adaline(epochs=30, eta=0.01, minibatches=1, random_seed=1) ada.fit(X_std, y1) - np.testing.assert_almost_equal(ada.w_, t1, 2) + np.testing.assert_almost_equal(ada.w_, t1, decimal=2) + np.testing.assert_almost_equal(ada.b_, b1, decimal=2) assert((y1 == ada.predict(X_std)).all()) def test_score_function(): - t1 = np.array([-5.21e-16, -7.86e-02, 1.02e+00]) ada = Adaline(epochs=30, eta=0.01, minibatches=1, @@ -64,31 +81,19 @@ def test_score_function(): def test_refit_weights(): - t1 = np.array([-5.21e-16, -7.86e-02, 1.02e+00]) + t1 = np.array([[-0.08], [1.02]]) ada = Adaline(epochs=15, eta=0.01, minibatches=1, random_seed=1) - ada.fit(X_std, y1, init_weights=True) - ada.fit(X_std, y1, init_weights=False) - np.testing.assert_almost_equal(ada.w_, t1, 2) - assert((y1 == ada.predict(X_std)).all()) - - -def test_standardized_iris_data_with_zero_weights(): - t1 = np.array([-5.21e-16, -7.86e-02, 1.02e+00]) - ada = Adaline(epochs=30, - eta=0.01, - minibatches=1, - random_seed=1, - zero_init_weight=True) - ada.fit(X_std, y1) + ada.fit(X_std, y1, init_params=True) + ada.fit(X_std, y1, init_params=False) np.testing.assert_almost_equal(ada.w_, t1, 2) assert((y1 == ada.predict(X_std)).all()) def test_stochastic_gradient_descent(): - t1 = np.array([-5.21e-16, -7.86e-02, 1.02e+00]) + t1 = np.array([[-0.08], [1.02]]) ada = Adaline(epochs=30, eta=0.01, minibatches=len(y), @@ -106,22 +111,3 @@ def test_ary_persistency_in_shuffling(): random_seed=1) ada.fit(X_std, y1) np.testing.assert_almost_equal(orig, X_std, 6) - - -def test_0_1_class(): - t1 = np.array([0.51, -0.04, 0.51]) - ada = Adaline(epochs=30, - eta=0.01, - minibatches=1, - random_seed=1) - ada.fit(X_std, y0) - np.testing.assert_almost_equal(ada.w_, t1, 2) - assert((y0 == ada.predict(X_std)).all()) - - -def test_invalid_class(): - ada = Adaline(epochs=40, eta=0.01, random_seed=1) - try: - ada.fit(X, y2) # 0, 1 class - except ValueError: - pass diff --git a/mlxtend/classifier/tests/test_baseclassifer.py b/mlxtend/classifier/tests/test_baseclassifer.py deleted file mode 100644 index 7cde631a9..000000000 --- a/mlxtend/classifier/tests/test_baseclassifer.py +++ /dev/null @@ -1,40 +0,0 @@ -# Sebastian Raschka 2014-2016 -# mlxtend Machine Learning Library Extensions -# Author: Sebastian Raschka -# -# License: BSD 3 clause - -from mlxtend.classifier.base import _BaseClassifier -import numpy as np -from nose.tools import raises - - -@raises(ValueError) -def test_X_array(): - X = [1, 2, 4] - y = [2, 3, 4] - bc = _BaseClassifier() - bc._check_arrays(X, y) - - -@raises(ValueError) -def test_X_dim(): - X = np.array([2, 3, 4]) - y = [1, 2, 4] - bc = _BaseClassifier() - bc._check_arrays(X, y) - - -def test_okay(): - X = np.array([[2], [3], [4]]) - y = [1, 2, 4] - bc = _BaseClassifier() - bc._check_arrays(X, y) - - -@raises(ValueError) -def test_wrong_dim(): - X = np.array([[2], [3], [4]]) - y = [1, 2, 4, 5] - bc = _BaseClassifier() - bc._check_arrays(X, y) diff --git a/mlxtend/classifier/tests/test_logistic_regression.py b/mlxtend/classifier/tests/test_logistic_regression.py index 39a643987..f973cda00 100644 --- a/mlxtend/classifier/tests/test_logistic_regression.py +++ b/mlxtend/classifier/tests/test_logistic_regression.py @@ -4,9 +4,10 @@ # # License: BSD 3 clause +import numpy as np from mlxtend.classifier import LogisticRegression from mlxtend.data import iris_data -import numpy as np +from mlxtend.utils import assert_raises X, y = iris_data() @@ -19,41 +20,81 @@ X[:, 1] = (X[:, 1] - X[:, 1].mean()) / X[:, 1].std() +def test_invalid_labels_1(): + y1 = np.where(y == 0, 2, 1) + lr = LogisticRegression(epochs=15, eta=0.01, random_seed=1) + assert_raises(AttributeError, + 'Labels not in {(0, 1)}.\nFound (1, 2)', + lr.fit, + X, + y1, + {(0, 1)}) + + +def test_invalid_labels_2(): + y1 = np.where(y == 0, -1, 1) + lr = LogisticRegression(epochs=15, eta=0.01, random_seed=1) + assert_raises(AttributeError, + 'y array must not contain negative labels.\nFound [-1 1]', + lr.fit, + X, + y1, + {(-1, 1)}) + + def test_logistic_regression_gd(): - t = np.array([0.52, 1.2, 4.4]) + w = np.array([[1.2], [4.4]]) + b = np.array([0.52]) lr = LogisticRegression(epochs=100, eta=0.01, minibatches=1, random_seed=1) - lr.fit(X, y) # 0, 1 class - np.testing.assert_almost_equal(lr.w_, t, 2) + lr.fit(X, y) + np.testing.assert_almost_equal(lr.w_, w, 2) + np.testing.assert_almost_equal(lr.b_, b, 2) y_pred = lr.predict(X) acc = np.sum(y == y_pred, axis=0) / float(X.shape[0]) assert acc == 1.0, "Acc: %s" % acc def test_score_function(): - t = np.array([0.52, 1.2, 4.4]) lr = LogisticRegression(epochs=100, eta=0.01, minibatches=1, random_seed=1) - lr.fit(X, y) # 0, 1 class - np.testing.assert_almost_equal(lr.w_, t, 2) + lr.fit(X, y) acc = lr.score(X, y) assert acc == 1.0, "Acc: %s" % acc +def test_refit_weights(): + w = np.array([[1.2], [4.4]]) + b = np.array([0.52]) + lr = LogisticRegression(epochs=50, + eta=0.01, + minibatches=1, + random_seed=1) + + lr.fit(X, y) + w1 = lr.w_[0][0] + w2 = lr.w_[0][0] + lr.fit(X, y, init_params=False) + + assert w1 != lr.w_[0][0] + assert w2 != lr.w_[1][0] + np.testing.assert_almost_equal(lr.w_, w, 2) + np.testing.assert_almost_equal(lr.b_, b, 2) + + def test_predict_proba(): lr = LogisticRegression(epochs=100, eta=0.01, minibatches=1, random_seed=1) - lr.fit(X, y) # 0, 1 class - + lr.fit(X, y) idx = [0, 48, 99] # sample labels: 0, 0, 1 y_pred = lr.predict_proba(X[idx]) expect = np.array([0.009, 0.012, 0.993]) @@ -61,14 +102,14 @@ def test_predict_proba(): def test_logistic_regression_sgd(): - t = np.array([0.51, 1.18, 4.38]) + w = np.array([[1.18], [4.38]]) lr = LogisticRegression(epochs=100, eta=0.01, minibatches=len(y), random_seed=1) lr.fit(X, y) # 0, 1 class - np.testing.assert_almost_equal(lr.w_, t, 2) + np.testing.assert_almost_equal(lr.w_, w, 2) y_pred = lr.predict(X) acc = np.sum(y == y_pred, axis=0) / float(X.shape[0]) assert acc == 1.0, "Acc: %s" % acc @@ -82,7 +123,7 @@ def test_l2_regularization_gd(): random_seed=1) lr.fit(X, y) y_pred = lr.predict(X) - expect_weights = np.array([0.153, 1.055, 2.284]) + expect_weights = np.array([[1.061], [2.280]]) np.testing.assert_almost_equal(lr.w_, expect_weights, 3) y_pred = lr.predict(X) @@ -98,7 +139,7 @@ def test_l2_regularization_sgd(): random_seed=1) lr.fit(X, y) y_pred = lr.predict(X) - expect_weights = np.array([-2.73e-04, 2.40e-01, 3.53e-01]) + expect_weights = np.array([[0.24], [0.35]]) np.testing.assert_almost_equal(lr.w_, expect_weights, 2) y_pred = lr.predict(X) diff --git a/mlxtend/classifier/tests/test_multilayerperceptron.py b/mlxtend/classifier/tests/test_multilayerperceptron.py new file mode 100644 index 000000000..4a6c986b9 --- /dev/null +++ b/mlxtend/classifier/tests/test_multilayerperceptron.py @@ -0,0 +1,140 @@ +# Sebastian Raschka 2014-2016 +# mlxtend Machine Learning Library Extensions +# Author: Sebastian Raschka +# +# License: BSD 3 clause + +from mlxtend.classifier import MultiLayerPerceptron as MLP +from mlxtend.data import iris_data +import numpy as np +from mlxtend.utils import assert_raises + + +X, y = iris_data() +X = X[:, [0, 3]] # sepal length and petal width +X_bin = X[0:100] # class 0 and class 1 +y_bin = y[0:100] # class 0 and class 1 + +# standardize +X_bin[:, 0] = (X_bin[:, 0] - X_bin[:, 0].mean()) / X_bin[:, 0].std() +X_bin[:, 1] = (X_bin[:, 1] - X_bin[:, 1].mean()) / X_bin[:, 1].std() +X[:, 0] = (X[:, 0] - X[:, 0].mean()) / X[:, 0].std() +X[:, 1] = (X[:, 1] - X[:, 1].mean()) / X[:, 1].std() + + +def test_multiclass_gd_acc(): + mlp = MLP(epochs=20, + eta=0.05, + hidden_layers=[25], + minibatches=1, + random_seed=1) + mlp.fit(X, y) + assert round(mlp.cost_[0], 2) == 0.55, mlp.cost_[0] + assert round(mlp.cost_[-1], 2) == 0.02, mlp.cost_[-1] + assert (y == mlp.predict(X)).all() + + +def test_predict_proba(): + mlp = MLP(epochs=20, + eta=0.05, + hidden_layers=[25], + minibatches=1, + random_seed=1) + mlp.fit(X, y) + + pred = mlp.predict_proba(X[0, np.newaxis]) + exp = np.array([[0.56, 0.22, 0.22]]) + np.testing.assert_almost_equal(pred, exp, decimal=2) + + +def test_multiclass_sgd_acc(): + mlp = MLP(epochs=20, + eta=0.05, + hidden_layers=[25], + minibatches=len(y), + random_seed=1) + mlp.fit(X, y) + assert round(mlp.cost_[-1], 3) == 0.024, mlp.cost_[-1] + assert (y == mlp.predict(X)).all() + + +def test_multiclass_minibatch_acc(): + mlp = MLP(epochs=20, + eta=0.05, + hidden_layers=[25], + minibatches=5, + random_seed=1) + mlp.fit(X, y) + assert round(mlp.cost_[-1], 3) == 0.025, mlp.cost_[-1] + assert (y == mlp.predict(X)).all() + + +def test_num_hidden_layers(): + assert_raises(AttributeError, + 'Currently, only 1 hidden layer is supported', + MLP, 20, 0.05, [25, 10]) + + +def test_binary_gd(): + mlp = MLP(epochs=20, + eta=0.05, + hidden_layers=[25], + minibatches=5, + random_seed=1) + + mlp.fit(X_bin, y_bin) + assert (y_bin == mlp.predict(X_bin)).all() + + +def test_score_function(): + mlp = MLP(epochs=20, + eta=0.05, + hidden_layers=[25], + minibatches=5, + random_seed=1) + mlp.fit(X, y) + acc = mlp.score(X, y) + assert acc == 1.0, acc + + +def test_decay_function(): + mlp = MLP(epochs=20, + eta=0.05, + decrease_const=0.01, + hidden_layers=[25], + minibatches=5, + random_seed=1) + + mlp.fit(X, y) + assert mlp._decr_eta < mlp.eta + acc = mlp.score(X, y) + assert round(acc, 2) == 0.98, acc + + +def test_momentum_1(): + mlp = MLP(epochs=20, + eta=0.05, + momentum=0.1, + hidden_layers=[25], + minibatches=len(y), + random_seed=1) + + mlp.fit(X, y) + assert round(mlp.cost_[-1], 4) == 0.0059, mlp.cost_[-1] + assert (y == mlp.predict(X)).all() + + +def test_retrain(): + mlp = MLP(epochs=10, + eta=0.05, + hidden_layers=[25], + minibatches=len(y), + random_seed=1) + + mlp.fit(X, y) + cost_1 = mlp.cost_[-1] + mlp.fit(X, y, init_params=False) + + assert round(cost_1, 3) == 0.058, cost_1 + assert round(mlp.cost_[-1], 3) == 0.023, mlp.cost_[-1] + assert (y == mlp.predict(X)).all() diff --git a/mlxtend/classifier/tests/test_neuralnet_mlp.py b/mlxtend/classifier/tests/test_neuralnet_mlp.py deleted file mode 100644 index bc83c13cf..000000000 --- a/mlxtend/classifier/tests/test_neuralnet_mlp.py +++ /dev/null @@ -1,155 +0,0 @@ -# Sebastian Raschka 2014-2016 -# mlxtend Machine Learning Library Extensions -# Author: Sebastian Raschka -# -# License: BSD 3 clause - -from mlxtend.classifier import NeuralNetMLP -from mlxtend.data import iris_data -import numpy as np - - -# Iris Data -X, y = iris_data() - -# standardize -X_std = np.copy(X) -for i in range(4): - X_std[:, i] = (X[:, i] - X[:, i].mean()) / X[:, i].std() - - -def test_gradient_checking(): - nn3 = NeuralNetMLP(n_output=len(np.unique(y)), - n_features=X_std.shape[1], - n_hidden=25, - l2=0.0, - l1=0.0, - epochs=1, - eta=0.01, - alpha=0.0, - decrease_const=0.0, - minibatches=1, - shuffle_init=False, - shuffle_epoch=False, - random_seed=1) - - for epoch in range(10): - eucldist = nn3._gradient_checking(X=X_std, y=y) - assert eucldist < 1e-07, 'Gradient difference is %s' % eucldist - - -def test_gradient_descent(): - - nn = NeuralNetMLP(n_output=3, - n_features=X.shape[1], - n_hidden=10, - l2=0.0, - l1=0.0, - epochs=100, - eta=0.1, - minibatches=1, - shuffle_init=False, - shuffle_epoch=False, - random_seed=1) - - nn.fit(X_std, y) - y_pred = nn.predict(X_std) - acc = np.sum(y == y_pred, axis=0) / float(X_std.shape[0]) - assert round(acc, 2) == 0.99, "Acc: %s" % acc - - -def test_score_function(): - - nn = NeuralNetMLP(n_output=3, - n_features=X.shape[1], - n_hidden=10, - l2=0.0, - l1=0.0, - epochs=100, - eta=0.1, - minibatches=1, - shuffle_init=False, - shuffle_epoch=False, - random_seed=1) - - nn.fit(X_std, y) - acc = nn.score(X_std, y) - assert round(acc, 2) == 0.99, "Acc: %s" % acc - - -def test_shuffle(): - - nn = NeuralNetMLP(n_output=3, - n_features=X.shape[1], - n_hidden=10, - l2=0.0, - l1=0.0, - epochs=100, - eta=0.1, - minibatches=1, - shuffle_init=True, - shuffle_epoch=False, - random_seed=1) - - nn.fit(X_std, y) - y_pred = nn.predict(X_std) - acc = np.sum(y == y_pred, axis=0) / float(X_std.shape[0]) - assert round(acc, 2) == 0.99, "Acc: %s" % acc - - nn = NeuralNetMLP(n_output=3, - n_features=X.shape[1], - n_hidden=10, - l2=0.0, - l1=0.0, - epochs=100, - eta=0.1, - minibatches=1, - shuffle_init=True, - shuffle_epoch=True, - random_seed=1) - - nn.fit(X_std, y) - y_pred = nn.predict(X_std) - acc = np.sum(y == y_pred, axis=0) / float(X_std.shape[0]) - assert round(acc, 2) == 0.99, "Acc: %s" % acc - - -def test_minibatch(): - nn = NeuralNetMLP(n_output=3, - n_features=X.shape[1], - n_hidden=10, - l2=0.0, - l1=0.0, - epochs=30, - alpha=2.0, - eta=0.05, - minibatches=10, - shuffle_init=True, - shuffle_epoch=False, - random_seed=1) - - nn.fit(X_std, y) - y_pred = nn.predict(X_std) - acc = np.sum(y == y_pred, axis=0) / float(X_std.shape[0]) - assert round(acc, 2) == 0.99, "Acc: %s" % acc - - -def test_binary(): - X0 = X_std[0:100] # class 0 and class 1 - y0 = y[0:100] # class 0 and class 1 - - nn = NeuralNetMLP(n_output=2, - n_features=X0.shape[1], - n_hidden=10, - l2=0.0, - l1=0.0, - epochs=100, - eta=0.1, - minibatches=10, - shuffle_init=True, - shuffle_epoch=True, - random_seed=1) - nn.fit(X0, y0) - y_pred = nn.predict(X0) - acc = np.sum(y0 == y_pred, axis=0) / float(X0.shape[0]) - assert round(acc, 2) == 1.0, "Acc: %s" % acc diff --git a/mlxtend/classifier/tests/test_perceptron.py b/mlxtend/classifier/tests/test_perceptron.py index 7fadffee6..0ba7e962c 100644 --- a/mlxtend/classifier/tests/test_perceptron.py +++ b/mlxtend/classifier/tests/test_perceptron.py @@ -4,18 +4,16 @@ # # License: BSD 3 clause +import numpy as np from mlxtend.classifier import Perceptron from mlxtend.data import iris_data -import numpy as np -from nose.tools import raises +from mlxtend.utils import assert_raises # Iris Data X, y = iris_data() X = X[:, [0, 3]] # sepal length and petal width X = X[0:100] # class 0 and class 1 y0 = y[0:100] # class 0 and class 1 -y1 = np.where(y[0:100] == 0, -1, 1) # class -1 and class 1 -y2 = np.where(y[0:100] == 0, -2, 1) # class -2 and class 1 # standardize X_std = np.copy(X) @@ -23,62 +21,42 @@ X_std[:, 1] = (X[:, 1] - X[:, 1].mean()) / X[:, 1].std() -@raises(Exception) -def test_array_dimensions(): +def test_invalid_labels_1(): + y1 = np.where(y0 == 0, 2, 1) ppn = Perceptron(epochs=15, eta=0.01, random_seed=1) - ppn = ppn.fit(np.array([1, 2, 3]), [-1]) + assert_raises(AttributeError, + 'Labels not in {(0, 1)}.\nFound (1, 2)', + ppn.fit, + X, + y1, + {(0, 1)}) -def test_standardized_iris_data(): +def test_invalid_labels_2(): + y1 = np.where(y0 == 0, -1, 1) ppn = Perceptron(epochs=15, eta=0.01, random_seed=1) - ppn = ppn.fit(X_std, y1) # -1, 1 class - assert (y1 == ppn.predict(X_std)).all() + assert_raises(AttributeError, + 'y array must not contain negative labels.\nFound [-1 1]', + ppn.fit, + X, + y1, + {(-1, 1)}) -def test_standardized_iris_data_with_shuffle(): - ppn = Perceptron(epochs=15, eta=0.01, random_seed=1, shuffle=True) - ppn = ppn.fit(X_std, y1) # -1, 1 class - assert (y1 == ppn.predict(X_std)).all() +def test_standardized_iris_data(): + ppn = Perceptron(epochs=15, eta=0.01, random_seed=1) + ppn = ppn.fit(X_std, y0) + assert (y0 == ppn.predict(X_std)).all(), ppn.predict(X_std) def test_score_function(): - ppn = Perceptron(epochs=15, eta=0.01, random_seed=1, shuffle=True) - ppn = ppn.fit(X_std, y1) # -1, 1 class - acc = ppn.score(X_std, y1) + ppn = Perceptron(epochs=15, eta=0.01, random_seed=1) + ppn = ppn.fit(X_std, y0) + acc = ppn.score(X_std, y0) assert acc == 1.0, acc -def test_standardized_iris_data_with_zero_weights(): - ppn = Perceptron(epochs=15, eta=0.01, random_seed=1, zero_init_weight=True) - ppn = ppn.fit(X_std, y1) # -1, 1 class - assert (y1 == ppn.predict(X_std)).all() - - def test_nonstandardized_iris_data(): ppn = Perceptron(epochs=100, eta=0.01, random_seed=1) - ppn = ppn.fit(X, y1) # -1, 1 class - assert (y1 == ppn.predict(X)).all() - - -def test_0_1_class_iris_data(): - ppn = Perceptron(epochs=40, eta=0.05, random_seed=1) - ppn = ppn.fit(X, y0) # 0, 1 class - print(y0) - print(ppn.predict(X)) + ppn = ppn.fit(X, y0) assert (y0 == ppn.predict(X)).all() - - -def test_invalid_class(): - ppn = Perceptron(epochs=40, eta=0.01, random_seed=1) - try: - ppn.fit(X, y2) # -2, 1 class - assert(1 == 2) - except ValueError: - pass - - -def test_ary_persistency_in_shuffling(): - orig = X.copy() - ppn = Perceptron(epochs=40, eta=0.05, random_seed=1) - ppn = ppn.fit(X, y0) # 0, 1 class - np.testing.assert_almost_equal(orig, X, 6) diff --git a/mlxtend/classifier/tests/test_softmax_regression.py b/mlxtend/classifier/tests/test_softmax_regression.py index 3929ed6f2..1d7a019c7 100644 --- a/mlxtend/classifier/tests/test_softmax_regression.py +++ b/mlxtend/classifier/tests/test_softmax_regression.py @@ -4,9 +4,10 @@ # # License: BSD 3 clause +import numpy as np from mlxtend.classifier import SoftmaxRegression from mlxtend.data import iris_data -import numpy as np +from mlxtend.utils import assert_raises X, y = iris_data() @@ -21,9 +22,23 @@ X[:, 1] = (X[:, 1] - X[:, 1].mean()) / X[:, 1].std() +def test_labels(): + X = np.array([[1, 2], [3, 4]]) + y = np.array([-1, 1]) + lr = SoftmaxRegression(epochs=200, + eta=0.005, + minibatches=1, + random_seed=1) + assert_raises(AttributeError, + 'y array must not contain negative labels.\nFound [-1 1]', + lr.fit, + X, + y) + + def test_binary_logistic_regression_gd(): - t = np.array([[-0.2, 0.2], - [-3.09, 3.09]]) + t = np.array([[1.92, -1.91], + [-3.15, 3.13]]) lr = SoftmaxRegression(epochs=200, eta=0.005, minibatches=1, @@ -34,9 +49,27 @@ def test_binary_logistic_regression_gd(): assert (y_bin == lr.predict(X_bin)).all() +def test_refit_weights(): + t = np.array([[1.92, -1.91], + [-3.15, 3.13]]) + lr = SoftmaxRegression(epochs=100, + eta=0.005, + minibatches=1, + random_seed=1) + + lr.fit(X_bin, y_bin) + w1 = lr.w_[0][0] + w2 = lr.w_[0][0] + lr.fit(X_bin, y_bin, init_params=False) + + assert w1 != lr.w_[0][0] + assert w2 != lr.w_[1][0] + np.testing.assert_almost_equal(lr.w_, t, 2) + + def test_binary_logistic_regression_sgd(): - t = np.array([[-0.68, 0.68], - [-3.2, 3.2]]) + t = np.array([[0.13, -0.12], + [-3.06, 3.05]]) lr = SoftmaxRegression(epochs=200, eta=0.005, minibatches=len(y_bin), @@ -48,24 +81,22 @@ def test_binary_logistic_regression_sgd(): def test_binary_l2_regularization_gd(): - lr = SoftmaxRegression(eta=0.005, - epochs=200, + t = np.array([[1.23, -1.23], + [-2.28, 2.27]]) + lr = SoftmaxRegression(epochs=200, + eta=0.005, + l2=1.0, minibatches=1, - l2_lambda=1.0, random_seed=1) - lr.fit(X_bin, y_bin) - y_pred = lr.predict(X_bin) - expect_weights = np.array([[-0.316, 0.317], - [-2.265, 2.265]]) - np.testing.assert_almost_equal(lr.w_, expect_weights, 3) - acc = sum(y_pred == y_bin) / len(y_bin) - assert acc == 1.0 + lr.fit(X_bin, y_bin) + np.testing.assert_almost_equal(lr.w_, t, 2) + assert (y_bin == lr.predict(X_bin)).all() def test_multi_logistic_regression_gd_weights(): - t = np.array([[-1.04, -2.39, 3.43], - [-3.98, 2.31, 1.67]]) + t = np.array([[0.58, -3.72, 3.15], + [-3.52, 3.21, 0.28]]) lr = SoftmaxRegression(epochs=200, eta=0.005, minibatches=1, @@ -82,9 +113,9 @@ def test_multi_logistic_probas(): lr.fit(X, y) idx = [0, 50, 149] # sample labels: 0, 1, 2 y_pred = lr.predict_proba(X[idx]) - exp = np.array([[0.99, 0.01, 0.0], - [0.01, 0.89, 0.1], - [0.0, 0.02, 0.98]]) + exp = np.array([[1.0, 0.0, 0.0], + [0.08, 0.60, 0.32], + [0.0, 0.00, 0.99]]) np.testing.assert_almost_equal(y_pred, exp, 2) diff --git a/mlxtend/cluster/base.py b/mlxtend/cluster/base.py deleted file mode 100644 index 72b1e4193..000000000 --- a/mlxtend/cluster/base.py +++ /dev/null @@ -1,115 +0,0 @@ -# Sebastian Raschka 2014-2016 -# mlxtend Machine Learning Library Extensions -# -# Base Clusteer (Clutering Parent Class) -# Author: Sebastian Raschka -# -# License: BSD 3 clause - -import numpy as np -from sys import stderr -from time import time - - -class _BaseCluster(object): - - """Parent Class Base Cluster - - A base class that is implemented by - clustering child classes. - - """ - def __init__(self, print_progress=0, random_seed=None): - self.print_progress = print_progress - self.random_seed = random_seed - self._is_fitted = False - - def fit(self, X): - """Learn cluster centroids from training data. - - Parameters - ---------- - X : {array-like, sparse matrix}, shape = [n_samples, n_features] - Training vectors, where n_samples is the number of samples and - n_features is the number of features. - - Returns - ------- - self : object - - """ - self._is_fitted = False - self._check_array(X=X) - if self.random_seed is not None: - np.random.seed(self.random_seed) - self._fit(X=X) - self._is_fitted = True - return self - - def _fit(self, X): - # Implemented in child class - pass - - def predict(self, X): - """Predict cluster labels of X. - - Parameters - ---------- - X : {array-like, sparse matrix}, shape = [n_samples, n_features] - Training vectors, where n_samples is the number of samples and - n_features is the number of features. - - Returns - ---------- - cluster_labels : array-like, shape = [n_samples] - Predicted cluster labels. - - """ - self._check_array(X=X) - if not self._is_fitted: - raise AttributeError('Model is not fitted, yet.') - return self._predict(X) - - def _predict(self, X): - # Implemented in child class - pass - - def _shuffle(self, arrays): - """Shuffle arrays in unison.""" - r = np.random.permutation(len(arrays[0])) - return [ary[r] for ary in arrays] - - def _print_progress(self, iteration, n_iter, - cost=None, time_interval=10): - if self.print_progress > 0: - s = '\rIteration: %d/%d' % (iteration, n_iter) - if cost: - s += ' | Cost %.2f' % cost - if self.print_progress > 1: - if not hasattr(self, 'ela_str_'): - self.ela_str_ = '00:00:00' - if not iteration % time_interval: - ela_sec = time() - self.init_time_ - self.ela_str_ = self._to_hhmmss(ela_sec) - s += ' | Elapsed: %s' % self.ela_str_ - if self.print_progress > 2: - if not hasattr(self, 'eta_str_'): - self.eta_str_ = '00:00:00' - if not iteration % time_interval: - eta_sec = ((ela_sec / float(iteration)) * - n_iter - ela_sec) - self.eta_str_ = self._to_hhmmss(eta_sec) - s += ' | ETA: %s' % self.eta_str_ - stderr.write(s) - stderr.flush() - - def _to_hhmmss(self, sec): - m, s = divmod(sec, 60) - h, m = divmod(m, 60) - return "%d:%02d:%02d" % (h, m, s) - - def _check_array(self, X): - if isinstance(X, list): - raise ValueError('X must be a numpy array') - if not len(X.shape) == 2: - raise ValueError('X must be a 2D array. Try X[:, numpy.newaxis]') diff --git a/mlxtend/cluster/kmeans.py b/mlxtend/cluster/kmeans.py index ab7b8b691..51f02ba4e 100644 --- a/mlxtend/cluster/kmeans.py +++ b/mlxtend/cluster/kmeans.py @@ -6,9 +6,9 @@ # # License: BSD 3 clause -from .base import _BaseCluster + import numpy as np -from time import time +from .._base import _BaseCluster # from scipy.spatial.distance import euclidean @@ -25,6 +25,10 @@ class Kmeans(_BaseCluster): Number of iterations during cluster assignment. Cluster re-assignment stops automatically when the algorithm converged. + convergence_tolerance : float (default: 1e-05) + Compares current centroids with centroids of the previous iteration + using the given tolerance (a small positive float)to determine + if the algorithm converged early. random_seed : int (default: None) Set random state for the initial centroid assignment. print_progress : int (default: 0) @@ -48,27 +52,31 @@ class Kmeans(_BaseCluster): """ - def __init__(self, k, max_iter=10, random_seed=None, print_progress=0): + def __init__(self, k, max_iter=10, + convergence_tolerance=1e-05, + random_seed=None, print_progress=0): super(Kmeans, self).__init__(print_progress=print_progress, random_seed=random_seed) self.k = k self.max_iter = max_iter + self.convergence_tolerance = convergence_tolerance - def _fit(self, X): + def _fit(self, X, init_params=True): """Learn cluster centroids from training data. Called in self.fit """ - self.iterations_ = 0 + n_samples = X.shape[0] - # initialize centroids - idx = np.random.choice(n_samples, self.k, replace=False) - self.centroids_ = X[idx] + if init_params: + self.iterations_ = 0 + # initialize centroids + idx = np.random.choice(n_samples, self.k, replace=False) + self.centroids_ = X[idx] for _ in range(self.max_iter): - # assign samples to cluster centroids self.clusters_ = {i: [] for i in range(self.k)} for sample_idx, cluster_idx in enumerate( @@ -80,7 +88,10 @@ def _fit(self, X): for k in sorted(self.clusters_.keys())]) # stop if cluster assignment doesn't change - if (self.centroids_ == new_centroids).all(): + + if np.allclose(self.centroids_, new_centroids, + rtol=self.convergence_tolerance, + atol=1e-08, equal_nan=False): break else: self.centroids_ = new_centroids diff --git a/mlxtend/cluster/tests/test_base.py b/mlxtend/cluster/tests/test_base.py deleted file mode 100644 index c4be47b61..000000000 --- a/mlxtend/cluster/tests/test_base.py +++ /dev/null @@ -1,71 +0,0 @@ -# Sebastian Raschka 2014-2016 -# mlxtend Machine Learning Library Extensions -# Author: Sebastian Raschka -# -# License: BSD 3 clause - -from mlxtend.cluster.base import _BaseCluster -import numpy as np -from mlxtend.utils import assert_raises - - -def test_init(): - cl = _BaseCluster(print_progress=0, random_seed=1) - - -def test_check_array_1(): - X = np.array([1, 2, 3]) - cl = _BaseCluster(print_progress=0, random_seed=1) - assert_raises(ValueError, - 'X must be a 2D array. Try X[:, numpy.newaxis]', - cl._check_array, - X) - - -def test_check_array_2(): - X = list([[1], [2], [3]]) - cl = _BaseCluster(print_progress=0, random_seed=1) - - assert_raises(ValueError, - 'X must be a numpy array', - cl._check_array, - X) - - -def test_check_array_3(): - X = np.array([[1], [2], [3]]) - cl = _BaseCluster(print_progress=0, random_seed=1) - cl._check_array(X) - - -def test_fit(): - X = np.array([[1], [2], [3]]) - tfr = _BaseCluster(print_progress=0, random_seed=1) - tfr.fit(X) - - -def test_predict_1(): - X = np.array([[1], [2], [3]]) - cl = _BaseCluster(print_progress=0, random_seed=1) - - assert_raises(AttributeError, - 'Model is not fitted, yet.', - cl.predict, - X) - - -def test_predict_2(): - X = np.array([[1], [2], [3]]) - cl = _BaseCluster(print_progress=0, random_seed=1) - - cl.fit(X) - cl.predict(X) - - -def test_shuffle(): - X = np.array([[1], [2], [3]]) - y = np.array([1, 2, 3]) - cl = _BaseCluster(print_progress=0, random_seed=1) - X_sh, y_sh = cl._shuffle(arrays=[X, np.array(y)]) - np.testing.assert_equal(X_sh, np.array([[1], [3], [2]])) - np.testing.assert_equal(y_sh, np.array([1, 3, 2])) diff --git a/mlxtend/cluster/tests/test_kmeans.py b/mlxtend/cluster/tests/test_kmeans.py index 90593c21b..1d564e7e2 100644 --- a/mlxtend/cluster/tests/test_kmeans.py +++ b/mlxtend/cluster/tests/test_kmeans.py @@ -56,4 +56,28 @@ def test_three_blobs_centroids(): [0.9329651, 4.35420713]]) km.fit(X) + assert km.iterations_ == 2 np.testing.assert_almost_equal(centroids, km.centroids_, decimal=2) + + +def test_continue_training(): + km = Kmeans(k=3, + max_iter=1, + random_seed=1, + print_progress=0) + + first_iter = np.array([[-1.33, 3.26], + [1.95, 0.99], + [1.09, 4.26]]) + + second_iter = np.array([[-1.5947298, 2.92236966], + [2.06521743, 0.96137409], + [0.9329651, 4.35420713]]) + + km.fit(X) + np.testing.assert_almost_equal(first_iter, km.centroids_, decimal=2) + assert km.iterations_ == 1, km.iterations_ + + km.fit(X, init_params=False) + np.testing.assert_almost_equal(second_iter, km.centroids_, decimal=2) + assert km.iterations_ == 2, km.iterations_ diff --git a/mlxtend/regressor/base.py b/mlxtend/regressor/base.py deleted file mode 100644 index cfa3d700f..000000000 --- a/mlxtend/regressor/base.py +++ /dev/null @@ -1,129 +0,0 @@ -# Sebastian Raschka 2014-2016 -# mlxtend Machine Learning Library Extensions -# -# Base Regressor (Regressor Parent Class) -# Author: Sebastian Raschka -# -# License: BSD 3 clause - -import numpy as np -from sys import stderr -from time import time - - -class _BaseRegressor(object): - - """Parent Class Base Regressor - - A base class that is implemented by - regressor child classes. - - """ - def __init__(self, print_progress=0): - self.print_progress = print_progress - - def fit(self, X, y, init_weights=True): - """Learn weight coefficients from training data. - - Parameters - ---------- - X : {array-like, sparse matrix}, shape = [n_samples, n_features] - Training vectors, where n_samples is the number of samples and - n_features is the number of features. - y : array-like, shape = [n_samples] - Target values. - init_weights : bool (default: None) - Reinitialize weights - - Returns - ------- - self : object - - """ - if not (init_weights is None or isinstance(init_weights, bool)): - raise AttributeError("init_weights must be True, False, or None") - init_weights - self._check_arrays(X=X, y=y) - return self - - def predict(self, X): - """Predict class labels of X. - - Parameters - ---------- - X : {array-like, sparse matrix}, shape = [n_samples, n_features] - Training vectors, where n_samples is the number of samples and - n_features is the number of features. - - Returns - ---------- - class_labels : array-like, shape = [n_samples] - Predicted class labels. - - """ - self._check_arrays(X) - return self._predict(X) - - def _predict(X, y): - # Implemented in child class - pass - - def _shuffle(self, arrays): - """Shuffle arrays in unison.""" - r = np.random.permutation(len(arrays[0])) - return [ary[r] for ary in arrays] - - def _print_progress(self, epoch, cost=None, time_interval=10): - if self.print_progress > 0: - s = '\rEpoch: %d/%d' % (epoch, self.epochs) - if cost: - s += ' | Cost %.2f' % cost - if self.print_progress > 1: - if not hasattr(self, 'ela_str_'): - self.ela_str_ = '00:00:00' - if not epoch % time_interval: - ela_sec = time() - self.init_time_ - self.ela_str_ = self._to_hhmmss(ela_sec) - s += ' | Elapsed: %s' % self.ela_str_ - if self.print_progress > 2: - if not hasattr(self, 'eta_str_'): - self.eta_str_ = '00:00:00' - if not epoch % time_interval: - eta_sec = ((ela_sec / float(epoch)) * - self.epochs - ela_sec) - self.eta_str_ = self._to_hhmmss(eta_sec) - s += ' | ETA: %s' % self.eta_str_ - stderr.write(s) - stderr.flush() - - def _to_hhmmss(self, sec): - m, s = divmod(sec, 60) - h, m = divmod(m, 60) - return "%d:%02d:%02d" % (h, m, s) - - def _check_arrays(self, X, y=None): - if isinstance(X, list): - raise ValueError('X must be a numpy array') - if not len(X.shape) == 2: - raise ValueError('X must be a 2D array. Try X[:,numpy.newaxis]') - try: - if y is None: - return - except(AttributeError): - if not len(y.shape) == 1: - raise ValueError('y must be a 1D array.') - - if not len(y) == X.shape[0]: - raise ValueError('X and y must contain the same number of samples') - - def _init_weights(self, shape, zero_init_weight=False, - coef=0.001, - dtype='float64', seed=None): - """Initialize weight coefficients.""" - if seed: - np.random.seed(seed) - if zero_init_weight: - w = np.zeros(shape) - else: - w = coef * np.random.normal(loc=0.0, scale=1.0, size=shape) - return w.astype(dtype) diff --git a/mlxtend/regressor/linear_regression.py b/mlxtend/regressor/linear_regression.py index bddf368cc..a6b5b163a 100644 --- a/mlxtend/regressor/linear_regression.py +++ b/mlxtend/regressor/linear_regression.py @@ -8,7 +8,7 @@ import numpy as np from time import time -from .base import _BaseRegressor +from .._base import _BaseRegressor # Sebastian Raschka 2014-2016 # mlxtend Machine Learning Library Extensions @@ -29,6 +29,8 @@ class LinearRegression(_BaseRegressor): solver rate (between 0.0 and 1.0) epochs : int (default: 50) Passes over the training dataset. + Prior to each epoch, the dataset is shuffled + if `minibatches > 1` to prevent cycles in stochastic gradient descent. minibatches : int (default: None) The number of minibatches for gradient-based optimization. If None: Normal Equations (closed-form solution) @@ -37,10 +39,6 @@ class LinearRegression(_BaseRegressor): If 1 < minibatches < len(y): Minibatch learning random_seed : int (default: None) Set random state for shuffling and initializing the weights. - zero_init_weight : bool (default: False) - If True, weights are initialized to zero instead of small random - numbers in the interval [-0.1, 0.1]; - ignored if solver='normal equation' print_progress : int (default: 0) Prints progress in fitting to stderr if not solver='normal equation' 0: No output @@ -50,8 +48,10 @@ class LinearRegression(_BaseRegressor): Attributes ----------- - w_ : 1d-array - Weights after fitting. + w_ : 2d-array, shape={n_features, 1} + Model weights after fitting. + b_ : 1d-array, shape={1,} + Bias unit after fitting. cost_ : list Sum of squared errors after each epoch; ignored if solver='normal equation' @@ -59,104 +59,66 @@ class LinearRegression(_BaseRegressor): """ def __init__(self, eta=0.01, epochs=50, minibatches=None, random_seed=None, - zero_init_weight=False, print_progress=0): + print_progress=0): + super(LinearRegression, self).__init__(print_progress=print_progress, + random_seed=random_seed) - self.random_seed = random_seed self.eta = eta self.epochs = epochs self.minibatches = minibatches - self.print_progress = print_progress - self.zero_init_weight = zero_init_weight - - def fit(self, X, y, init_weights=True): - """Learn weight coefficients from training data. - - Parameters - ---------- - X : {array-like, sparse matrix}, shape = [n_samples, n_features] - Training vectors, where n_samples is the number of samples and - n_features is the number of features. - y : array-like, shape = [n_samples] - Target values. - init_weights : bool (default: True) - Re-initializes weights prior to fitting. Set False to continue - training with weights from a previous fitting. - - Returns - ------- - self : object - - """ - self._check_arrays(X, y) - - # initialize weights - if init_weights: - self.w_ = self._init_weights( - shape=1 + X.shape[1], - zero_init_weight=self.zero_init_weight, - seed=self.random_seed) - - self.cost_ = [] - - # random seed for shuffling - if self.random_seed: - np.random.seed(self.random_seed) + + def _fit(self, X, y, init_params=True): + + if init_params: + self.b_, self.w_ = self._init_params( + weights_shape=(X.shape[1], 1), + bias_shape=(1,), + random_seed=self.random_seed) + self.cost_ = [] if self.minibatches is None: - self.w_ = self._normal_equation(X, y) + self.b_, self.w_ = self._normal_equation(X, y) # Gradient descent or stochastic gradient descent learning else: - n_idx = list(range(y.shape[0])) self.init_time_ = time() for i in range(self.epochs): - if self.minibatches > 1: - n_idx = np.random.permutation(n_idx) - minis = np.array_split(n_idx, self.minibatches) - for idx in minis: - y_val = self.activation(X[idx]) + for idx in self._yield_minibatches_idx( + n_batches=self.minibatches, + data_ary=y, + shuffle=True): + + y_val = self._net_input(X[idx]) errors = (y[idx] - y_val) - self.w_[1:] += self.eta * X[idx].T.dot(errors) - self.w_[0] += self.eta * errors.sum() + self.w_ += (self.eta * + X[idx].T.dot(errors).reshape(self.w_.shape)) + self.b_ += self.eta * errors.sum() - cost = self._sum_squared_error_cost(y, self.activation(X)) + cost = self._sum_squared_error_cost(y, self._net_input(X)) self.cost_.append(cost) if self.print_progress: - self._print_progress(epoch=i + 1, cost=cost) + self._print_progress(iteration=(i + 1), + n_iter=self.epochs, + cost=cost) return self def _normal_equation(self, X, y): """Solve linear regression analytically.""" Xb = np.hstack((np.ones((X.shape[0], 1)), X)) + w = np.zeros(X.shape[1]) z = np.linalg.inv(np.dot(Xb.T, Xb)) - w = np.dot(z, np.dot(Xb.T, y)) - return w + params = np.dot(z, np.dot(Xb.T, y)) + b, w = np.array([params[0]]), params[1:].reshape(X.shape[1], 1) + return b, w - def net_input(self, X): + def _net_input(self, X): """Compute the linear net input.""" - return np.dot(X, self.w_[1:]) + self.w_[0] - - def activation(self, X): - """Compute the linear activation from the net input.""" - return self.net_input(X) - - def predict(self, X): - """Predict class labels of X. - - Parameters - ---------- - X : {array-like, sparse matrix}, shape = [n_samples, n_features] - Training vectors, where n_samples is the number of samples and - n_features is the number of features. - - Returns - ---------- - float : Predicted target value. + return (np.dot(X, self.w_) + self.b_).flatten() - """ - return self.net_input(X) + def _predict(self, X): + return self._net_input(X) def _sum_squared_error_cost(self, y, y_val): errors = (y - y_val) diff --git a/mlxtend/regressor/tests/test_linear_regression.py b/mlxtend/regressor/tests/test_linear_regression.py index f7b681956..2926f2ef9 100644 --- a/mlxtend/regressor/tests/test_linear_regression.py +++ b/mlxtend/regressor/tests/test_linear_regression.py @@ -13,70 +13,87 @@ X, y = boston_housing_data() X_rm = X[:, 5][:, np.newaxis] X_rm_lstat = X[:, [5, -1]] -expect_rm = np.array([-34.671, 9.102]) -expect_rm_lstat = np.array([-1.358, 5.095, -0.642]) # standardized variables X_rm_std = (X_rm - X_rm.mean(axis=0)) / X_rm.std(axis=0) X_rm_lstat_std = ((X_rm_lstat - X_rm_lstat.mean(axis=0)) / X_rm_lstat.std(axis=0)) y_std = (y - y.mean()) / y.std() -expect_rm_std = np.array([0.000, 0.695]) -expect_rm_lstat_std = np.array([0.000, 0.389, -0.499]) def test_univariate_normal_equation(): + w_exp = np.array([[9.102]]) + b_exp = np.array([-34.671]) ne_lr = LinearRegression(minibatches=None) ne_lr.fit(X_rm, y) - assert_almost_equal(ne_lr.w_, expect_rm, decimal=3) + assert_almost_equal(ne_lr.w_, w_exp, decimal=3) + assert_almost_equal(ne_lr.b_, b_exp, decimal=3) def test_univariate_normal_equation_std(): + w_exp = np.array([[0.695]]) + b_exp = np.array([0.00]) ne_lr = LinearRegression(minibatches=None) ne_lr.fit(X_rm_std, y_std) - assert_almost_equal(ne_lr.w_, expect_rm_std, decimal=3) + assert_almost_equal(ne_lr.w_, w_exp, decimal=3) + assert_almost_equal(ne_lr.b_, b_exp, decimal=3) def test_univariate_gradient_descent(): + w_exp = np.array([[0.695]]) + b_exp = np.array([0.00]) gd_lr = LinearRegression(minibatches=1, eta=0.001, epochs=500, random_seed=0) gd_lr.fit(X_rm_std, y_std) - assert_almost_equal(gd_lr.w_, expect_rm_std, decimal=3) + assert_almost_equal(gd_lr.w_, w_exp, decimal=3) + assert_almost_equal(gd_lr.b_, b_exp, decimal=3) def test_univariate_stochastic_gradient_descent(): + w_exp = np.array([[0.695]]) + b_exp = np.array([0.00]) sgd_lr = LinearRegression(minibatches=len(y), eta=0.0001, epochs=150, random_seed=0) sgd_lr.fit(X_rm_std, y_std) - assert_almost_equal(sgd_lr.w_, expect_rm_std, decimal=2) + assert_almost_equal(sgd_lr.w_, w_exp, decimal=3) + assert_almost_equal(sgd_lr.b_, b_exp, decimal=3) def test_multivariate_normal_equation(): + w_exp = np.array([[5.095], [-0.642]]) + b_exp = np.array([-1.358]) ne_lr = LinearRegression(minibatches=None) ne_lr.fit(X_rm_lstat, y) - assert_almost_equal(ne_lr.w_, expect_rm_lstat, decimal=3) + assert_almost_equal(ne_lr.w_, w_exp, decimal=3) + assert_almost_equal(ne_lr.b_, b_exp, decimal=3) def test_multivariate_gradient_descent(): + w_exp = np.array([[0.389], [-0.499]]) + b_exp = np.array([0.000]) gd_lr = LinearRegression(eta=0.001, epochs=500, minibatches=1, random_seed=0) gd_lr.fit(X_rm_lstat_std, y_std) - assert_almost_equal(gd_lr.w_, expect_rm_lstat_std, decimal=3) + assert_almost_equal(gd_lr.w_, w_exp, decimal=3) + assert_almost_equal(gd_lr.b_, b_exp, decimal=3) def test_multivariate_stochastic_gradient_descent(): + w_exp = np.array([[0.389], [-0.499]]) + b_exp = np.array([0.000]) sgd_lr = LinearRegression(eta=0.0001, epochs=500, minibatches=len(y), random_seed=0) sgd_lr.fit(X_rm_lstat_std, y_std) - assert_almost_equal(sgd_lr.w_, expect_rm_lstat_std, decimal=2) + assert_almost_equal(sgd_lr.w_, w_exp, decimal=3) + assert_almost_equal(sgd_lr.b_, b_exp, decimal=3) def test_ary_persistency_in_shuffling(): diff --git a/mlxtend/tf_classifier/tests/tests_tf_multilayerperceptron.py b/mlxtend/tf_classifier/tests/tests_tf_multilayerperceptron.py index f0e12bfd0..1ec59ed84 100644 --- a/mlxtend/tf_classifier/tests/tests_tf_multilayerperceptron.py +++ b/mlxtend/tf_classifier/tests/tests_tf_multilayerperceptron.py @@ -117,6 +117,20 @@ def test_multiclass_gd_acc(): assert (y == mlp.predict(X)).all() +def test_continue_learning(): + mlp = MLP(epochs=25, + eta=0.5, + hidden_layers=[5], + optimizer='gradientdescent', + activations=['logistic'], + minibatches=1, + random_seed=1) + mlp.fit(X, y) + assert np.sum(y == mlp.predict(X)) == 144, np.sum(y == mlp.predict(X)) + mlp.fit(X, y, init_params=False) + assert np.sum(y == mlp.predict(X)) == 150, np.sum(y == mlp.predict(X)) + + def test_multiclass_gd_dropout(): mlp = MLP(epochs=100, eta=0.5, @@ -209,32 +223,6 @@ def test_fail_minibatches(): assert (y == mlp.predict(X)).all() -def test_train_acc(): - mlp = MLP(epochs=3, - eta=0.5, - hidden_layers=[5], - optimizer='gradientdescent', - activations=['logistic'], - minibatches=1, - random_seed=1) - - mlp.fit(X, y) - assert len(mlp.train_acc_) == 3 - - -def test_valid_acc(): - mlp = MLP(epochs=3, - eta=0.5, - hidden_layers=[5], - optimizer='gradientdescent', - activations=['logistic'], - minibatches=1, - random_seed=1) - - mlp.fit(X, y, X_valid=X[:100], y_valid=y[:100]) - assert len(mlp.valid_acc_) == 3 - - def test_multiclass_gd_nolearningdecay(): mlp = MLP(epochs=5, eta=0.5, diff --git a/mlxtend/tf_classifier/tests/tests_tf_softmax.py b/mlxtend/tf_classifier/tests/tests_tf_softmax.py index dab4ec7e1..412adfbc8 100644 --- a/mlxtend/tf_classifier/tests/tests_tf_softmax.py +++ b/mlxtend/tf_classifier/tests/tests_tf_softmax.py @@ -31,7 +31,21 @@ def test_binary_logistic_regression_gd(): random_seed=1) lr.fit(X_bin, y_bin) - np.testing.assert_almost_equal(lr.weights_, t, 2) + np.testing.assert_almost_equal(lr.w_, t, 2) + assert (y_bin == lr.predict(X_bin)).all() + + +def test_init_params(): + t = np.array([[-0.28, 0.95], + [-2.23, 2.4]]) + lr = TfSoftmaxRegression(epochs=50, + eta=0.5, + minibatches=1, + random_seed=1) + + lr.fit(X_bin, y_bin) + lr.fit(X_bin, y_bin, init_params=False) + np.testing.assert_almost_equal(lr.w_, t, 2) assert (y_bin == lr.predict(X_bin)).all() @@ -44,7 +58,7 @@ def test_binary_logistic_regression_sgd(): random_seed=1) lr.fit(X_bin, y_bin) # 0, 1 class - np.testing.assert_almost_equal(lr.weights_, t, 2) + np.testing.assert_almost_equal(lr.w_, t, 2) assert (y_bin == lr.predict(X_bin)).all() @@ -56,7 +70,7 @@ def test_multi_logistic_regression_gd_weights(): minibatches=1, random_seed=1) lr.fit(X, y) - np.testing.assert_almost_equal(lr.weights_, t, 2) + np.testing.assert_almost_equal(lr.w_, t, 2) def test_multi_logistic_probas(): @@ -102,16 +116,6 @@ def test_train_acc(): np.testing.assert_almost_equal(exp, lr.train_acc_, decimal=2) -def test_valid_acc(): - lr = TfSoftmaxRegression(epochs=3, - eta=0.5, - minibatches=1, - random_seed=1) - lr.fit(X, y, X_valid=X[:100], y_valid=y[:100]) - exp = [0.5, 0.5, 0.5] - np.testing.assert_almost_equal(exp, lr.valid_acc_, decimal=2) - - @raises(AttributeError) def test_fail_minibatches(): lr = TfSoftmaxRegression(epochs=100, diff --git a/mlxtend/tf_classifier/tf_base.py b/mlxtend/tf_classifier/tf_base.py deleted file mode 100644 index f4b7d3c62..000000000 --- a/mlxtend/tf_classifier/tf_base.py +++ /dev/null @@ -1,160 +0,0 @@ -# Sebastian Raschka 2014-2016 -# mlxtend Machine Learning Library Extensions -# -# Base Classifier (Classifier Parent Class) -# Author: Sebastian Raschka -# -# License: BSD 3 clause - -import numpy as np -from sys import stderr -from time import time - - -class _TfBaseClassifier(object): - - """Parent Class Base Classifier - - A base class that is important by - classifier child classes. - - """ - def __init__(self, print_progress=0): - self.print_progress = print_progress - - def fit(self, X, y, init_weights=True): - """Learn weight coefficients from training data. - - Parameters - ---------- - X : {array-like, sparse matrix}, shape = [n_samples, n_features] - Training vectors, where n_samples is the number of samples and - n_features is the number of features. - y : array-like, shape = [n_samples] - Target values. - init_weights : bool (default: None) - Reinitialize weights - - Returns - ------- - self : object - - """ - if not (init_weights is None or isinstance(init_weights, bool)): - raise AttributeError("init_weights must be True, False, or None") - init_weights - self._check_arrays(X=X, y=y) - return self - - def predict(self, X): - """Predict class labels of X. - - Parameters - ---------- - X : {array-like, sparse matrix}, shape = [n_samples, n_features] - Training vectors, where n_samples is the number of samples and - n_features is the number of features. - - Returns - ---------- - class_labels : array-like, shape = [n_samples] - Predicted class labels. - - """ - self._check_arrays(X) - return self._predict(X) - - def _predict(X, y): - # Implemented in child class - pass - - def _shuffle(self, arrays): - """Shuffle arrays in unison.""" - r = np.random.permutation(len(arrays[0])) - return [ary[r] for ary in arrays] - - def _print_progress(self, epoch, cost=None, train_acc=None, - valid_acc=None, time_interval=10): - if self.print_progress > 0: - s = '\rEpoch: %d/%d' % (epoch, self.epochs) - if cost is not None: - s += ' | Cost %.2f' % cost - if train_acc is not None: - s += ' | TrainAcc %.2f' % train_acc - if valid_acc is not None: - s += ' | ValidAcc %.2f' % valid_acc - if self.print_progress > 1: - if not hasattr(self, 'ela_str_'): - self.ela_str_ = '00:00:00' - if not epoch % time_interval: - ela_sec = time() - self.init_time_ - self.ela_str_ = self._to_hhmmss(ela_sec) - s += ' | Elapsed: %s' % self.ela_str_ - if self.print_progress > 2: - if not hasattr(self, 'eta_str_'): - self.eta_str_ = '00:00:00' - if not epoch % time_interval: - eta_sec = ((ela_sec / float(epoch)) * - self.epochs - ela_sec) - self.eta_str_ = self._to_hhmmss(eta_sec) - s += ' | ETA: %s' % self.eta_str_ - - stderr.write(s) - stderr.flush() - - def _to_hhmmss(self, sec): - m, s = divmod(sec, 60) - h, m = divmod(m, 60) - return "%d:%02d:%02d" % (h, m, s) - - def _check_arrays(self, X, y=None): - if isinstance(X, list): - raise ValueError('X must be a numpy array') - if not len(X.shape) == 2: - raise ValueError('X must be a 2D array. Try X[:,numpy.newaxis]') - try: - if y is None: - return - except(AttributeError): - if not len(y.shape) == 1: - raise ValueError('y must be a 1D array.') - - if not len(y) == X.shape[0]: - raise ValueError('X and y must contain the same number of samples') - - def _tensor_to_numpy(self, var): - sess = tf.Session() - with sess.as_default(): - tf.initialize_all_variables().run() - return var.eval() - - def _one_hot(self, y, n_labels): - mat = np.zeros((len(y), n_labels)) - for i, val in enumerate(y): - mat[i, val] = 1 - return mat.astype(float) - - def _to_classlabels(self, z): - return z.argmax(axis=1) - - def score(self, X, y): - """ Compute the prediction accuracy - - Parameters - ---------- - X : {array-like, sparse matrix}, shape = [n_samples, n_features] - Training vectors, where n_samples is the number of samples and - n_features is the number of features. - y : array-like, shape = [n_samples] - Target values (true class labels). - - Returns - --------- - acc : float - The prediction accuracy as a float - between 0.0 and 1.0 (perfect score). - - """ - y_pred = self.predict(X) - acc = np.sum(y == y_pred, axis=0) / float(X.shape[0]) - return acc diff --git a/mlxtend/tf_classifier/tf_multilayerperceptron.py b/mlxtend/tf_classifier/tf_multilayerperceptron.py index 03f7b815e..1d38b128c 100644 --- a/mlxtend/tf_classifier/tf_multilayerperceptron.py +++ b/mlxtend/tf_classifier/tf_multilayerperceptron.py @@ -9,10 +9,13 @@ import tensorflow as tf import numpy as np from time import time -from .tf_base import _TfBaseClassifier +from .._base import _BaseClassifier +from .._base import _BaseMultiClass +from .._base import _BaseMultiLayer -class TfMultiLayerPerceptron(_TfBaseClassifier): +class TfMultiLayerPerceptron(_BaseClassifier, + _BaseMultiClass, _BaseMultiLayer): """Multi-layer perceptron classifier. Parameters @@ -21,9 +24,15 @@ class TfMultiLayerPerceptron(_TfBaseClassifier): Learning rate (between 0.0 and 1.0) epochs : int (default: 50) Passes over the training dataset. + Prior to each epoch, the dataset is shuffled + if `minibatches > 1` to prevent cycles in stochastic gradient descent. hidden_layers : list (default: [50, 10]) Number of units per hidden layer. By default 50 units in the first hidden layer, and 10 hidden units in the second hidden layer. + n_classes : int (default: None) + A positive integer to declare the number of class labels + if not all class labels are present in a partial training set. + Gets the number of class labels automatically if None. activations : list (default: ['logistic', 'logistic']) Activation functions for each layer. Available actiavtion functions: @@ -63,9 +72,9 @@ class TfMultiLayerPerceptron(_TfBaseClassifier): Attributes ----------- - weights_ : 2d-array, shape=[n_features, n_classes] + w_ : 2d-array, shape=[n_features, n_classes] Weights after fitting. - biases_ : 1D-array, shape=[n_classes] + b_ : 1D-array, shape=[n_classes] Bias units after fitting. cost_ : list List of floats, the average cross_entropy for each epoch. @@ -73,6 +82,7 @@ class TfMultiLayerPerceptron(_TfBaseClassifier): """ def __init__(self, eta=0.5, epochs=50, hidden_layers=[50, 10], + n_classes=None, activations=['logistic', 'logistic'], optimizer='gradientdescent', momentum=0.0, l1=0.0, l2=0.0, @@ -80,12 +90,16 @@ def __init__(self, eta=0.5, epochs=50, decay=[0.0, 1.0], minibatches=1, random_seed=None, print_progress=0, dtype=None): + + super(TfMultiLayerPerceptron, self).__init__( + print_progress=print_progress, random_seed=random_seed) self.eta = eta if len(hidden_layers) != len(activations): raise AttributeError('Number of hidden_layers and' ' n_activations must be equal.') self.hidden_layers = hidden_layers self.momentum = momentum + self.n_classes = n_classes self.activations = self._get_activations(activations) self.l1 = l1 self.l2 = l2 @@ -95,16 +109,12 @@ def __init__(self, eta=0.5, epochs=50, self._init_optimizer(self.optimizer) self.epochs = epochs self.minibatches = minibatches - self.random_seed = random_seed - self.print_progress = print_progress if dtype is None: self.dtype = tf.float32 else: self.dtype = dtype - return - def _init_optimizer(self, optimizer): self.global_step_ = tf.Variable(0, trainable=False) if self.decay[0] > 0.0: @@ -151,99 +161,50 @@ def _get_activations(self, activations): act[idx + 1] = adict[a] return act - def fit(self, X, y, init_weights=True, - override_minibatches=None, n_classes=None, - X_valid=None, y_valid=None): - """Learn weight coefficients from training data. - - Parameters - ---------- - X : {array-like, sparse matrix}, shape = [n_samples, n_features] - Training vectors, where n_samples is the number of samples and - n_features is the number of features. - y : array-like, shape = [n_samples] - Target values. - init_weights : bool (default: True) - (Re)initializes weights to small random floats if True. - override_minibatches : int or None (default: None) - Uses a different number of minibatches for this session. - n_classes : int (default: None) - A positive integer to declare the number of class labels - if not all class labels are present in a partial training set. - Gets the number of class labels automatically if None. - Ignored if init_weights=False. - X_valid : {array-like, sparse matrix}, shape = [n_samples, n_features] - Optional validation set to store the validation accuracy values - for each epoch via self.valid_acc_ - y_valid : array-like, shape = [n_samples] - Target values for X_valid - - Returns - ------- - self : object - - """ - self._check_arrays(X, y) - if override_minibatches: - n_batches = override_minibatches - else: - n_batches = self.minibatches - + def _fit(self, X, y, init_params=True): + self._check_target_array(y) + n_batches = self.minibatches if y.shape[0] % n_batches != 0: raise AttributeError("Training set size %d cannot" " be divided into %d minibatches without" " remainder" % (y.shape[0], n_batches)) - if hasattr(X_valid, 'shape'): - validation = True - else: - validation = False - # Construct the Graph g = tf.Graph() with g.as_default(): self.optimizer_ = self._init_optimizer(self.optimizer) - if init_weights: - if n_classes: - self._n_classes = n_classes - else: - self._n_classes = np.max(y) + 1 + if init_params: + if self.n_classes is None: + self.n_classes = np.max(y) + 1 + self._n_features = X.shape[1] self._weight_maps, self._bias_maps = self._layermapping( n_features=self._n_features, - n_classes=self._n_classes, + n_classes=self.n_classes, hidden_layers=self.hidden_layers) - tf_weights, tf_biases = self._initialize_weights( + tf_weights, tf_biases = self._init_params_from_layermapping( weight_maps=self._weight_maps, bias_maps=self._bias_maps) self.cost_ = [] - self.train_acc_ = [] - self.valid_acc_ = [] + else: tf_weights, tf_biases = self._reuse_weights( - weights=self.weights_, - biases=self.biases_) + weights=self.w_, + biases=self.b_) # Prepare the training data - y_enc = self._one_hot(y, self._n_classes) + y_enc = self._one_hot(y, self.n_classes, dtype=np.float) n_idx = list(range(y.shape[0])) tf_X = tf.convert_to_tensor(value=X, dtype=self.dtype) tf_y = tf.convert_to_tensor(value=y_enc, dtype=self.dtype) - if validation: - tf_X_valid = tf.convert_to_tensor(value=X_valid, - dtype=self.dtype) - y_valid_enc = self._one_hot(y_valid, self._n_classes) - tf_y_valid = tf.convert_to_tensor(value=y_valid_enc, - dtype=self.dtype) - tf_idx = tf.placeholder(tf.int32, shape=[int(y.shape[0] / n_batches)]) X_batch = tf.gather(params=tf_X, indices=tf_idx) y_batch = tf.gather(params=tf_y, indices=tf_idx) # Setup the graph for minimizing cross entropy cost - net = self._predict(tf_X=tf_X, + net = self._predict(tf_X=X_batch, tf_weights=tf_weights, tf_biases=tf_biases, activations=self.activations, @@ -251,7 +212,7 @@ def fit(self, X, y, init_weights=True, # Define loss and optimizer cross_entropy = tf.nn.softmax_cross_entropy_with_logits(net, - tf_y) + y_batch) cost = tf.reduce_mean(cross_entropy) train = self.optimizer_.minimize(cost, global_step=self.global_step_) @@ -278,30 +239,16 @@ def fit(self, X, y, init_weights=True, avg_cost = np.mean(costs) self.cost_.append(avg_cost) - # compute prediction accuracy - train_acc = self._accuracy(y, tf_X, tf_weights, tf_biases, - self.activations) - self.train_acc_.append(train_acc) - if validation: - valid_acc = self._accuracy(y_valid, tf_X_valid, - tf_weights, tf_biases, - self.activations) - self.valid_acc_.append(valid_acc) - else: - valid_acc = None - self._print_progress(epoch + 1, - cost=avg_cost, - train_acc=train_acc, - valid_acc=valid_acc) - - self.weights_ = {k: tf_weights[k].eval() for k in tf_weights} - self.biases_ = {k: tf_biases[k].eval() for k in tf_biases} - - return - - def _accuracy(self, y, tf_X, tf_weights_, tf_biases_, activations): + self._print_progress(iteration=epoch + 1, + n_iter=self.epochs, + cost=avg_cost) + + self.w_ = {k: tf_weights[k].eval() for k in tf_weights} + self.b_ = {k: tf_biases[k].eval() for k in tf_biases} + + def _accuracy(self, y, tf_X, tf_w_, tf_biases_, activations): net = self._predict(tf_X=tf_X, - tf_weights=tf_weights_, + tf_weights=tf_w_, tf_biases=tf_biases_, activations=activations) logits = tf.nn.softmax(net) @@ -341,57 +288,20 @@ def predict_proba(self, X): """ self._check_arrays(X) - if not hasattr(self, 'weights_'): + if not hasattr(self, 'w_'): raise AttributeError('The model has not been fitted, yet.') with tf.Session(): tf.initialize_all_variables().run() tf_X = tf.convert_to_tensor(value=X, dtype=self.dtype) net = self._predict(tf_X=tf_X, - tf_weights=self.weights_, - tf_biases=self.biases_, + tf_weights=self.w_, + tf_biases=self.b_, activations=self.activations, dropout=False) logits = tf.nn.softmax(net) return logits.eval() - def _layermapping(self, n_features, n_classes, hidden_layers): - """Creates a dictionaries of layer dimensions for weights and biases. - - For example, given - `n_features=10`, `n_classes=10`, and `hidden_layers=[8, 7, 6]`: - - biases = - {1: [[8], 'n_hidden_1'], - 2: [[7], 'n_hidden_2'], - 3: [[6], 'n_hidden_3'], - 'out': [[10], 'n_classes'] - } - - weights = - {1: [[10, 8], 'n_features, n_hidden_1'], - 2: [[8, 7], 'n_hidden_1, n_hidden_2'], - 3: [[7, 6], 'n_hidden_2, n_hidden_3'], - 'out': [[6, 10], 'n_hidden_3, n_classes'] - } - - """ - weights = {1: [[n_features, hidden_layers[0]], - 'n_features, n_hidden_1'], - 'out': [[hidden_layers[-1], n_classes], - 'n_hidden_%d, n_classes' % len(hidden_layers)]} - biases = {1: [[hidden_layers[0]], 'n_hidden_1'], - 'out': [[n_classes], 'n_classes']} - - if len(hidden_layers) > 1: - for i, h in enumerate(hidden_layers[1:]): - layer = i + 2 - weights[layer] = [[weights[layer - 1][0][1], h], - 'n_hidden_%d, n_hidden_%d' % (layer - - 1, layer)] - biases[layer] = [[h], 'n_hidden_%d' % layer] - return weights, biases - def _predict(self, tf_X, tf_weights, tf_biases, activations, dropout=False): hidden_1 = self.activations[1](tf.add(tf.matmul(tf_X, @@ -412,11 +322,11 @@ def _predict(self, tf_X, tf_weights, tf_biases, return net def _reuse_weights(self, weights, biases): - w = {k: tf.Variable(self.weights_[k]) for k in self.weights_} - b = {k: tf.Variable(self.biases_[k]) for k in self.biases_} + w = {k: tf.Variable(self.w_[k]) for k in self.w_} + b = {k: tf.Variable(self.b_[k]) for k in self.b_} return w, b - def _initialize_weights(self, weight_maps, bias_maps): + def _init_params_from_layermapping(self, weight_maps, bias_maps): tf_weights, tf_biases = {}, {} for i, k in enumerate(zip(weight_maps, bias_maps)): if self.random_seed: diff --git a/mlxtend/tf_classifier/tf_softmax.py b/mlxtend/tf_classifier/tf_softmax.py index 6fb5d338d..61c2caad1 100644 --- a/mlxtend/tf_classifier/tf_softmax.py +++ b/mlxtend/tf_classifier/tf_softmax.py @@ -9,10 +9,12 @@ import tensorflow as tf import numpy as np from time import time -from .tf_base import _TfBaseClassifier +from .._base import _BaseClassifier +from .._base import _BaseMultiClass +from .._base import _BaseMultiLayer -class TfSoftmaxRegression(_TfBaseClassifier): +class TfSoftmaxRegression(_BaseClassifier, _BaseMultiClass, _BaseMultiLayer): """Softmax regression classifier. Parameters @@ -21,6 +23,12 @@ class TfSoftmaxRegression(_TfBaseClassifier): Learning rate (between 0.0 and 1.0) epochs : int (default: 50) Passes over the training dataset. + Prior to each epoch, the dataset is shuffled + if `minibatches > 1` to prevent cycles in stochastic gradient descent. + n_classes : int (default: None) + A positive integer to declare the number of class labels + if not all class labels are present in a partial training set. + Gets the number of class labels automatically if None. minibatches : int (default: 1) Divide the training data into *k* minibatches for accelerated stochastic gradient descent learning. @@ -40,121 +48,69 @@ class TfSoftmaxRegression(_TfBaseClassifier): Attributes ----------- - weights_ : 2d-array, shape=[n_features, n_classes] + w_ : 2d-array, shape=[n_features, n_classes] Weights after fitting. - biases_ : 1D-array, shape=[n_classes] + b_ : 1D-array, shape=[n_classes] Bias units after fitting. cost_ : list List of floats, the average cross_entropy for each epoch. - train_acc_ : list - List of training accuracies for each epoch - valid_acc_ : list - List of validation accuracies for each epoch """ - def __init__(self, eta=0.5, epochs=50, + def __init__(self, eta=0.5, epochs=50, n_classes=None, minibatches=1, random_seed=None, print_progress=0, dtype=None): + super(TfSoftmaxRegression, self).__init__( + print_progress=print_progress, random_seed=random_seed) + if dtype is None: self.dtype = tf.float32 else: self.dtype = dtype self.eta = eta self.epochs = epochs + self.n_classes = n_classes self.minibatches = minibatches - self.random_seed = random_seed - self.print_progress = print_progress - - def fit(self, X, y, - init_weights=True, override_minibatches=None, n_classes=None, - X_valid=None, y_valid=None): - """Learn weight coefficients from training data. - - Parameters - ---------- - X : {array-like, sparse matrix}, shape = [n_samples, n_features] - Training vectors, where n_samples is the number of samples and - n_features is the number of features. - y : array-like, shape = [n_samples] - Target values. - init_weights : bool (default: True) - (Re)initializes weights to small random floats if True. - override_minibatches : int or None (default: None) - Uses a different number of minibatches for this session. - n_classes : int (default: None) - A positive integer to declare the number of class labels - if not all class labels are present in a partial training set. - Gets the number of class labels automatically if None. - Ignored if init_weights=False. - X_valid : {array-like, sparse matrix}, shape = [n_samples, n_features] - Optional validation set to store the validation accuracy values - for each epoch via self.valid_acc_ - y_valid : array-like, shape = [n_samples] - Target values for X_valid - - Returns - ------- - self : object - - """ - self._check_arrays(X, y) - if override_minibatches: - n_batches = override_minibatches - else: - n_batches = self.minibatches + def _fit(self, X, y, init_params=True,): + self._check_target_array(y) + n_batches = self.minibatches if y.shape[0] % n_batches != 0: raise AttributeError("Training set size %d cannot" " be divided into %d minibatches without" " remainder" % (y.shape[0], n_batches)) - if hasattr(X_valid, 'shape'): - validation = True - else: - validation = False - # Construct the Graph g = tf.Graph() with g.as_default(): - if init_weights: - if n_classes: - self._n_classes = n_classes - else: - self._n_classes = np.max(y) + 1 + if init_params: + if self.n_classes is None: + self.n_classes = np.max(y) + 1 self._n_features = X.shape[1] - tf_weights_, tf_biases_ = self._initialize_weights( + tf_w_, tf_b_ = self._initialize_weights( n_features=self._n_features, - n_classes=self._n_classes) + n_classes=self.n_classes) self.cost_ = [] self.train_acc_ = [] self.valid_acc_ = [] else: - tf_weights_ = tf.Variable(self.weights_) - tf_biases_ = tf.Variable(self.biases_) + tf_w_ = tf.Variable(self.w_) + tf_b_ = tf.Variable(self.b_) # Prepare the training data - y_enc = self._one_hot(y, self._n_classes) - n_idx = list(range(y.shape[0])) + y_enc = self._one_hot(y, self.n_classes, dtype=np.float) tf_X = tf.convert_to_tensor(value=X, dtype=self.dtype) tf_y = tf.convert_to_tensor(value=y_enc, dtype=self.dtype) - if validation: - tf_X_valid = tf.convert_to_tensor(value=X_valid, - dtype=self.dtype) - y_valid_enc = self._one_hot(y_valid, self._n_classes) - tf_y_valid = tf.convert_to_tensor(value=y_valid_enc, - dtype=self.dtype) - tf_idx = tf.placeholder(tf.int32, shape=[int(y.shape[0] / n_batches)]) X_batch = tf.gather(params=tf_X, indices=tf_idx) y_batch = tf.gather(params=tf_y, indices=tf_idx) # Setup the graph for minimizing cross entropy cost - net = tf.matmul(X_batch, tf_weights_) + tf_biases_ + net = tf.matmul(X_batch, tf_w_) + tf_b_ cross_entropy = tf.nn.softmax_cross_entropy_with_logits(net, y_batch) cost = tf.reduce_mean(cross_entropy) @@ -165,45 +121,36 @@ def fit(self, X, y, # Initializing the variables init = tf.initialize_all_variables() - # random seed for shuffling - if self.random_seed: - np.random.seed(self.random_seed) - # Launch the graph with tf.Session(graph=g) as sess: sess.run(init) self.init_time_ = time() for epoch in range(self.epochs): - if self.minibatches > 1: - n_idx = np.random.permutation(n_idx) - minis = np.array_split(n_idx, self.minibatches) costs = [] - for idx in minis: + for idx in self._yield_minibatches_idx( + n_batches=self.minibatches, + data_ary=y, + shuffle=True): + _, c = sess.run([train, cost], feed_dict={tf_idx: idx}) costs.append(c) avg_cost = np.mean(costs) self.cost_.append(avg_cost) # compute prediction accuracy - train_acc = self._accuracy(y, tf_X, tf_weights_, tf_biases_) + train_acc = self._accuracy(y, tf_X, tf_w_, tf_b_) self.train_acc_.append(train_acc) - if validation: - valid_acc = self._accuracy(y_valid, tf_X_valid, - tf_weights_, tf_biases_) - self.valid_acc_.append(valid_acc) - else: - valid_acc = None - self._print_progress(epoch + 1, - cost=avg_cost, - train_acc=train_acc, - valid_acc=valid_acc) + if self.print_progress: + self._print_progress(iteration=epoch + 1, + n_iter=self.epochs, + cost=avg_cost) - self.weights_ = tf_weights_.eval() - self.biases_ = tf_biases_.eval() + self.w_ = tf_w_.eval() + self.b_ = tf_b_.eval() - def _accuracy(self, y, tf_X, tf_weights_, tf_biases_): - logits = tf.nn.softmax(tf.matmul(tf_X, tf_weights_) + - tf_biases_) + def _accuracy(self, y, tf_X, tf_w_, tf_b_): + logits = tf.nn.softmax(tf.matmul(tf_X, tf_w_) + + tf_b_) y_pred = np.argmax(logits.eval(), axis=1) acc = np.sum(y == y_pred, axis=0) / float(y.shape[0]) return acc @@ -219,21 +166,7 @@ def _initialize_weights(self, n_features, n_classes): b = tf.Variable(tf.zeros([n_classes])) return w, b - def predict(self, X): - """Predict class labels of X. - - Parameters - ---------- - X : {array-like, sparse matrix}, shape = [n_samples, n_features] - Training vectors, where n_samples is the number of samples and - n_features is the number of features. - - Returns - ---------- - class_labels : array-like, shape = [n_samples] - Predicted class labels. - - """ + def _predict(self, X): return np.argmax(self.predict_proba(X=X), axis=1) def predict_proba(self, X): @@ -251,12 +184,12 @@ def predict_proba(self, X): """ self._check_arrays(X) - if not hasattr(self, 'weights_'): + if not hasattr(self, 'w_'): raise AttributeError('The model has not been fitted, yet.') with tf.Session(): tf.initialize_all_variables().run() tf_X = tf.convert_to_tensor(value=X, dtype=self.dtype) - logits = tf.nn.softmax(tf.matmul(tf_X, self.weights_) + - self.biases_) + logits = tf.nn.softmax(tf.matmul(tf_X, self.w_) + + self.b_) return logits.eval() diff --git a/mlxtend/tf_cluster/tests/test_tf_base.py b/mlxtend/tf_cluster/tests/test_tf_base.py deleted file mode 100644 index 1cbe06911..000000000 --- a/mlxtend/tf_cluster/tests/test_tf_base.py +++ /dev/null @@ -1,71 +0,0 @@ -# Sebastian Raschka 2014-2016 -# mlxtend Machine Learning Library Extensions -# Author: Sebastian Raschka -# -# License: BSD 3 clause - -from mlxtend.tf_cluster.tf_base import _TfBaseCluster -import numpy as np -from mlxtend.utils import assert_raises - - -def test_init(): - cl = _TfBaseCluster(print_progress=0, random_seed=1) - - -def test_check_array_1(): - X = np.array([1, 2, 3]) - cl = _TfBaseCluster(print_progress=0, random_seed=1) - assert_raises(ValueError, - 'X must be a 2D array. Try X[:, numpy.newaxis]', - cl._check_array, - X) - - -def test_check_array_2(): - X = list([[1], [2], [3]]) - cl = _TfBaseCluster(print_progress=0, random_seed=1) - - assert_raises(ValueError, - 'X must be a numpy array', - cl._check_array, - X) - - -def test_check_array_3(): - X = np.array([[1], [2], [3]]) - cl = _TfBaseCluster(print_progress=0, random_seed=1) - cl._check_array(X) - - -def test_fit(): - X = np.array([[1], [2], [3]]) - tfr = _TfBaseCluster(print_progress=0, random_seed=1) - tfr.fit(X) - - -def test_predict_1(): - X = np.array([[1], [2], [3]]) - cl = _TfBaseCluster(print_progress=0, random_seed=1) - - assert_raises(AttributeError, - 'Model is not fitted, yet.', - cl.predict, - X) - - -def test_predict_2(): - X = np.array([[1], [2], [3]]) - cl = _TfBaseCluster(print_progress=0, random_seed=1) - - cl.fit(X) - cl.predict(X) - - -def test_shuffle(): - X = np.array([[1], [2], [3]]) - y = np.array([1, 2, 3]) - cl = _TfBaseCluster(print_progress=0, random_seed=1) - X_sh, y_sh = cl._shuffle(arrays=[X, np.array(y)]) - np.testing.assert_equal(X_sh, np.array([[1], [3], [2]])) - np.testing.assert_equal(y_sh, np.array([1, 3, 2])) diff --git a/mlxtend/tf_cluster/tests/test_tf_kmeans.py b/mlxtend/tf_cluster/tests/test_tf_kmeans.py index 98af304fc..8bd42e877 100644 --- a/mlxtend/tf_cluster/tests/test_tf_kmeans.py +++ b/mlxtend/tf_cluster/tests/test_tf_kmeans.py @@ -57,3 +57,26 @@ def test_three_blobs_centroids(): km.fit(X) np.testing.assert_almost_equal(centroids, km.centroids_, decimal=2) + + +def test_continue_training(): + km = TfKmeans(k=3, + max_iter=1, + random_seed=1, + print_progress=0) + + first_iter = np.array([[-1.33, 3.26], + [1.95, 0.99], + [1.09, 4.26]]) + + second_iter = np.array([[-1.5947298, 2.92236966], + [2.06521743, 0.96137409], + [0.9329651, 4.35420713]]) + + km.fit(X) + np.testing.assert_almost_equal(first_iter, km.centroids_, decimal=2) + assert km.iterations_ == 1, km.iterations_ + + km.fit(X, init_params=False) + np.testing.assert_almost_equal(second_iter, km.centroids_, decimal=2) + assert km.iterations_ == 2, km.iterations_ diff --git a/mlxtend/tf_cluster/tf_base.py b/mlxtend/tf_cluster/tf_base.py deleted file mode 100644 index f9332d65b..000000000 --- a/mlxtend/tf_cluster/tf_base.py +++ /dev/null @@ -1,120 +0,0 @@ -# Sebastian Raschka 2014-2016 -# mlxtend Machine Learning Library Extensions -# -# Base Clusteer (Clutering Parent Class) -# Author: Sebastian Raschka -# -# License: BSD 3 clause - -import numpy as np -from sys import stderr -from time import time -import tensorflow as tf - - -class _TfBaseCluster(object): - - """Parent Class Base Cluster - - A base class that is implemented by - clustering child classes. - - """ - def __init__(self, print_progress=0, random_seed=None, dtype=None): - self.print_progress = print_progress - self.random_seed = random_seed - if dtype is None: - self.dtype = tf.float32 - else: - self.dtype = dtype - self._is_fitted = False - - def fit(self, X): - """Learn cluster centroids from training data. - - Parameters - ---------- - X : {array-like, sparse matrix}, shape = [n_samples, n_features] - Training vectors, where n_samples is the number of samples and - n_features is the number of features. - - Returns - ------- - self : object - - """ - self._is_fitted = False - self._check_array(X=X) - if self.random_seed is not None: - np.random.seed(self.random_seed) - self._fit(X=X) - self._is_fitted = True - return self - - def _fit(self, X): - # Implemented in child class - pass - - def predict(self, X): - """Predict cluster labels of X. - - Parameters - ---------- - X : {array-like, sparse matrix}, shape = [n_samples, n_features] - Training vectors, where n_samples is the number of samples and - n_features is the number of features. - - Returns - ---------- - cluster_labels : array-like, shape = [n_samples] - Predicted cluster labels. - - """ - self._check_array(X=X) - if not self._is_fitted: - raise AttributeError('Model is not fitted, yet.') - return self._predict(X) - - def _predict(self, X): - # Implemented in child class - pass - - def _shuffle(self, arrays): - """Shuffle arrays in unison.""" - r = np.random.permutation(len(arrays[0])) - return [ary[r] for ary in arrays] - - def _print_progress(self, iteration, n_iter, - cost=None, time_interval=10): - if self.print_progress > 0: - s = '\rIteration: %d/%d' % (iteration, n_iter) - if cost: - s += ' | Cost %.2f' % cost - if self.print_progress > 1: - if not hasattr(self, 'ela_str_'): - self.ela_str_ = '00:00:00' - if not iteration % time_interval: - ela_sec = time() - self.init_time_ - self.ela_str_ = self._to_hhmmss(ela_sec) - s += ' | Elapsed: %s' % self.ela_str_ - if self.print_progress > 2: - if not hasattr(self, 'eta_str_'): - self.eta_str_ = '00:00:00' - if not iteration % time_interval: - eta_sec = ((ela_sec / float(iteration)) * - n_iter - ela_sec) - self.eta_str_ = self._to_hhmmss(eta_sec) - s += ' | ETA: %s' % self.eta_str_ - stderr.write(s) - stderr.flush() - - def _to_hhmmss(self, sec): - m, s = divmod(sec, 60) - h, m = divmod(m, 60) - return "%d:%02d:%02d" % (h, m, s) - - def _check_array(self, X): - if isinstance(X, list): - raise ValueError('X must be a numpy array') - if not len(X.shape) == 2: - raise ValueError('X must be a 2D array. Try X[:, numpy.newaxis]') diff --git a/mlxtend/tf_cluster/tf_kmeans.py b/mlxtend/tf_cluster/tf_kmeans.py index 6abbaddda..6fc34c427 100644 --- a/mlxtend/tf_cluster/tf_kmeans.py +++ b/mlxtend/tf_cluster/tf_kmeans.py @@ -14,13 +14,13 @@ # # License: BSD 3 clause -from mlxtend.tf_cluster.tf_base import _TfBaseCluster import tensorflow as tf import numpy as np from time import time +from .._base import _BaseCluster -class TfKmeans(_TfBaseCluster): +class TfKmeans(_BaseCluster): """ TensorFlow K-means clustering class. Added in 0.4.1dev @@ -33,6 +33,10 @@ class TfKmeans(_TfBaseCluster): Number of iterations during cluster assignment. Cluster re-assignment stops automatically when the algorithm converged. + convergence_tolerance : float (default: 1e-05) + Compares current centroids with centroids of the previous iteration + using the given tolerance (a small positive float)to determine + if the algorithm converged early. random_seed : int (default: None) Set random state for the initial centroid assignment. print_progress : int (default: 0) @@ -59,27 +63,35 @@ class TfKmeans(_TfBaseCluster): """ def __init__(self, k, max_iter=10, + convergence_tolerance=1e-05, random_seed=None, print_progress=0, dtype=None): super(TfKmeans, self).__init__(print_progress=print_progress, - random_seed=random_seed, - dtype=dtype) + random_seed=random_seed) self.k = k self.max_iter = max_iter + self.convergence_tolerance = convergence_tolerance + if dtype is None: + self.dtype = tf.float32 + else: + self.dtype = dtype - def _fit(self, X): + def _fit(self, X, init_params=True): """Learn cluster centroids from training data. Called in self.fit """ - self.iterations_ = 0 n_samples = X.shape[0] n_features = X.shape[1] # initialize centroids - idx = np.random.choice(n_samples, self.k, replace=False) - self.centroids_ = X[idx] + + if init_params: + self.iterations_ = 0 + # initialize centroids + idx = np.random.choice(n_samples, self.k, replace=False) + self.centroids_ = X[idx] self.g_train = tf.Graph() @@ -128,7 +140,9 @@ def _fit(self, X): feed_dict={tf_X: X, tf_centroids: self.centroids_}) - if (self.centroids_ == new_centroids).all(): + if np.allclose(self.centroids_, new_centroids, + rtol=self.convergence_tolerance, + atol=1e-08, equal_nan=False): break else: self.centroids_ = new_centroids diff --git a/mlxtend/tf_regressor/tests/test_tf_base.py b/mlxtend/tf_regressor/tests/test_tf_base.py deleted file mode 100644 index ac80700ea..000000000 --- a/mlxtend/tf_regressor/tests/test_tf_base.py +++ /dev/null @@ -1,113 +0,0 @@ -# Sebastian Raschka 2014-2016 -# mlxtend Machine Learning Library Extensions -# Author: Sebastian Raschka -# -# License: BSD 3 clause - -from mlxtend.tf_regressor.tf_base import _TfBaseRegressor -import numpy as np -from mlxtend.utils import assert_raises - - -def test_init(): - tfr = _TfBaseRegressor(print_progress=0, random_seed=1) - - -def test_check_arrays_1(): - X = np.array([1, 2, 3]) - y = np.array([1, 1, 1]) - tfr = _TfBaseRegressor(print_progress=0, random_seed=1) - assert_raises(ValueError, - 'X must be a 2D array. Try X[:, numpy.newaxis]', - tfr._check_arrays, - X) - - assert_raises(ValueError, - 'X must be a 2D array. Try X[:, numpy.newaxis]', - tfr._check_arrays, - X, y) - - -def test_check_arrays_2(): - X = np.array([[1], [2], [3]]) - y = np.array([1, 1]) - tfr = _TfBaseRegressor(print_progress=0, random_seed=1) - - assert_raises(ValueError, - 'X and y must contain the same number of samples', - tfr._check_arrays, - X, y) - - -def test_check_arrays_3(): - X = list([[1], [2], [3]]) - tfr = _TfBaseRegressor(print_progress=0, random_seed=1) - - assert_raises(ValueError, - 'X must be a numpy array', - tfr._check_arrays, - X) - - -def test_check_arrays_4(): - X = np.array([[1], [2], [3]]) - y = np.array([1, 2, 3]) - tfr = _TfBaseRegressor(print_progress=0, random_seed=1) - tfr._check_arrays(X, y) - - -def test_check_arrays_5(): - X = np.array([[1], [2], [3]]) - y = [1, 2, 3] - tfr = _TfBaseRegressor(print_progress=0, random_seed=1) - - assert_raises(ValueError, - 'y must be a numpy array.', - tfr._check_arrays, - X, y) - - -def test_check_arrays_6(): - X = np.array([[1], [2], [3]]) - y = X - tfr = _TfBaseRegressor(print_progress=0, random_seed=1) - - assert_raises(ValueError, - 'y must be a 1D numpy array.', - tfr._check_arrays, - X, y) - - -def test_fit(): - X = np.array([[1], [2], [3]]) - y = np.array([1, 2, 3]) - tfr = _TfBaseRegressor(print_progress=0, random_seed=1) - tfr.fit(X, y) - - -def test_predict_1(): - X = np.array([[1], [2], [3]]) - tfr = _TfBaseRegressor(print_progress=0, random_seed=1) - - assert_raises(AttributeError, - 'Model is not fitted, yet.', - tfr.predict, - X) - - -def test_predict_2(): - X = np.array([[1], [2], [3]]) - y = np.array([1, 2, 3]) - tfr = _TfBaseRegressor(print_progress=0, random_seed=1) - - tfr.fit(X, y) - tfr.predict(X) - - -def test_shuffle(): - X = np.array([[1], [2], [3]]) - y = np.array([1, 2, 3]) - tfr = _TfBaseRegressor(print_progress=0, random_seed=1) - X_sh, y_sh = tfr._shuffle(arrays=[X, np.array(y)]) - np.testing.assert_equal(X_sh, np.array([[1], [3], [2]])) - np.testing.assert_equal(y_sh, np.array([1, 3, 2])) diff --git a/mlxtend/tf_regressor/tests/test_tf_linear_regression.py b/mlxtend/tf_regressor/tests/test_tf_linear_regression.py index 7f3ef72af..a91d56f50 100644 --- a/mlxtend/tf_regressor/tests/test_tf_linear_regression.py +++ b/mlxtend/tf_regressor/tests/test_tf_linear_regression.py @@ -6,7 +6,6 @@ from mlxtend.tf_regressor import TfLinearRegression -from mlxtend.data import boston_housing_data import numpy as np from numpy.testing import assert_almost_equal @@ -24,8 +23,8 @@ def test_univariate_univariate_gradient_descent(): random_seed=1, print_progress=0) gd_lr.fit(X, y) - assert_almost_equal(gd_lr.bias_, np.array([0.11]), decimal=2) - assert_almost_equal(gd_lr.weights_, np.array([0.10]), decimal=2) + assert_almost_equal(gd_lr.b_, np.array([0.11]), decimal=2) + assert_almost_equal(gd_lr.w_, np.array([0.10]), decimal=2) assert_almost_equal(gd_lr.predict(X), y, decimal=1) @@ -36,5 +35,17 @@ def test_multivariate_gradient_descent(): print_progress=0) gd_lr.fit(X2, y) assert_almost_equal(gd_lr.predict(X2), y, decimal=1) - assert_almost_equal(gd_lr.bias_, np.array([0.1]), decimal=2) - assert_almost_equal(gd_lr.weights_, np.array([-1.1, 1.2]), decimal=2) + assert_almost_equal(gd_lr.b_, np.array([0.1]), decimal=2) + assert_almost_equal(gd_lr.w_, np.array([-1.1, 1.2]), decimal=2) + + +def test_continue_training(): + gd_lr = TfLinearRegression(eta=0.005, + epochs=120, + random_seed=1, + print_progress=0) + gd_lr.fit(X2, y) + gd_lr.fit(X2, y, init_params=False) + assert_almost_equal(gd_lr.predict(X2), y, decimal=1) + assert_almost_equal(gd_lr.b_, np.array([0.1]), decimal=2) + assert_almost_equal(gd_lr.w_, np.array([-1.1, 1.2]), decimal=2) diff --git a/mlxtend/tf_regressor/tf_linear_regression.py b/mlxtend/tf_regressor/tf_linear_regression.py index a26a09762..70ad9528a 100644 --- a/mlxtend/tf_regressor/tf_linear_regression.py +++ b/mlxtend/tf_regressor/tf_linear_regression.py @@ -6,13 +6,13 @@ # # License: BSD 3 clause -from .tf_base import _TfBaseRegressor import numpy as np import tensorflow as tf from time import time +from .._base import _BaseRegressor -class TfLinearRegression(_TfBaseRegressor): +class TfLinearRegression(_BaseRegressor): """Estimator for Linear Regression in TensorFlow using Gradient Descent. Added in version 0.4.1 @@ -41,10 +41,10 @@ def __init__(self, eta=0.1, epochs=50, print_progress=0, Attributes ----------- - weights_ : 1d-array, shape=[n_features] - Model weights after fitting. - bias_ : 1d-array, shape=[1] - Bias unit (intercept term) + w_ : 2d-array, shape={n_features, 1} + Model weights after fitting. + b_ : 1d-array, shape={1,} + Bias unit after fitting. cost_ : list Sum of mean squared errors (MSE) after each epoch; @@ -58,38 +58,10 @@ def __init__(self, eta=0.1, epochs=50, print_progress=0, else: self.dtype = dtype - def fit(self, X, y, init_weights=True): - """Learn weight coefficients from training data. - - Parameters - ---------- - X : {array-like, sparse matrix}, shape = [n_samples, n_features] - Training vectors, where n_samples is the number of samples and - n_features is the number of features. - y : array-like, shape = [n_samples] - Target values. - init_weights : bool (default: True) - Reinitialize weights - - Returns - ------- - self : object - - """ - self._is_fitted = False - if not (init_weights is None or isinstance(init_weights, bool)): - raise AttributeError("init_weights must be True or False") - self._check_arrays(X=X, y=y) - if self.random_seed: - np.random.seed(self.random_seed) - self._fit(X=X, y=y, init_weights=init_weights) - self._is_fitted = True - return self - - def _fit(self, X, y, init_weights=True): - if not hasattr(self, "cost_"): + def _fit(self, X, y, init_params=True): + if init_params: self.cost_ = [] - self.cost_ = [] + g_train = tf.Graph() with g_train.as_default(): @@ -108,7 +80,7 @@ def _fit(self, X, y, init_weights=True): tf_y = tf.convert_to_tensor(value=y[:, np.newaxis], dtype=self.dtype) - if init_weights: + if init_params: w = tf.Variable(tf.truncated_normal(shape=[X.shape[1], 1], seed=self.random_seed, dtype=self.dtype), @@ -116,9 +88,9 @@ def _fit(self, X, y, init_weights=True): b = tf.Variable(tf.zeros(shape=[1]), dtype=self.dtype) else: - w = tf.Variable(self.weights_[:, np.newaxis], + w = tf.Variable(self.w_[:, np.newaxis], dtype=self.dtype) - b = tf.Variable(self.bias_, dtype=self.dtype) + b = tf.Variable(self.b_, dtype=self.dtype) y_pred = self._net_input(tf_X, w, b) mse_cost = tf.reduce_mean(tf.square(y_pred - tf_y)) @@ -135,10 +107,13 @@ def _fit(self, X, y, init_weights=True): for epoch in range(1, self.epochs + 1): _, c = sess.run([train, mse_cost]) self.cost_.append(c) - self._print_progress(epoch, cost=c) + if self.print_progress: + self._print_progress(iteration=(epoch + 1), + n_iter=self.epochs, + cost=c) - self.weights_ = w.eval().flatten() - self.bias_ = b.eval() + self.w_ = w.eval().flatten() + self.b_ = b.eval() def predict(self, X): """Predict class labels of X. @@ -163,9 +138,9 @@ def predict(self, X): def _predict(self, X): g_predict = tf.Graph() with g_predict.as_default(): - w = tf.convert_to_tensor(value=self.weights_[:, np.newaxis], + w = tf.convert_to_tensor(value=self.w_[:, np.newaxis], dtype=self.dtype) - b = tf.convert_to_tensor(value=self.bias_, dtype=self.dtype) + b = tf.convert_to_tensor(value=self.b_, dtype=self.dtype) tf_X = tf.convert_to_tensor(value=X, dtype=self.dtype) predict_init = tf.initialize_all_variables()