{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true, "hide_input": false }, "outputs": [], "source": [ "from preamble import *\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Algorithm Chains and Pipelines" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- train_test_split에 의하여 분할된 훈련 데이터 전체를 MinMaxScaler에 Fit을 함" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn.svm import SVC\n", "from sklearn.datasets import load_breast_cancer\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.preprocessing import MinMaxScaler\n", "\n", "# load and split the data\n", "cancer = load_breast_cancer()\n", "X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, random_state=0)\n", "\n", "# compute minimum and maximum on the training data\n", "scaler = MinMaxScaler().fit(X_train)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Test score: 0.95\n" ] } ], "source": [ "# rescale the training data\n", "X_train_scaled = scaler.transform(X_train)\n", "\n", "svm = SVC()\n", "# learn an SVM on the scaled training data\n", "svm.fit(X_train_scaled, y_train)\n", "\n", "# scale the test data and score the scaled data\n", "X_test_scaled = scaler.transform(X_test)\n", "print(\"Test score: {:.2f}\".format(svm.score(X_test_scaled, y_test)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Parameter Selection with Preprocessing " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Scale이 적용된 훈련 데이터 전체를 GridSearchCV의 fit에 넣어줌\n", " - GridSearchCV에서 자동으로 다시 훈련 데이터와 검증 데이터를 분리\n", " - **검증 데이터는 Scale을 위한 fit에 활용되면 안되기 때문**에 아래 코드는 문제가 있음" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Best cross-validation accuracy: 0.98\n", "Best parameters: {'C': 1, 'gamma': 1}\n", "Test set accuracy: 0.97\n" ] } ], "source": [ "from sklearn.model_selection import GridSearchCV\n", "\n", "# for illustration purposes only, don't use this code!\n", "param_grid = {\n", " 'C': [0.001, 0.01, 0.1, 1, 10, 100],\n", " 'gamma': [0.001, 0.01, 0.1, 1, 10, 100]\n", "}\n", "\n", "grid = GridSearchCV(SVC(), param_grid=param_grid, cv=5)\n", "grid.fit(X_train_scaled, y_train)\n", "\n", "print(\"Best cross-validation accuracy: {:.2f}\".format(grid.best_score_))\n", "print(\"Best parameters: \", grid.best_params_)\n", "\n", "X_test_scaled = scaler.transform(X_test)\n", "print(\"Test set accuracy: {:.2f}\".format(grid.score(X_test_scaled, y_test)))" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "hide_input": false }, "outputs": [ { "data": { "application/pdf": "JVBERi0xLjQKJazcIKu6CjEgMCBvYmoKPDwgL1R5cGUgL0NhdGFsb2cgL1BhZ2VzIDIgMCBSID4+\nCmVuZG9iago4IDAgb2JqCjw8IC9Gb250IDMgMCBSIC9YT2JqZWN0IDcgMCBSIC9FeHRHU3RhdGUg\nNCAwIFIgL1BhdHRlcm4gNSAwIFIKL1NoYWRpbmcgNiAwIFIgL1Byb2NTZXQgWyAvUERGIC9UZXh0\nIC9JbWFnZUIgL0ltYWdlQyAvSW1hZ2VJIF0gPj4KZW5kb2JqCjEwIDAgb2JqCjw8IC9UeXBlIC9Q\nYWdlIC9QYXJlbnQgMiAwIFIgL1Jlc291cmNlcyA4IDAgUgovTWVkaWFCb3ggWyAwIDAgODU1LjQg\nNTg0LjEzMjU5MTI4MTcgXSAvQ29udGVudHMgOSAwIFIKL0dyb3VwIDw8IC9UeXBlIC9Hcm91cCAv\nUyAvVHJhbnNwYXJlbmN5IC9DUyAvRGV2aWNlUkdCID4+IC9Bbm5vdHMgWyBdID4+CmVuZG9iago5\nIDAgb2JqCjw8IC9MZW5ndGggMTEgMCBSIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4\nnLWXT28bNxDF7/wUPDYXmjPk8M8xTtsUObWN0B6KHgxJTmWs5VYSkq/ft5S3O3SVWHIQGIKlH5aj\nmXlD8onsnbl6TfbD3np7h9cn+4f9E/9Xluxbe/X9+uNmuf717bVd7o0HvzdFxEW8Gx7fSYmOAksl\nIN9//MuYrfnHVsc2UHSZUipM1RdbQrYcs/N1+rO7tf3dbu3Vax7TQU54fcIXIY2fbw6H9W5rlnt7\n9RPZ/XJrDAUXYpAUEbq4nHKQgPTEJxc5Zw6aDx0XcpQ5UwFXYTRG5tfmF/uy3L0TTzX5XGI4lmF0\nGbaVwccyhPB0Ji65ryMF73KISZ7UoblOWMf51oX02CCn6EpG0NLXgPiujilRX4PmOlcd52QNU1ot\nl7s2H9O4tryQzPXCXv1IlqJd3BomcYVjwkBGTjZgBhJJiGOpZBcr891hd7PZbrYf7O3DsNq/sos7\n+8OiDyLMrtSUOMcsfCrIx5ths7o5bB62LczJKJDGkc9VKAfOJ1NZ7w92vz5My8m+s4wK+01oUIoj\n8gWrQiEntVIVNFvzXNBHiQFDrWlyJAQRehrGfQE57NIonOqE783JpyHXGXwOMxjzHtPzru1s/0Q9\n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\njUMxDOs9BRcIYP0se553SJXbvz1KRnCFIVo/kloSmIjASwyxlG/iR0ZBPQu/F4XiM8TPF4VBzoSk\nQJz1GRCZeIbaRm7odnDOvMMzjDkCF8VacKbTmfZc2OScBycQzm2U8YxCuklUFXFUn3FM8aqyz43X\ngaW1bLPTkewhjYRLSSUml35TKv+0KVsq6NpFE7BI5IGTTTThLD9DkmLMoJRR9zC1jvRxspFHddDJ\n2Zw5LZnZ7qftTHwPWCaZUeUpnecyPiep81xOfe6zHdHkoqVV+5z93pGW8iK126HV6VclUZmN1aeQ\nuDz/jJ/x/gOOoFk+CmVuZHN0cmVhbQplbmRvYmoKMjEgMCBvYmoKPDwgL0xlbmd0aCAxMzMgL0Zp\nbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicTY9BEsMwCAPvfoWegLEB8550ekr+fy2QNu4F\n7YyAkYYwCDxiDOswJbx6++FVpEtwNo75JRlFPAhqC9wXVAVHY4qd+Njdoeyl4ukUTYvrEXPTtKR0\nN1Eqbb2dyPjAfZ/eH1W2JJ2CHlvqhC7RJPJFAnPYVDDP6sZLS4+n7dneH2Y+M9cKZW5kc3RyZWFt\nCmVuZG9iagoyMiAwIG9iago8PCAvTGVuZ3RoIDMzOCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+Pgpz\ndHJlYW0KeJxFUktyxTAI2+cUXCAz5mfj87xOV+n9t5VwOt089AwICTI9ZUim3DaWZITkHPKlV2SI\n1ZCfRo5ExBDfKaHArvK5vJbEXMhuiUrxoR0/l6U3Ms2u0Kq3R6c2i0Y1KyPnIEOEelbozO5R22TD\n63Yh6TpTFodwLP9DBbKUdcoplARtQd/YI+hvFjwR3Aaz5nKzuUxu9b/uWwue1zpbsW0HQAmWc95g\nBgDEwwnaAMTc2t4WKSgfVbqKScKt8lwnO1C20Kp0vDeAGQcYOWDDkq0O12hvAMM+D/SiRsX2FaCo\nLCD+ztlmwd4xyUiwJ+YGTj1xOsWRcEk4xgJAiq3iFLrxHdjiLxeuiJrwCXU6ZU28wp7a4sdCkwjv\nUnEC8CIbbl0dRbVsT+cJtD8qkjNipB7E0QmR1JLOERSXBvXQGvu4iRmvjcTmnr7dP8I5n+v7Fxa4\ng+AKZW5kc3RyZWFtCmVuZG9iagoyMyAwIG9iago8PCAvTGVuZ3RoIDIzMiAvRmlsdGVyIC9GbGF0\nZURlY29kZSA+PgpzdHJlYW0KeJw1UTtyBTEI630KXSAz5m+fZzOvSu7fRrCTZmEBCQnnPdiIxJcY\n0h3lim9ZnWYZfieLvPhZKZy8F1GBVEVYIe3gWc5qhsFzI1PgciY+y8wn02LHAqqJOM6OnGYwCDGN\n62g5HWaaBz0h1wcjbuw0y1UMab1bqtf3Wv5TRfnIupvl1imbWqlb9Iw9icvO66kt7QujjuKmINLh\nY4f3IF/EnMVFJ9LNfjPlsJI0BKcF8CMxlOrZ4TXCxM+MBE/Z0+l9lIbXPmi6vncv6MjNhEzlFspI\nxZOVxpgxVL8RzST1/T/Qsz5/mjBURwplbmRzdHJlYW0KZW5kb2JqCjI0IDAgb2JqCjw8IC9MZW5n\ndGggNjggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicMzK3UDBQsDQBEoYWJgrmZgYK\nKYZcQL6piblCLhdIDMTKAbMMgLQlnIKIW0I0QZSCWBClZiZmEEk4AyKXBgDJtBXlCmVuZHN0cmVh\nbQplbmRvYmoKMjUgMCBvYmoKPDwgL0xlbmd0aCA0NSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+Pgpz\ndHJlYW0KeJwzMrdQMFCwNAEShhYmCuZmBgophlyWEFYuF0wsB8wC0ZZwCiKeBgCffQy1CmVuZHN0\ncmVhbQplbmRvYmoKMjYgMCBvYmoKPDwgL0xlbmd0aCAxNjEgL0ZpbHRlciAvRmxhdGVEZWNvZGUg\nPj4Kc3RyZWFtCnicRZBLEsMgDEP3nEJH8EcGfJ50ukrvv60hTbOAp7FABncnBKm1BRPRBS9tS7oL\nPlsJzsZ46DZuNRLkBHWAVqTjaJRSfbnFaZV08Wg2cysLrRMdZg56lKMZoBA6Fd7touRypu7O+Udw\n9V/1R7HunM3EwGTlDoRm9SnufJsdUV3dZH/SY27Wa38V9qqwtKyl5YTbzl0zoATuqRzt/QWpczqE\nCmVuZHN0cmVhbQplbmRvYmoKMjcgMCBvYmoKPDwgL0xlbmd0aCAyMTQgL0ZpbHRlciAvRmxhdGVE\nZWNvZGUgPj4Kc3RyZWFtCnicPVC7EUMxCOs9BQvkznztN8/Lpcv+bSScpEI2QhKUmkzJlIc6ypKs\nKU8dPktih7yH5W5kNiUqRS+TsCX30ArxfYnmFPfd1ZazQzSXaDl+CzMqqhsd00s2mnAqE7qg3MMz\n+g1tdANWhx6xWyDQpGDXtiByxw8YDMGZE4siDEpNBv+tcvdS3O89HG+iiJR08K755fTLzy28Tj2O\nRLq9+YprcaY6CkRwRmryinRhxbLIQ6TVBDU9A2u1AK7eevk3aEd0GYDsE4njNKUcQ//WuMfrA4eK\nUvQKZW5kc3RyZWFtCmVuZG9iagoyOCAwIG9iago8PCAvTGVuZ3RoIDIzNiAvRmlsdGVyIC9GbGF0\nZURlY29kZSA+PgpzdHJlYW0KeJxNUEtuRCEM23OKXOBJJCEBzkPVVef+27HDVO0qhhh/SA/pslUe\n61NidYns8qVNl8oyeRWo5U/b/1EMAm7/0MhBtLeMnWLmEtbFwiQ85TQjGyfXLB+PO08bZoXGxI3j\nnS4ZYJ8WATVblc2BOW06N0C6kBq3qrPeZFAMIupCzQeTLpyn0ZeIOZ6oYEp3JrWQG1w+1aEDcVq9\nCrlji5NvxBxZocBh0Exx1l8B1qjJslnIIEmGIc59o3uUCo2oynkrFcIPk6ER9YbVoAaVuYWiqeWS\n/B3aAjAFtox16QxKgaoAwd8qp32/ASSNXVMKZW5kc3RyZWFtCmVuZG9iagoyOSAwIG9iago8PCAv\nTGVuZ3RoIDE1NyAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJxFkLkRQzEIRHNVQQkS\nsAjqscfRd/+pF/lKtG8ALYevJVOqHyciptzXaPQweQ6fTSVWLNgmtpMachsWQUoxmHhOMaujt6GZ\nh9TruKiquHVmldNpy8rFf/NoVzOTPcI16ifwTej4nzy0qehboK8LlH1AtTidSVAxfa9igaOcdn8i\nnBjgPhlHmSkjcWJuCuz3GQBmvle4xuMF3QE3eQplbmRzdHJlYW0KZW5kb2JqCjMwIDAgb2JqCjw8\nIC9MZW5ndGggMzMyIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nC1SOY4kMQzL/Qp+\nYADr8vGeHkzU+/90SVUFBapsyzzkcsNEJX4skNtRa+LXRmagwvCvq8yF70jbyDqIa8hFXMmWwmdE\nLOQxxDzEgu/b+Bke+azMybMHxi/Z9xlW7KkJy0LGizO0wyqOwyrIsWDrIqp7eFOkw6kk2OOL/z7F\ncxeCFr4jaMAv+eerI3i+pEXaPWbbtFsPlmlHlRSWg+1pzsvkS+ssV8fj+SDZ3hU7QmpXgKIwd8Z5\nLo4ybWVEa2Fng6TGxfbm2I+lBF3oxmWkOAL5mSrCA0qazGyiIP7I6SGnMhCmrulKJ7dRFXfqyVyz\nubydSTJb90WKzRTO68KZ9XeYMqvNO3mWE6VORfgZe7YEDZ3j6tlrmYVGtznBKyV8NnZ6cvK9mlkP\nyalISBXTugpOo8gUS9iW+JqKmtLUy/Dfl/cZf/8BM+J8AQplbmRzdHJlYW0KZW5kb2JqCjMxIDAg\nb2JqCjw8IC9MZW5ndGggMTMxIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nEWPyw0E\nIQxD71ThEvIZPqmH1Z7Y/q/rMJpBQvhBIjvxMAis8/I20MXw0aLDN/421atjlSwfunpSVg/pkIe8\n8hVQaTBRxIVZTB1DYc6YysiWMrcb4bZNg6xslVStg3Y8Bg+2p2WrCH6pbWHqLPEMwlVeuMcNP5BL\nrXe9Vb5/QlMwlwplbmRzdHJlYW0KZW5kb2JqCjMyIDAgb2JqCjw8IC9MZW5ndGggMzM4IC9GaWx0\nZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nDVSS5JbQQjbv1PoAq5q/s15nJrV5P7bCOysoIEW\nEpAWOMjESwxRjXLFH3mC8TqBv+vlafw+3oXUgqci/cC1aRvvx5o1UbA0YinMPvb9KCHHU+PfEOi5\nSBNmZDJyIBmI+7U+f9abTDn8BqRpc/ooSXoQLdjdGnZ8WZBB0pMaluzkh3UtsLoITZgbayIZObUy\nNc/HnuEynhgjQdUsIEmfuE8VjEgzHjtnLXmQ4XiqFy9+vY3XMo+pl1UFMrYJ5mA7mQmnKCIQv6Ak\nuYm7aOoojmbGmtuFhpIi9909nJz0ur+cRAVeCeEs1hKOGXrKMic7DUqgauUEmGG99oVxmjZKuFPT\n7V2xr99nJmHc5rCzUjINznFwL5vMESR73TFhEx6HmPfuEYzEvPldbBFcucy5JtOP/SjaSB8U1+dc\nTZmtKOEfquSJFdf4//zez88/kDd9sQplbmRzdHJlYW0KZW5kb2JqCjMzIDAgb2JqCjw8IC9MZW5n\ndGggNzIgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicNYyxEcAwCAN7ptAINlhg75NL\nRfZvQ3xOAy8dD5eiwVoNuoIjcHWp/NEjXbkpRZdjzoLhcapfSDFGPagj497HT7lfcBYSfQplbmRz\ndHJlYW0KZW5kb2JqCjM0IDAgb2JqCjw8IC9MZW5ndGggNzAgL0ZpbHRlciAvRmxhdGVEZWNvZGUg\nPj4Kc3RyZWFtCnicM7MwUTBQsABiM3MzBXMjS4UUQy4jCzOgQC6XBVggh8vQ0BDKMjYxUjA0NAWy\nTM2NoWIwjUBZS5BBOVD9OVxpAE9UEi8KZW5kc3RyZWFtCmVuZG9iagozNSAwIG9iago8PCAvTGVu\nZ3RoIDY0IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nDMzNFQwUNA1AhJmhiYK5kaW\nCimGXEA+iJXLBRPLAbPMTMyALGNTUySWAZA2MjWD0xAZoAFwBkR/GgApTxROCmVuZHN0cmVhbQpl\nbmRvYmoKMTQgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL0Jhc2VGb250IC9EZWphVnVTYW5zIC9GaXJz\ndENoYXIgMCAvTGFzdENoYXIgMjU1Ci9Gb250RGVzY3JpcHRvciAxMyAwIFIgL1N1YnR5cGUgL1R5\ncGUzIC9OYW1lIC9EZWphVnVTYW5zCi9Gb250QkJveCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0g\nL0ZvbnRNYXRyaXggWyAwLjAwMSAwIDAgMC4wMDEgMCAwIF0KL0NoYXJQcm9jcyAxNSAwIFIKL0Vu\nY29kaW5nIDw8IC9UeXBlIC9FbmNvZGluZwovRGlmZmVyZW5jZXMgWyAzMiAvc3BhY2UgNjcgL0Mg\nODMgL1MgL1QgODYgL1YgOTcgL2EgOTkgL2MgL2QgL2UgL2YgL2cgMTA1IC9pIDEwOCAvbCAxMTAK\nL24gL28gL3AgMTE0IC9yIC9zIC90IDExOCAvdiBdCj4+Ci9XaWR0aHMgMTIgMCBSID4+CmVuZG9i\nagoxMyAwIG9iago8PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0ZvbnROYW1lIC9EZWphVnVTYW5z\nIC9GbGFncyAzMgovRm9udEJCb3ggWyAtMTAyMSAtNDYzIDE3OTQgMTIzMyBdIC9Bc2NlbnQgOTI5\nIC9EZXNjZW50IC0yMzYgL0NhcEhlaWdodCAwCi9YSGVpZ2h0IDAgL0l0YWxpY0FuZ2xlIDAgL1N0\nZW1WIDAgL01heFdpZHRoIDEzNDIgPj4KZW5kb2JqCjEyIDAgb2JqClsgNjAwIDYwMCA2MDAgNjAw\nIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAK\nNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCAz\nMTggNDAxIDQ2MCA4MzggNjM2Cjk1MCA3ODAgMjc1IDM5MCAzOTAgNTAwIDgzOCAzMTggMzYxIDMx\nOCAzMzcgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNgo2MzYgNjM2IDMzNyAzMzcgODM4\nIDgzOCA4MzggNTMxIDEwMDAgNjg0IDY4NiA2OTggNzcwIDYzMiA1NzUgNzc1IDc1MiAyOTUKMjk1\nIDY1NiA1NTcgODYzIDc0OCA3ODcgNjAzIDc4NyA2OTUgNjM1IDYxMSA3MzIgNjg0IDk4OSA2ODUg\nNjExIDY4NSAzOTAgMzM3CjM5MCA4MzggNTAwIDUwMCA2MTMgNjM1IDU1MCA2MzUgNjE1IDM1MiA2\nMzUgNjM0IDI3OCAyNzggNTc5IDI3OCA5NzQgNjM0IDYxMgo2MzUgNjM1IDQxMSA1MjEgMzkyIDYz\nNCA1OTIgODE4IDU5MiA1OTIgNTI1IDYzNiAzMzcgNjM2IDgzOCA2MDAgNjM2IDYwMCAzMTgKMzUy\nIDUxOCAxMDAwIDUwMCA1MDAgNTAwIDEzNDIgNjM1IDQwMCAxMDcwIDYwMCA2ODUgNjAwIDYwMCAz\nMTggMzE4IDUxOCA1MTgKNTkwIDUwMCAxMDAwIDUwMCAxMDAwIDUyMSA0MDAgMTAyMyA2MDAgNTI1\nIDYxMSAzMTggNDAxIDYzNiA2MzYgNjM2IDYzNiAzMzcKNTAwIDUwMCAxMDAwIDQ3MSA2MTIgODM4\nIDM2MSAxMDAwIDUwMCA1MDAgODM4IDQwMSA0MDEgNTAwIDYzNiA2MzYgMzE4IDUwMAo0MDEgNDcx\nIDYxMiA5NjkgOTY5IDk2OSA1MzEgNjg0IDY4NCA2ODQgNjg0IDY4NCA2ODQgOTc0IDY5OCA2MzIg\nNjMyIDYzMiA2MzIKMjk1IDI5NSAyOTUgMjk1IDc3NSA3NDggNzg3IDc4NyA3ODcgNzg3IDc4NyA4\nMzggNzg3IDczMiA3MzIgNzMyIDczMiA2MTEgNjA1CjYzMCA2MTMgNjEzIDYxMyA2MTMgNjEzIDYx\nMyA5ODIgNTUwIDYxNSA2MTUgNjE1IDYxNSAyNzggMjc4IDI3OCAyNzggNjEyIDYzNAo2MTIgNjEy\nIDYxMiA2MTIgNjEyIDgzOCA2MTIgNjM0IDYzNCA2MzQgNjM0IDU5MiA2MzUgNTkyIF0KZW5kb2Jq\nCjE1IDAgb2JqCjw8IC9zcGFjZSAxNiAwIFIgL2EgMTcgMCBSIC9jIDE4IDAgUiAvZCAxOSAwIFIg\nL2UgMjAgMCBSIC9mIDIxIDAgUgovZyAyMiAwIFIgL0MgMjMgMCBSIC9pIDI0IDAgUiAvbCAyNSAw\nIFIgL24gMjYgMCBSIC9vIDI3IDAgUiAvcCAyOCAwIFIKL3IgMjkgMCBSIC9zIDMwIDAgUiAvdCAz\nMSAwIFIgL1MgMzIgMCBSIC92IDMzIDAgUiAvViAzNCAwIFIgL1QgMzUgMCBSID4+CmVuZG9iagoz\nIDAgb2JqCjw8IC9GMSAxNCAwIFIgPj4KZW5kb2JqCjQgMCBvYmoKPDwgL0ExIDw8IC9UeXBlIC9F\neHRHU3RhdGUgL0NBIDAgL2NhIDEgPj4KL0EyIDw8IC9UeXBlIC9FeHRHU3RhdGUgL0NBIDEgL2Nh\nIDEgPj4gPj4KZW5kb2JqCjM2IDAgb2JqCjw8IC9UeXBlIC9QYXR0ZXJuIC9QYXR0ZXJuVHlwZSAx\nIC9QYWludFR5cGUgMSAvVGlsaW5nVHlwZSAxCi9CQm94IFsgMCAwIDcyIDcyIF0gL1hTdGVwIDcy\nIC9ZU3RlcCA3MgovUmVzb3VyY2VzIDw8IC9Qcm9jc2V0cyBbIC9QREYgL1RleHQgL0ltYWdlQiAv\nSW1hZ2VDIC9JbWFnZUkgXSA+PgovTWF0cml4IFsgMSAwIDAgMSAwIDU4NC4xMzI1OTEyODE3IF0g\nL0xlbmd0aCAxNTIgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicJY8xDsMwDAN3vYIf\nEOA4iuKsXbrnD22XeMnS75dUIcKAKetENzTW+bQFqvtT971L9wtv+l8zXxPUNB5LG7joNFDTotPp\ncnqAojNwpIxlgJq2BY5WBt92GtkwQkZC0EzsYmrztP/uyxKuJjspGge9hjmZohHthSd7E43LvQJw\ne4jHfF4ZFTDEZHyvf+gTq7D2sB8lszEcCmVuZHN0cmVhbQplbmRvYmoKMzcgMCBvYmoKPDwgL1R5\ncGUgL1BhdHRlcm4gL1BhdHRlcm5UeXBlIDEgL1BhaW50VHlwZSAxIC9UaWxpbmdUeXBlIDEKL0JC\nb3ggWyAwIDAgNzIgNzIgXSAvWFN0ZXAgNzIgL1lTdGVwIDcyCi9SZXNvdXJjZXMgPDwgL1Byb2Nz\nZXRzIFsgL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSSBdID4+Ci9NYXRyaXggWyAx\nIDAgMCAxIDAgNTg0LjEzMjU5MTI4MTcgXSAvTGVuZ3RoIDE2MiAvRmlsdGVyIC9GbGF0ZURlY29k\nZSA+PgpzdHJlYW0KeJx1jzEOwzAMA3e9gh9wITuK4qxdsvcPbZd4ydLvl3TnwoQBU9aJcjjP4zC/\nrV739K3Hgv+P6z0btiZdT7ys4mNWlgQ1jFf1jpOOgxoWjU6T0wIUnY49ZdQOatga2H0a/NtopKOH\njISgmdjE1ORhv9mnJYqKrKRobCyzmZ0pGtFl4sleRePwMgNweojHfGVmVMAQk/HL3ENLLMLa3b5H\nkDfECmVuZHN0cmVhbQplbmRvYmoKNSAwIG9iago8PCAvSDEgMzYgMCBSIC9IMiAzNyAwIFIgPj4K\nZW5kb2JqCjYgMCBvYmoKPDwgPj4KZW5kb2JqCjcgMCBvYmoKPDwgPj4KZW5kb2JqCjIgMCBvYmoK\nPDwgL1R5cGUgL1BhZ2VzIC9LaWRzIFsgMTAgMCBSIF0gL0NvdW50IDEgPj4KZW5kb2JqCjM4IDAg\nb2JqCjw8IC9DcmVhdG9yIChtYXRwbG90bGliIDIuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcp\nCi9Qcm9kdWNlciAobWF0cGxvdGxpYiBwZGYgYmFja2VuZCkgL0NyZWF0aW9uRGF0ZSAoRDoyMDE3\nMDYwMzE2MTc0OCswMicwMCcpCj4+CmVuZG9iagp4cmVmCjAgMzkKMDAwMDAwMDAwMCA2NTUzNSBm\nIAowMDAwMDAwMDE2IDAwMDAwIG4gCjAwMDAwMDk2MjUgMDAwMDAgbiAKMDAwMDAwODU0OSAwMDAw\nMCBuIAowMDAwMDA4NTgxIDAwMDAwIG4gCjAwMDAwMDk1NDAgMDAwMDAgbiAKMDAwMDAwOTU4MyAw\nMDAwMCBuIAowMDAwMDA5NjA0IDAwMDAwIG4gCjAwMDAwMDAwNjUgMDAwMDAgbiAKMDAwMDAwMDM5\nOCAwMDAwMCBuIAowMDAwMDAwMjA4IDAwMDAwIG4gCjAwMDAwMDE1ODYgMDAwMDAgbiAKMDAwMDAw\nNzI3MCAwMDAwMCBuIAowMDAwMDA3MDcwIDAwMDAwIG4gCjAwMDAwMDY2NzUgMDAwMDAgbiAKMDAw\nMDAwODMyMyAwMDAwMCBuIAowMDAwMDAxNjA3IDAwMDAwIG4gCjAwMDAwMDE2OTYgMDAwMDAgbiAK\nMDAwMDAwMjA3MyAwMDAwMCBuIAowMDAwMDAyMzc2IDAwMDAwIG4gCjAwMDAwMDI2NzYgMDAwMDAg\nbiAKMDAwMDAwMjk5NCAwMDAwMCBuIAowMDAwMDAzMjAwIDAwMDAwIG4gCjAwMDAwMDM2MTEgMDAw\nMDAgbiAKMDAwMDAwMzkxNiAwMDAwMCBuIAowMDAwMDA0MDU2IDAwMDAwIG4gCjAwMDAwMDQxNzMg\nMDAwMDAgbiAKMDAwMDAwNDQwNyAwMDAwMCBuIAowMDAwMDA0Njk0IDAwMDAwIG4gCjAwMDAwMDUw\nMDMgMDAwMDAgbiAKMDAwMDAwNTIzMyAwMDAwMCBuIAowMDAwMDA1NjM4IDAwMDAwIG4gCjAwMDAw\nMDU4NDIgMDAwMDAgbiAKMDAwMDAwNjI1MyAwMDAwMCBuIAowMDAwMDA2Mzk3IDAwMDAwIG4gCjAw\nMDAwMDY1MzkgMDAwMDAgbiAKMDAwMDAwODY4MCAwMDAwMCBuIAowMDAwMDA5MTA1IDAwMDAwIG4g\nCjAwMDAwMDk2ODUgMDAwMDAgbiAKdHJhaWxlcgo8PCAvU2l6ZSAzOSAvUm9vdCAxIDAgUiAvSW5m\nbyAzOCAwIFIgPj4Kc3RhcnR4cmVmCjk4MzMKJSVFT0YK\n", "image/png": "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\nAMIVAAAAAARAuAIAAACAAAhXAAAAABAA4QoAAAAAAiBcAQAAAEAAhCsAAAAACIBwBQAAAAABEK4A\nAAAAIADCFQAAAAAEQLgCAAAAgAAIVwAAAAAQAOEKAAAAAAIgXAEAAABAAIQrAAAAAAiAcAUAAAAA\nARCuAAAAACAAwhUAAAAABEC4AgAAAIAACFcAAAAAEADhCgAAAAACIFwBAAAAQAAZqR4A0BA1bdp0\n0549ezqkehyHq+zs7M27d+/umOpxAOmM7QzYVgL1z9w91WMAGhwzc/72as/M5O6W6nEA6YztDNhW\nAvWP0wIBAAAAIADCFQAAAAAEQLgCAAAAgAAIVwAAAAAQAOEKQFAff/yxvve976lr167KyMiQmWnF\nihVavHixzEwFBQWpHiIA1KnRo0fLzFRUVFQ6raioSGam0aNHp2xcAOoe4QpIQwcOHNC0adPUr18/\ntWnTRpmZmWrfvr1OPfVUXXvttXrqqackScXFxTr22GNlZnrzzTer7HPXrl3KyclRVlaWtmzZUmbe\nzp07NWXKFF144YVq3769srKylJOTo969e+u2227T2rVrazz28ePH65e//KVOOeUUTZgwQfn5+erY\nsfI7Aefl5cmMm1kB9e1w3s40VMlCG4D0wudcAWnmwIEDGjx4sObPn6+cnBwNGjRInTt31qeffqo3\n3nhDDz/8sN566y0NGTJEjRo10pgxYzRx4kRNnz5d99xzT6X9zpw5U9u3b9eIESPUvn370unLli3T\niBEjtHHjRnXu3FkDBw5Ubm6udu3apRUrVmjy5MmaPHmyli1bptNPP73a8c+ZM0cnnHCCnn766TLT\nW7ZsqVWrVqldu3a1/+EACOJw384cjo455hitWrVKrVq1SvVQANQld6fRaPXcoj+95B588EGX5D17\n9vRt27ZVmL9z505fuHBh6eMNGzZ448aNvV27dr53795K++3bt69L8meffbZ02qpVq7xly5beqFEj\nnzRpku/bt6/CcuvXr/eRI0f6okWLKu07kZl5v379alTr7t6vXz+v6ueRTFyf8teRRkvndiRvZ9Ld\nqFGjXJKvW7cupf2yraTR6r+lfAA0WkNsVf3Tc/3117skv/feeyutKW/QoEEuyR999NGk81etWuWS\nvHv37l5cXFw6vX///i7JJ0yYUO069uzZU+X8kpBUvpUErUWLFrkkz8/Pd3f3devWJa1PXKYy/MNA\n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\ndNHXv/71OlkfgCNjO3PJJZdo2LBhGjZsmD772c9qxYoVmjdvntq0aaP777//IH4a0XZo0qRJmjBh\ngo4//ngNHDhQ3bp1044dO7R+/Xr95S9/Ud++fTV//nxJ0V38fvvb32rkyJH6/Oc/X+Zzrl5//XWd\nf/75euGFF2q07vvuu0+vv/66fv3rX2vx4sUaMGCAsrKytG7dOi1YsEBPPfWU8vLySsc5efJkXXfd\ndbrsssvUokUL5eTk6IYbbjio5wugDqX6XvA0WkNsquLzZzZs2OD33XefX3rppX7CCSd4ixYtPDMz\n0zt27OgXX3yxP/jggxU+C6W8/v37uyTv3Lmz79+/v8pa9+izVO655x7Py8sr/ayali1b+umnn+63\n3npr0s+FqYwO8nOu9u/f7xMmTPBu3bp5RkZGpcuXX4enwetIo6VzO1K3MyWfO1VYWOhPP/20n3PO\nOd6sWTNv1aqVDx8+3P/5z39WWKamnw+1ZMkSv/zyy71Tp06emZnp7dq18549e/pNN91U4fOs3N2f\nffZZP++887xp06aek5PjQ4YM8VWrViVdX2Wfc+XuvmPHDv/JT37ip5xyijdt2tSbN2/uJ510ko8d\nO9Y3b95cpvbuu+/2E0880bOyslySd+nSpdLnw7aSRqv/Zu4Vz6cGULfMzPnbqz0zk7snvzIdgKQj\ndzszY8YMXX311SosLNTo0aNTPZy0xrYSqH9ccwUAAAAAARCuAAAAACAAwhUAAAAABMA1V0AKHKnX\nQtQXriMAqsd2BmwrgfrHkSsAAAAACIBwBQAAAAABEK4AAAAAIADCFQAAAAAEQLgCAAAAgAAyUj0A\noCHKzs7ebGYdUj2Ow1V2dvbmVI8BSHdsZ8C2Eqh/3IodQBlm9pCkD919bKrHAgC1YWYnSnpA0g/c\n/flUjwdAw8FpgQBKmdlRkq6QdG2qxwIAh+AiSWdJGpbqgQBoWAhXAAAAABAA4QoAAAAAAiBcAQAA\nAEAAhCsAAAAACIBwBQAAAAABEK4AAAAAIADCFQAAAAAEQLgCAAAAgAAIVwAAAAAQAOEKAAAAAAIg\nXAEAAABAAIQrAAAAAAiAcAUAAAAAARCuAAAAACAAwhUAAAAABEC4AgAAAIAACFcAAAAAEADhCgAA\nAAACyKiLTs2sp6TT66JvAHXqqPhrMzO7OqUjAVBbL7n7P2uzoJllShokqXXYIdW7ku3X1Wb2SkpH\n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\ngHAFAAAAAAEQrgAAAAAgAMIVAAAAAARAuAIAAACAAAhXAAAAABAA4QoAAAAAAiBcAQAAAEAAhCsA\nAAAACIBI3cQuAAAgAElEQVRwBQAAAAABEK4AAAAAIADCFQAAAAAEkFGbhZo2bbppz549HUIPBgAA\nhJWdnb159+7dHROnZWZmbtq/fz/78SNURkbG5n379pW+5rzeQM2U/9upDXP3g1/IzN1dixcv1uWX\nX66ZM2cqLy+v2uWop5566qmnnvr6rTczubuVm+YFBQWVLrNu3TrNnDlTl19+ubp161bteKhPr/qC\ngoIyr3l1rzeASPm/ndqo9WmB6bTjoJ566qmnnnrqw0j34ED9odUDqFu1DlfptOOgnnrqqaeeeuqT\n1x+MdAsC1IetB1D3ah2u0mnHQT311FNPPfXUJ6+vqXQLAtSHrQdQP2odrtJpx0E99dRTTz311Cev\nr4l0CwLUh60HUH9qHa6qk847Guqpp5566qmnPpJuQYD6sPUA6ledhKt023FQTz311FNPPfUVpVsQ\noD5sPYD6FzxcpduOg3rqqaeeeuqpryjdggD1YesBpEbQcJVuOw7qqaeeeuqppz65dAoC1IetB5A6\nwcJVuu04qKeeeuqpp576yqVLEKA+fD2A1AkSrtJtx0E99dRTTz311FctXYIA9eHrAaTOIYerdNtx\nUE899dRTTz31hy5dgwP11dcDSJ1DClfptuOgnnrqqaeeeuoPXToHB+oPvR5A3al1uEq3HQf11FNP\nPfXUU3/o0i0IUB+2HkDdqnW4SqcdB/XUU0899dRTn7z+YKRbEKA+bD2AulfrcJVOOw7qqaeeeuqp\npz55fU2lWxCgPmw9gPpR63CVTjsO6qmnnnrqqac+eX1NpFsQoD5sPYD6U+twVZ103tFQTz311FNP\nPfWRdAsC1IetB1C/6iRcpduOg3rqqaeeeuqpryjdggD1YesB1L/g4SrddhzUU0899dRTT31F6RYE\nqA9bDyA1goardNtxUE899dRTTz31yaVTEKA+bD2A1AkWrtJtx0E99dRTTz311FcuXYIA9eHrAaRO\nkHCVbjsO6qmnnnrqqae+aukSBKgPXw8gdQ45XKXbjoN66qmnnnrqqT906RocqK++HkDqHFK4Srcd\nB/XUU0899dRTf+jSOThQf+j1AOpOrcNVuu04qKeeeuqpp576Q5duQYD6sPUA6latw1U67Tiop556\n6qmnnvrk9Qcj3YIA9WHrAdS9WoerdNpxUE899dRTTz31yetrKt2CAPVh6wHUj1qHq3TacVBPPfXU\nU0899cnrayLdggD1YesB1J9ah6vqpPOOhnrqqaeeeuqpj6RbEKA+bD2A+lUn4SrddhzUU0899dRT\nT31F6RYEqA9bD6D+mbsf9EJNmzbdtGfPng51MB4AABBQdnb25t27d3dMnJaZmblp//797MePUBkZ\nGZv37dtX+przegM1U/5vpzZqFa4ApI6ZLZb0urvfcBDLFEm6z93vqqtxxetpJOl/JI2Q1EbSBe6+\nuJplukpaJ+ksd3+lkpozJb0sqZu7F4UbMYD6VH77VZPtmZm9Lukxdy8Iue66YmYdJT0g6TxJzdzd\narDMaEXb6OZV1IyTdIO7dw00VAB1ICPVAwCOdHWwQx8uad9BLnOWpJ2B1l+VgZKulpQnaa2kj+ph\nnQAOX7XZnlWpiqASfF2VGCcpV1IvSZ/Uw/pQR+oikJtZnqRFko5293+H6jdV60FFhCsgTZhZprtX\nu+N394MOLO7+Qe1GddA+K+l9d3+pntYH4DBWm+3ZYbCuz0p61d3frqf1AUgjdXa3QACSmc2Q1E/S\nd8zM49bVzPLi7wea2d/N7FNJA8zsODN70sw2mdlOM1tuZoPL9bnYzO5LeFxkZreb2W/M7GMze9fM\n/rvcMkXxKSUlj93MvmFmM+P1rDWzK8stc3a8/j1m9qqZfSleLq+K53qvpGPjuqJ4ehMzm2Jmm+O+\nlplZ32p+bl8ys7fi+iWSTig3v5WZPWhmW+KatWZ2Y1V9Aqi9eHux2cwal5v+sJk9FX9f7fYrSb/l\nt2ft4z52m9l6MxuTZJmbzey1eB0bzWy6meXE8/IkFUo6KmGbW1DJulqb2R/MbGu8vufN7L8S5o82\nsx1mdpGZvR6vb5GZVXoniXi7N1TSVfG6Z8TTjzWzJ8zsk7g9bmadq/nZjI9/ljvM7AFJlZ4yiPAq\n23/H8042s2fi13KLmT1i0emgJcueYmZ/jvfJO8xspZldEC+/KC77IPF3JMn6M81sqpm9Z2Z7zewd\nM5uUMD/LzO6I9/m7zOxlMxsQz6vxehAe4QqoW2MlLVW0s+8Ut3cS5t8h6XZJJ0r6m6Kd5zxJX5DU\nU9IsSY+b2YnVrOcmSf8n6fS4zzvNrE81y/xI0pPxev4k6fdmdqwkmVlzSXMkvSXpDEm3Sqrueq2x\nkn4s6d34eZ4VT79T0khJYySdFo9zvpl1StaJmX1G0mxJzyk6reaXcR+JfiLpFEmDJfWI+95YzfgA\n1N5MSa0UbZsklW4nhkp6KJ5U2+1XohmKjvz0l3SppKskdS1XUyzpRkn/Jelrknor2k5I0kvxvF36\nzza3sm3XDElnx8+hd7zMfDNrmlDTRNIERduYPpJyJP26ivGfJel5Sf8br3usRdeiPimpg6QL4pYr\nabaZJb0ey8y+rGg7l69ou/5PSTdXsV6El3T/He+7XpD0uqLfm/6KfvefjF9rSXpY0vvx/F6SCiTt\nUbT/vyyu+a+4z7GVrP97koZJ+oqk4xXtR/+ZML9QUfj7mqTPSfqDpKfNrOdBrgehuTuNRqvDJmmx\novP/E6flSXJJl9Vg+WWSbq+sP0lFkh4pt8zb5ZYpkjQu4bFL+nnC4wxF/1hcGT/+pqLrpZom1Hwt\nXi6virGOk1SU8PgoSZ9KuiphWmNJayT9JH7cNe73zPjxzyStVnzDnXja7XFN1/jxU5J+n+rXlkZr\nSE3S45IeTHh8paTtkrKrWKa67VfpY0VHqF3SeQnzu0g6IKmginV8SdJeSY3ix6Ml7UhSl7iu4+N1\nnZ8wv1X8fK5N6Mcl9UiouSJel1UxnjmSZiQ8/kL8HLomTOuuKCT2TzZmRSFxWrl+n0/cvtLq5Xe+\nzO9rPO3Hkv5cblrr+Held/z4Y0mjKukzL65tV826p0r6c7LfNUnHxb8/x5abPlvS/QezHlr4xpEr\nILXK3B3PzI4yszvN7M34VJUdks6UdGw1/bxW7vF7ktrXdBl33y/pg4RlTlR0Ee/uhPq/VdNfMsdJ\nypT014R1HVD0buDJlSxzkqRlHu8dYkvL1fyPpJHxqRZ3mVm/WowNwMF5SNKlZtYsfnyFpFnuvkc6\npO1XiZMU/cP495IJ7r5e0faslJldaGbPxadDfaIo9GVJOpjbJ5esq3Tb4u7bFR1ZT9w27XX3xKMF\n78Xran2Q63rPE+506u5r476q2g6W3+6Vf4zUOEPS+fHpfjvi3/OSM1KOi7/eI2m6mS00s9sO8uht\niRmKjnqtNrNfmdmghCNjp0sySW+WG8eghDEgRQhXQGqVv4PfXZIul/RDRYf7eyn6RyOrmn7K3wjD\nVf3fd22WCanWnwPh7vMUvaN9l6R2kp4xs8JQAwOQ1DOS9ksaambtFZ0O9VDC/Npuv8qrdNtgZl3i\ncayK13WGolP2VIv11GT9+yuZF2pbyefhHH4aKfod7FWuHa/oqKU8+tiAkxUdSTpX0mvJrh+sirsv\nV3Rmx4R4nX+Q9FwcsBop+t05q9wYTtJ//h6QIoQroO59quhUuJroK+kBd5/l7q8pun4pFe9CvSXp\nc+WuPehdi37WKHr+55VMsOiC+D6S3qxkmVWSzi53LcI55Yvc/d/u/qC7j5Z0jaRRZtakFmMEUAPu\nvlfRtVdXKLr+Y5Oi06ZKHOr26y1F/5eUbmvi60BzE2rOVBSibnL3pe6+utx8qWbb3FXxukqvTTWz\nloqu5axs21RbqyTlltwMIV5Xd0Xjrmo7WH67V2E7iDqX7HdpuaLrmNa7+7/KtdJb77v72+4+1d0H\nSfqdpGsT+lSSfitw90/c/TF3v17RUakLFV2T+A9FR646JhlDyfXHNV4PwiJcAXWvSFJvi+4S2C7h\nsH4yqyUNM7PTzewURe8KZ9fHIMt5WNE1AtPiuyL1l/SDeF6N32l1952KTuG7w6I7I54UP+4g6f5K\nFvu1onfrpphZDzMbIelbiQVm9mMzu9TMjo/7HC5pbfzPH4C685CkAYr+Jh9x9+KEeYe0/YpPv5sv\n6Tdm1sfMeik6NSrx9OS3Ff3vcqOZdTOzryq6gUWiIknZZvaFeJvbrNx8eXSb9CfjdX0+YbwfK9r+\nhfS8otOw/2hmZ1r0oeh/VPRP+sJKlvmFojeMrou3cxMU3XwD9atIFfffv1J0fd6fLLqrbncz629m\nvzWzFmbWND6NLy9e7mxFbzyUBOn1ivajg8zs6PjGMBVYdFfMr5rZSWb2WUXXPX8s6d34TYU/Spph\nZiPiMZxpZuPMbPjBrAfhEa6AuneXoneQ3lR0XVNV1x/cLGmLpCWK7rq1LP6+XsXvvl2i6N25f0ia\nrOhuR1J0x6OD8X1FdyMslLRC0qmSvuTu71ey7g2KwtKXJK1UdCfEW8uV7ZX003j+XyW1iMcLoG4t\nUXRnzpNV9pRAKcz2a7SkdYpCx9OKgk5Rycz4iNjYeF1vKjoaMC6xA48+Z+/Xkh5RtM0dX8m6rlZ0\n2uJT8ddmirZNuyupr5X4+tGh8VgWxW2TpEvLXVuauMyfFG1zf6poG3yKout4UL8q7L/d/T1FZ2MU\nK3oz4A1FgWtv3A4ouiZvhqK7+z2h6Hq5myUpPrKUr+i13Syp9OMByvlE0n8r+t1crui0v4vdfVc8\n/2pF+9U7FR31nSPpfEWh6mDWg8Cskr9rACjDzIYq2km0dz7tHQAAoIKMVA8AQHoys1GS1iq6C9Ln\nJE2R9DTBCgAAIDnCFYDKdJA0UdGHD25SdHek76d0RAAAAGmM0wIBAAAAIABuaAEAAAAAARCuAAAA\nACAAwhUAAAAABEC4AgAAAIAACFcAAAAAEADhCgAAAAACIFwBAAAAQACEKwAAAAAIgHAFAAAAAAEQ\nrgAAAAAgAMIVAAAAAARAuAIAAACAAAhXAAAAABAA4QoAAAAAAiBcAQAAAEAAhCsAAAAACIBwBQAA\nAAABEK4AAAAAIADCFQAAAAAEQLgCAAAAgAAIVwAAAAAQAOEKAAAAAAIgXAEAGiQzm2Rm0+PvTzCz\nbbXsZ6KZ3Rd2dACAwxHhCgCOAGa2I6EVm9nuhMdXHEK/y8zsypBjjfv9lpk9H7rf2nL31e6eU12d\nmX3JzP5Vbtl8d7+h7kYHADhcZKR6AACAQ+fuzUu+N7MiSde6e9qEl7pmZhnuvj/V4wAANGwcuQKA\nBsDMGpvZD81srZn928z+aGY58byjzOxRM/vIzLaZ2d/MrLWZ3S3pLEnT4yNgdyfpN+my8bw2ZvaA\nmW0ys3fMLN/MGpnZaZKmSMqL+91UyZiXmdn/M7NXzWy7mc0ys1bxvBPNbL+ZXWdm70iaG0//fDyG\nbWa23MzOS+jvs2b2VzP7xMzmSWqdMO9EM9uf8Lhdwti3mtmfzKytpCckdU84Ktg28fTCeNnLzOzN\neAzPm9nxCfM2mdlNZvZ6/Jz+aGZZtXlNAQDph3AFAA3DOElflNRXUmdJ+yTdG8+7VtGZDMdIaifp\nBkmfuvstkl5WdBSsefy4vKTLxvP+KGm7pO6Seku6VNLX3f0fkm6UtDjut2MV475K0hVx/1mSEgNe\nY0lnS+ohaaiZdZU0W9JtktpIul3S7DgomqSZkl6Q1FbSXZK+XsV6/yTJJJ0oqYOkX7n7h5KGSVob\nj7t5PK2UmZ0iaYakb0tqL+kvkp40s8QzRUZIukjSZ+Pxf62KcQAADiOEKwBoGL4l6VZ3f8/d90ia\nKGlkHDr2STpa0nHuvt/dX3b3nTXsN+myZtZF0vmSbnb3Xe7+vqSpkr5ykOMudPe33H2HpHxJXy03\n/0dx/7sljZL0uLs/7+7F7j5X0puKQuXxkk6SNNHdP3X3P0uan2yFZtZN0uclfdvdt8X1L9RwvF+R\n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\nunXrpilTpujAgQPluTVr1mjixInq1q2bjj76aKWkpOjkk0/Wrbfeqq+++qpW/fviiy80YcIEnXji\niWrZsqWOOeYYDRs2TKtWrYrI5uXlycy0fPlyPf300zr33HPVpk0bZWdnV7r9goICmZnGjh0rSbr2\n2mtlZhWuAQu/5iovL085OTmSpMcff7w8nwjXjQEAgEgcuQIQc48++qh++tOfKj09XUOHDlVaWpp2\n7NihDz74QPn5+frZz35Wnt24caMGDhyoTZs2qUePHrrppptUWlqqTz75RL///e914403qnXr1pKk\n2bNna/78+RowYIAGDRqk0tJSrVmzRg899JCWLFmid955R23btq22f2vXrtVFF12k3bt3a/DgwRo1\napS+/PJLLViwQP369dP8+fM1ZMiQiPUefPBBvfrqqxo6dKgGDhyovXv3VtpG+/btdffdd2vdunVa\nuHChhg8fXn4ji7I/w+Xm5mrPnj16+OGH1a1bN40YMaJ8WWXrAACAOHLOMTExMdV78nYn0Z199tmu\nRYsWrrCwMGLZzp07K7zu06ePk+R+97vfRc0WFRWVvy4oKHAlJSURuT//+c9OkrvvvvsqzM/Pz3eS\nXH5+fvm8Q4cOuc6dO7uWLVu65cuXV8hv2bLFZWZmuvT0dFdcXFw+/+6773aSXGpqqlu7dm2l7zua\naH0oM3bsWCfJbdy4sXzexo0bnSQ3duzYGrfh/yzi/plgYmJiYmJqahOnBQJoEElJSUpOTo6Yn5aW\nVv73NWvWaOXKlerevbtuv/32qNmUlJTy11lZWWrevHlEbvz48TrqqKO0dOnSavv10ksv6bPPPtMv\nfvELDRgwoMKyzMxM3Xbbbdq+fbtef/31iHVvuOEGnXXWWdW2AQAAmgZOCwQQc2PGjNGtt96qrl27\n6sorr9SAAQPUt29fdezYsULu7bffliQNHjxYzZpV/93PoUOH9Kc//Ul//etf9eGHH2rv3r0qLS0t\nX75ly5Zqt7Fy5UpJ0qZNm5SXlxex/NNPP5UkffTRRxGnBvbq1ava7QMAgKaD4gpAzN1yyy1KS0vT\nrFmzNGPGDE2fPl1mpgEDBmjatGnq2bOnJGnPnj2SVONbkY8ePVrz58/XiSeeqOHDhys9PV0tW7aU\nJE2fPl0HDx6sdhu7du2SJM2bN6/K3P79+yPmVfV8KgAA0PRQXAFoENdcc42uueYa7dmzR//4xz80\n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\nAgAAAIAA/H+q+PotkV0oyQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "mglearn.plots.plot_improper_processing()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 위 그림의 첫번째 경우의 문제점\n", " - 검증 데이터의 정보가 Scale을 통한 데이터 변환시에 이미 노출이 됨. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Building Pipelines" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 교차 검증을 위한 훈련데이터와 검증데이터의 분할은 Scale과 같은 모든 데이터 변환 전처리 과정보다 앞서야 함.\n", "- sklearn.pipeline.Pipeline\n", " - Sequentially apply a list of transforms and a final estimator\n", " - 교차 검증을 위한 훈련데이터/검증데이터 분할을 모든 데이터 변환 처리 보다 앞서게 할 수 있음. " ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn.pipeline import Pipeline\n", "pipe = Pipeline([(\"scaler\", MinMaxScaler()), (\"svm\", SVC())])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 위와 같은 구성이 되면 pipe.steps에 Pipeline 정보가 들어감\n", " - pipe.steps[0] <- (\"scaler\", MinMaxScaler())\n", " - pipe.steps[0][1] <- MinMaxScaler()\n", " - pipe.steps[1] <- (\"svm\", SVC())\n", " - pipe.steps[1][1] <- SVC()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Pipeline(steps=[('scaler', MinMaxScaler(copy=True, feature_range=(0, 1))), ('svm', SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,\n", " decision_function_shape=None, degree=3, gamma='auto', kernel='rbf',\n", " max_iter=-1, probability=False, random_state=None, shrinking=True,\n", " tol=0.001, verbose=False))])" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pipe.fit(X_train, y_train)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Test score: 0.95\n" ] } ], "source": [ "print(\"Test score: {:.2f}\".format(pipe.score(X_test, y_test)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Using Pipelines in Grid-searches" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 그리드 서치를 위한 후보 파라미터 설정시에 각 파라미터 이름 설정\n", " - '단계의 이름' + '__' + '파라미터 이름'" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": true, "scrolled": true }, "outputs": [], "source": [ "param_grid = {\n", " 'svm__C': [0.001, 0.01, 0.1, 1, 10, 100],\n", " 'svm__gamma': [0.001, 0.01, 0.1, 1, 10, 100]\n", "}" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Best cross-validation accuracy: 0.98\n", "Test set score: 0.97\n", "Best parameters: {'svm__C': 1, 'svm__gamma': 1}\n" ] } ], "source": [ "grid = GridSearchCV(pipe, param_grid=param_grid, cv=5)\n", "grid.fit(X_train, y_train)\n", "\n", "print(\"Best cross-validation accuracy: {:.2f}\".format(grid.best_score_))\n", "print(\"Test set score: {:.2f}\".format(grid.score(X_test, y_test)))\n", "print(\"Best parameters: {}\".format(grid.best_params_))" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "hide_input": false }, "outputs": [ { "data": { "application/pdf": "JVBERi0xLjQKJazcIKu6CjEgMCBvYmoKPDwgL1R5cGUgL0NhdGFsb2cgL1BhZ2VzIDIgMCBSID4+\nCmVuZG9iago4IDAgb2JqCjw8IC9Gb250IDMgMCBSIC9YT2JqZWN0IDcgMCBSIC9FeHRHU3RhdGUg\nNCAwIFIgL1BhdHRlcm4gNSAwIFIKL1NoYWRpbmcgNiAwIFIgL1Byb2NTZXQgWyAvUERGIC9UZXh0\nIC9JbWFnZUIgL0ltYWdlQyAvSW1hZ2VJIF0gPj4KZW5kb2JqCjEwIDAgb2JqCjw8IC9UeXBlIC9Q\nYWdlIC9QYXJlbnQgMiAwIFIgL1Jlc291cmNlcyA4IDAgUgovTWVkaWFCb3ggWyAwIDAgODU1LjQg\nNDc1LjUzMjA0Mzk1MDkgXSAvQ29udGVudHMgOSAwIFIKL0dyb3VwIDw8IC9UeXBlIC9Hcm91cCAv\nUyAvVHJhbnNwYXJlbmN5IC9DUyAvRGV2aWNlUkdCID4+IC9Bbm5vdHMgWyBdID4+CmVuZG9iago5\nIDAgb2JqCjw8IC9MZW5ndGggMTEgMCBSIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4\nnLWXy3IbNxBF9/MVWCYbCP3Aa2k5iVNeJbEqXqSyUFGUQxVFJyTL/v1cDB/TUGiLVMoLlaijQU93\n3wZwSe5huHpF7sPGBfeAn8/uD/cnft85cm/c1Q/zT4vZ/Lc31262GQL441Bi9IpPy/0nzdFH4aAK\nFPo//xqG1fCPq54dJ/XEJRcJhcQVyY5K9SEXTqGkmtx67t67lbt6xS0d5ISfz3gR0vjldrudr1fD\nbOOufia3ma2GgcSLSkyK0MWzVCrILobklXNmMXhpsQRCIoyV4FOQDiPv6+FX97LMg4+BasL/VXZF\nDLYINxbBuyIi4encondVJAk+i6bYV2Fwl66J8s3L6PGAnNQjKCNBWwHC+9peR10FBneZmiinKzgk\nNWbyME7GYVDHrJDK9Y27+okcqbu5H5iiL6yJhJWTY4xqDbmWShLwwN3w3XZ9u1gtVh/c/cfl3eZ7\nd/Pgfrzpg0RmX2pKnDHVfCrIp9vl4u52u/i4GsOcjAJhPGFZpCycT6Yy32zdZr49LCf31jEq7Lff\nwIl8jbnVI8IegqaKVlvM1WuANq6DCTsyQeKeik+Za6xuhm4dMdUDfrR4erptpuf5FGY5DO8wOW/H\nHR2eaEdthBgNSqlIwlhjDnLKKozXC5GHhFqK5cuOp4RhSSVkcBvH8nGIDpMzTc1xYjjsJqbsV48T\nI6q+MtrGIUH7JtNmdrucr9394gKhlNRrTpVSr5SGvNtI0XUU24tzIOmkquJjRB7cS4Xdu8edVNPT\nvSRf4lOYM6TCjpBMrfVKydccJY9SIV5Uaa03fNlxLR4yYis1qUwcy8+Uist+9SgVDnZPQgl7PuNU\na1K9+/31GTpFnEyxEI3VGJ0sn3Tq6FEnQzudIk3cCmW5VSSdwS9RKgb1QWuVJ0olEU/E2vNlx60i\nNs7lSrWbabd617fTSv29nt8tZtunpye3CJJr25Y5Oo24xkIOKjWGOi5+vf642bjpED5EONx56B2O\n3MOKSzzH0F/X//Uc7FWyKj3xHEfceQ4c+bBEiXJnOSztruoL036p4TAlWMNhSjDYJmuCfOMavuY2\nTPrWbZj0DbZ5miAn0/+fXgPNIezR+EKX0S1/gb/oX3+es0Di2PwBlsQVDG3Cxd3aajGOpFoD2mph\nm46IQ9CwnNFb+Ld2VU1Q9vBxOPEkFHmWypE+e0VlqAttGVNXPA7uVKXVghBSa41q8NJi4oBhwK5t\nRtVE6fiZFxQ6M64usWVfK8wIVeUqWi6zEqazhJsmZaice2kITiGHwKMdm2iEY2JcUtpRzT7HANvW\n6UMqB/w4nHy6U+PLXCb+rE5FcYfq2PkMy5+b82qVJVjKmsbOT3xpOQeGo5Wwc31TnI6fqVQNu9Uy\nKkWFoHVtxgKu5QIrkaVg3+w2oNWp40edLJ10stTqlJQnboTquFGk4Hx7ll+gFJb4KjiEc69UQbtr\nLbHnS8s7RUycFyiVYATG1fsKTiv1dStBHlcZ4Wxk3MIaIr6Awd/vvoTd7I/KQwhrJ4Z/AWD2o28K\nZW5kc3RyZWFtCmVuZG9iagoxMSAwIG9iagoxMTQwCmVuZG9iagoxNiAwIG9iago8PCAvTGVuZ3Ro\nIDE3IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nDM2tFAwgMMUQy4AGpQC7AplbmRz\ndHJlYW0KZW5kb2JqCjE3IDAgb2JqCjw8IC9MZW5ndGggMzA0IC9GaWx0ZXIgL0ZsYXRlRGVjb2Rl\nID4+CnN0cmVhbQp4nD2SO5LDMAxDe52CF8iM+JPk82Qnlff+7T4yyVaASYkAKC91mbKmPCBpJgn/\n0eHhYjvld9iezczAtUQvE8spz6ErxNxF+bKZjbqyOsWqwzCdW/SonIuGTZOa5ypLGbcLnsO1ieeW\nfcQPNzSoB3WNS8IN3dVoWQrNcHX/O71H2Xc1PBebVOrUF48XURXm+SFPoofpSuJ8PCghXHswRhYS\n5FPRQI6zXK3yXkL2DrcassJBaknnsyc82HV6Ty5uF80QD2S5VPhOUezt0DO+7EoJPRK24VjufTua\nsekamzjsfu9G1sqMrmghfshXJ+slYNxTJkUSZE62WG6L1Z7uoSimc4ZzGSDq2YqGUuZiV6t/DDtv\nLC/ZLMiUzAsyRqdNnjh4yH6NmvR5led4/QFs83M7CmVuZHN0cmVhbQplbmRvYmoKMTggMCBvYmoK\nPDwgL0xlbmd0aCAyMzAgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicNVFJbsMwDLzr\nFfOBAOIuv8dBT+3/rx3SCWBgaEuczREbGxF4icHPQeTGW9aMmvibyV3xuzwVHgm3gidRBF6Ge9kJ\nLm8Yl/04zHzwXlo5kxpPMiAX2fTwRMhgl0DowOwa1GGbaSf6hoTPjkg1G1lOX0vQS6sQKE/ZfqcL\nSrSt6s/tsy607WtPONntqSeVTyCeW7ICl41XTBZjGfRE5S7F9EGqs4WehPKifA6y+aghEl2inIEn\nBgejQDuw57afiVeFoHV1n7aNoRopHU//NjQ1SSLkEyWc2dK4W/j+nnv9/AOmVFOfCmVuZHN0cmVh\nbQplbmRvYmoKMTkgMCBvYmoKPDwgL0xlbmd0aCAyMjcgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4K\nc3RyZWFtCnicNU87sgMhDOs5hS6QGYxtYM+zmVQv92+fZLINEv5I8vRERyZe5sgIrNnxthYZiBn4\nFlPxrz3tw4TqPbiHCOXiQphhJJw167ibp+PFv13lM9bBuw2+YpYXBLYwk/WVxZnLdsFYGidxTrIb\nY9dEbGNd6+kU1hFMKAMhne0wJcgcFSl9sqOMOTpO5InnYqrFLr/vYX3BpjGiwhxXBU/QZFCWPe8m\noB0X9N/Vjd9JNIteAjKRYGGdJObOWU741WtHx1GLIjEnpBnkMhHSnK5iCqEJxTo7CioVBZfqc8rd\nPv9oXVtNCmVuZHN0cmVhbQplbmRvYmoKMjAgMCBvYmoKPDwgL0xlbmd0aCAyNDUgL0ZpbHRlciAv\nRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicRVC7jUMxDOs9BRcIYP0se553SJXbvz1KRnCFIVo/kloS\nmIjASwyxlG/iR0ZBPQu/F4XiM8TPF4VBzoSkQJz1GRCZeIbaRm7odnDOvMMzjDkCF8VacKbTmfZc\n2OScBycQzm2U8YxCuklUFXFUn3FM8aqyz43XgaW1bLPTkewhjYRLSSUml35TKv+0KVsq6NpFE7BI\n5IGTTTThLD9DkmLMoJRR9zC1jvRxspFHddDJ2Zw5LZnZ7qftTHwPWCaZUeUpnecyPiep81xOfe6z\nHdHkoqVV+5z93pGW8iK126HV6VclUZmN1aeQuDz/jJ/x/gOOoFk+CmVuZHN0cmVhbQplbmRvYmoK\nMjEgMCBvYmoKPDwgL0xlbmd0aCAxMzMgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnic\nTY9BEsMwCAPvfoWegLEB8550ekr+fy2QNu4F7YyAkYYwCDxiDOswJbx6++FVpEtwNo75JRlFPAhq\nC9wXVAVHY4qd+Njdoeyl4ukUTYvrEXPTtKR0N1Eqbb2dyPjAfZ/eH1W2JJ2CHlvqhC7RJPJFAnPY\nVDDP6sZLS4+n7dneH2Y+M9cKZW5kc3RyZWFtCmVuZG9iagoyMiAwIG9iago8PCAvTGVuZ3RoIDMz\nOCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJxFUktyxTAI2+cUXCAz5mfj87xOV+n9\nt5VwOt089AwICTI9ZUim3DaWZITkHPKlV2SI1ZCfRo5ExBDfKaHArvK5vJbEXMhuiUrxoR0/l6U3\nMs2u0Kq3R6c2i0Y1KyPnIEOEelbozO5R22TD63Yh6TpTFodwLP9DBbKUdcoplARtQd/YI+hvFjwR\n3Aaz5nKzuUxu9b/uWwue1zpbsW0HQAmWc95gBgDEwwnaAMTc2t4WKSgfVbqKScKt8lwnO1C20Kp0\nvDeAGQcYOWDDkq0O12hvAMM+D/SiRsX2FaCoLCD+ztlmwd4xyUiwJ+YGTj1xOsWRcEk4xgJAiq3i\nFLrxHdjiLxeuiJrwCXU6ZU28wp7a4sdCkwjvUnEC8CIbbl0dRbVsT+cJtD8qkjNipB7E0QmR1JLO\nERSXBvXQGvu4iRmvjcTmnr7dP8I5n+v7Fxa4g+AKZW5kc3RyZWFtCmVuZG9iagoyMyAwIG9iago8\nPCAvTGVuZ3RoIDIzMiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJw1UTtyBTEI630K\nXSAz5m+fZzOvSu7fRrCTZmEBCQnnPdiIxJcY0h3lim9ZnWYZfieLvPhZKZy8F1GBVEVYIe3gWc5q\nhsFzI1PgciY+y8wn02LHAqqJOM6OnGYwCDGN62g5HWaaBz0h1wcjbuw0y1UMab1bqtf3Wv5TRfnI\nupvl1imbWqlb9Iw9icvO66kt7QujjuKmINLhY4f3IF/EnMVFJ9LNfjPlsJI0BKcF8CMxlOrZ4TXC\nxM+MBE/Z0+l9lIbXPmi6vncv6MjNhEzlFspIxZOVxpgxVL8RzST1/T/Qsz5/mjBURwplbmRzdHJl\nYW0KZW5kb2JqCjI0IDAgb2JqCjw8IC9MZW5ndGggNjggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4K\nc3RyZWFtCnicMzK3UDBQsDQBEoYWJgrmZgYKKYZcQL6piblCLhdIDMTKAbMMgLQlnIKIW0I0QZSC\nWBClZiZmEEk4AyKXBgDJtBXlCmVuZHN0cmVhbQplbmRvYmoKMjUgMCBvYmoKPDwgL0xlbmd0aCA0\nNSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJwzMrdQMFCwNAEShhYmCuZmBgophlyW\nEFYuF0wsB8wC0ZZwCiKeBgCffQy1CmVuZHN0cmVhbQplbmRvYmoKMjYgMCBvYmoKPDwgL0xlbmd0\naCAxNjEgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicRZBLEsMgDEP3nEJH8EcGfJ50\nukrvv60hTbOAp7FABncnBKm1BRPRBS9tS7oLPlsJzsZ46DZuNRLkBHWAVqTjaJRSfbnFaZV08Wg2\ncysLrRMdZg56lKMZoBA6Fd7touRypu7O+Udw9V/1R7HunM3EwGTlDoRm9SnufJsdUV3dZH/SY27W\na38V9qqwtKyl5YTbzl0zoATuqRzt/QWpczqECmVuZHN0cmVhbQplbmRvYmoKMjcgMCBvYmoKPDwg\nL0xlbmd0aCAyMTQgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicPVC7EUMxCOs9BQvk\nznztN8/Lpcv+bSScpEI2QhKUmkzJlIc6ypKsKU8dPktih7yH5W5kNiUqRS+TsCX30ArxfYnmFPfd\n1ZazQzSXaDl+CzMqqhsd00s2mnAqE7qg3MMz+g1tdANWhx6xWyDQpGDXtiByxw8YDMGZE4siDEpN\nBv+tcvdS3O89HG+iiJR08K755fTLzy28Tj2ORLq9+YprcaY6CkRwRmryinRhxbLIQ6TVBDU9A2u1\nAK7eevk3aEd0GYDsE4njNKUcQ//WuMfrA4eKUvQKZW5kc3RyZWFtCmVuZG9iagoyOCAwIG9iago8\nPCAvTGVuZ3RoIDIzNiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJxNUEtuRCEM23OK\nXOBJJCEBzkPVVef+27HDVO0qhhh/SA/pslUe61NidYns8qVNl8oyeRWo5U/b/1EMAm7/0MhBtLeM\nnWLmEtbFwiQ85TQjGyfXLB+PO08bZoXGxI3jnS4ZYJ8WATVblc2BOW06N0C6kBq3qrPeZFAMIupC\nzQeTLpyn0ZeIOZ6oYEp3JrWQG1w+1aEDcVq9Crlji5NvxBxZocBh0Exx1l8B1qjJslnIIEmGIc59\no3uUCo2oynkrFcIPk6ER9YbVoAaVuYWiqeWS/B3aAjAFtox16QxKgaoAwd8qp32/ASSNXVMKZW5k\nc3RyZWFtCmVuZG9iagoyOSAwIG9iago8PCAvTGVuZ3RoIDE1NyAvRmlsdGVyIC9GbGF0ZURlY29k\nZSA+PgpzdHJlYW0KeJxFkLkRQzEIRHNVQQkSsAjqscfRd/+pF/lKtG8ALYevJVOqHyciptzXaPQw\neQ6fTSVWLNgmtpMachsWQUoxmHhOMaujt6GZh9TruKiquHVmldNpy8rFf/NoVzOTPcI16ifwTej4\nnzy0qehboK8LlH1AtTidSVAxfa9igaOcdn8inBjgPhlHmSkjcWJuCuz3GQBmvle4xuMF3QE3eQpl\nbmRzdHJlYW0KZW5kb2JqCjMwIDAgb2JqCjw8IC9MZW5ndGggMzMyIC9GaWx0ZXIgL0ZsYXRlRGVj\nb2RlID4+CnN0cmVhbQp4nC1SOY4kMQzL/Qp+YADr8vGeHkzU+/90SVUFBapsyzzkcsNEJX4skNtR\na+LXRmagwvCvq8yF70jbyDqIa8hFXMmWwmdELOQxxDzEgu/b+Bke+azMybMHxi/Z9xlW7KkJy0LG\nizO0wyqOwyrIsWDrIqp7eFOkw6kk2OOL/z7FcxeCFr4jaMAv+eerI3i+pEXaPWbbtFsPlmlHlRSW\ng+1pzsvkS+ssV8fj+SDZ3hU7QmpXgKIwd8Z5Lo4ybWVEa2Fng6TGxfbm2I+lBF3oxmWkOAL5mSrC\nA0qazGyiIP7I6SGnMhCmrulKJ7dRFXfqyVyzubydSTJb90WKzRTO68KZ9XeYMqvNO3mWE6VORfgZ\ne7YEDZ3j6tlrmYVGtznBKyV8NnZ6cvK9mlkPyalISBXTugpOo8gUS9iW+JqKmtLUy/Dfl/cZf/8B\nM+J8AQplbmRzdHJlYW0KZW5kb2JqCjMxIDAgb2JqCjw8IC9MZW5ndGggMTMxIC9GaWx0ZXIgL0Zs\nYXRlRGVjb2RlID4+CnN0cmVhbQp4nEWPyw0EIQxD71ThEvIZPqmH1Z7Y/q/rMJpBQvhBIjvxMAis\n8/I20MXw0aLDN/421atjlSwfunpSVg/pkIe88hVQaTBRxIVZTB1DYc6YysiWMrcb4bZNg6xslVSt\ng3Y8Bg+2p2WrCH6pbWHqLPEMwlVeuMcNP5BLrXe9Vb5/QlMwlwplbmRzdHJlYW0KZW5kb2JqCjMy\nIDAgb2JqCjw8IC9MZW5ndGggMzM4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nDVS\nS5JbQQjbv1PoAq5q/s15nJrV5P7bCOysoIEWEpAWOMjESwxRjXLFH3mC8TqBv+vlafw+3oXUgqci\n/cC1aRvvx5o1UbA0YinMPvb9KCHHU+PfEOi5SBNmZDJyIBmI+7U+f9abTDn8BqRpc/ooSXoQLdjd\nGnZ8WZBB0pMaluzkh3UtsLoITZgbayIZObUyNc/HnuEynhgjQdUsIEmfuE8VjEgzHjtnLXmQ4Xiq\nFy9+vY3XMo+pl1UFMrYJ5mA7mQmnKCIQv6AkuYm7aOoojmbGmtuFhpIi9909nJz0ur+cRAVeCeEs\n1hKOGXrKMic7DUqgauUEmGG99oVxmjZKuFPT7V2xr99nJmHc5rCzUjINznFwL5vMESR73TFhEx6H\nmPfuEYzEvPldbBFcucy5JtOP/SjaSB8U1+dcTZmtKOEfquSJFdf4//zez88/kDd9sQplbmRzdHJl\nYW0KZW5kb2JqCjMzIDAgb2JqCjw8IC9MZW5ndGggNzIgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4K\nc3RyZWFtCnicNYyxEcAwCAN7ptAINlhg75NLRfZvQ3xOAy8dD5eiwVoNuoIjcHWp/NEjXbkpRZdj\nzoLhcapfSDFGPagj497HT7lfcBYSfQplbmRzdHJlYW0KZW5kb2JqCjM0IDAgb2JqCjw8IC9MZW5n\ndGggNzAgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicM7MwUTBQsABiM3MzBXMjS4UU\nQy4jCzOgQC6XBVggh8vQ0BDKMjYxUjA0NAWyTM2NoWIwjUBZS5BBOVD9OVxpAE9UEi8KZW5kc3Ry\nZWFtCmVuZG9iagozNSAwIG9iago8PCAvTGVuZ3RoIDY0IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+\nCnN0cmVhbQp4nDMzNFQwUNA1AhJmhiYK5kaWCimGXEA+iJXLBRPLAbPMTMyALGNTUySWAZA2MjWD\n0xAZoAFwBkR/GgApTxROCmVuZHN0cmVhbQplbmRvYmoKMTQgMCBvYmoKPDwgL1R5cGUgL0ZvbnQg\nL0Jhc2VGb250IC9EZWphVnVTYW5zIC9GaXJzdENoYXIgMCAvTGFzdENoYXIgMjU1Ci9Gb250RGVz\nY3JpcHRvciAxMyAwIFIgL1N1YnR5cGUgL1R5cGUzIC9OYW1lIC9EZWphVnVTYW5zCi9Gb250QkJv\neCBbIC0xMDIxIC00NjMgMTc5NCAxMjMzIF0gL0ZvbnRNYXRyaXggWyAwLjAwMSAwIDAgMC4wMDEg\nMCAwIF0KL0NoYXJQcm9jcyAxNSAwIFIKL0VuY29kaW5nIDw8IC9UeXBlIC9FbmNvZGluZwovRGlm\nZmVyZW5jZXMgWyAzMiAvc3BhY2UgNjcgL0MgODMgL1MgL1QgODYgL1YgOTcgL2EgOTkgL2MgL2Qg\nL2UgL2YgL2cgMTA1IC9pIDEwOCAvbCAxMTAKL24gL28gL3AgMTE0IC9yIC9zIC90IDExOCAvdiBd\nCj4+Ci9XaWR0aHMgMTIgMCBSID4+CmVuZG9iagoxMyAwIG9iago8PCAvVHlwZSAvRm9udERlc2Ny\naXB0b3IgL0ZvbnROYW1lIC9EZWphVnVTYW5zIC9GbGFncyAzMgovRm9udEJCb3ggWyAtMTAyMSAt\nNDYzIDE3OTQgMTIzMyBdIC9Bc2NlbnQgOTI5IC9EZXNjZW50IC0yMzYgL0NhcEhlaWdodCAwCi9Y\nSGVpZ2h0IDAgL0l0YWxpY0FuZ2xlIDAgL1N0ZW1WIDAgL01heFdpZHRoIDEzNDIgPj4KZW5kb2Jq\nCjEyIDAgb2JqClsgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2\nMDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAKNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYw\nMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCAzMTggNDAxIDQ2MCA4MzggNjM2Cjk1MCA3ODAgMjc1\nIDM5MCAzOTAgNTAwIDgzOCAzMTggMzYxIDMxOCAzMzcgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYg\nNjM2IDYzNgo2MzYgNjM2IDMzNyAzMzcgODM4IDgzOCA4MzggNTMxIDEwMDAgNjg0IDY4NiA2OTgg\nNzcwIDYzMiA1NzUgNzc1IDc1MiAyOTUKMjk1IDY1NiA1NTcgODYzIDc0OCA3ODcgNjAzIDc4NyA2\nOTUgNjM1IDYxMSA3MzIgNjg0IDk4OSA2ODUgNjExIDY4NSAzOTAgMzM3CjM5MCA4MzggNTAwIDUw\nMCA2MTMgNjM1IDU1MCA2MzUgNjE1IDM1MiA2MzUgNjM0IDI3OCAyNzggNTc5IDI3OCA5NzQgNjM0\nIDYxMgo2MzUgNjM1IDQxMSA1MjEgMzkyIDYzNCA1OTIgODE4IDU5MiA1OTIgNTI1IDYzNiAzMzcg\nNjM2IDgzOCA2MDAgNjM2IDYwMCAzMTgKMzUyIDUxOCAxMDAwIDUwMCA1MDAgNTAwIDEzNDIgNjM1\nIDQwMCAxMDcwIDYwMCA2ODUgNjAwIDYwMCAzMTggMzE4IDUxOCA1MTgKNTkwIDUwMCAxMDAwIDUw\nMCAxMDAwIDUyMSA0MDAgMTAyMyA2MDAgNTI1IDYxMSAzMTggNDAxIDYzNiA2MzYgNjM2IDYzNiAz\nMzcKNTAwIDUwMCAxMDAwIDQ3MSA2MTIgODM4IDM2MSAxMDAwIDUwMCA1MDAgODM4IDQwMSA0MDEg\nNTAwIDYzNiA2MzYgMzE4IDUwMAo0MDEgNDcxIDYxMiA5NjkgOTY5IDk2OSA1MzEgNjg0IDY4NCA2\nODQgNjg0IDY4NCA2ODQgOTc0IDY5OCA2MzIgNjMyIDYzMiA2MzIKMjk1IDI5NSAyOTUgMjk1IDc3\nNSA3NDggNzg3IDc4NyA3ODcgNzg3IDc4NyA4MzggNzg3IDczMiA3MzIgNzMyIDczMiA2MTEgNjA1\nCjYzMCA2MTMgNjEzIDYxMyA2MTMgNjEzIDYxMyA5ODIgNTUwIDYxNSA2MTUgNjE1IDYxNSAyNzgg\nMjc4IDI3OCAyNzggNjEyIDYzNAo2MTIgNjEyIDYxMiA2MTIgNjEyIDgzOCA2MTIgNjM0IDYzNCA2\nMzQgNjM0IDU5MiA2MzUgNTkyIF0KZW5kb2JqCjE1IDAgb2JqCjw8IC9zcGFjZSAxNiAwIFIgL2Eg\nMTcgMCBSIC9jIDE4IDAgUiAvZCAxOSAwIFIgL2UgMjAgMCBSIC9mIDIxIDAgUgovZyAyMiAwIFIg\nL0MgMjMgMCBSIC9pIDI0IDAgUiAvbCAyNSAwIFIgL24gMjYgMCBSIC9vIDI3IDAgUiAvcCAyOCAw\nIFIKL3IgMjkgMCBSIC9zIDMwIDAgUiAvdCAzMSAwIFIgL1MgMzIgMCBSIC92IDMzIDAgUiAvViAz\nNCAwIFIgL1QgMzUgMCBSID4+CmVuZG9iagozIDAgb2JqCjw8IC9GMSAxNCAwIFIgPj4KZW5kb2Jq\nCjQgMCBvYmoKPDwgL0ExIDw8IC9UeXBlIC9FeHRHU3RhdGUgL0NBIDAgL2NhIDEgPj4KL0EyIDw8\nIC9UeXBlIC9FeHRHU3RhdGUgL0NBIDEgL2NhIDEgPj4gPj4KZW5kb2JqCjM2IDAgb2JqCjw8IC9U\neXBlIC9QYXR0ZXJuIC9QYXR0ZXJuVHlwZSAxIC9QYWludFR5cGUgMSAvVGlsaW5nVHlwZSAxCi9C\nQm94IFsgMCAwIDcyIDcyIF0gL1hTdGVwIDcyIC9ZU3RlcCA3MgovUmVzb3VyY2VzIDw8IC9Qcm9j\nc2V0cyBbIC9QREYgL1RleHQgL0ltYWdlQiAvSW1hZ2VDIC9JbWFnZUkgXSA+PgovTWF0cml4IFsg\nMSAwIDAgMSAwIDQ3NS41MzIwNDM5NTA5IF0gL0xlbmd0aCAxNTIgL0ZpbHRlciAvRmxhdGVEZWNv\nZGUgPj4Kc3RyZWFtCnicJY8xDsMwDAN3vYIfEOA4iuKsXbrnD22XeMnS75dUIcKAKetENzTW+bQF\nqvtT971L9wtv+l8zXxPUNB5LG7joNFDTotPpcnqAojNwpIxlgJq2BY5WBt92GtkwQkZC0EzsYmrz\ntP/uyxKuJjspGge9hjmZohHthSd7E43LvQJwe4jHfF4ZFTDEZHyvf+gTq7D2sB8lszEcCmVuZHN0\ncmVhbQplbmRvYmoKMzcgMCBvYmoKPDwgL1R5cGUgL1BhdHRlcm4gL1BhdHRlcm5UeXBlIDEgL1Bh\naW50VHlwZSAxIC9UaWxpbmdUeXBlIDEKL0JCb3ggWyAwIDAgNzIgNzIgXSAvWFN0ZXAgNzIgL1lT\ndGVwIDcyCi9SZXNvdXJjZXMgPDwgL1Byb2NzZXRzIFsgL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFn\nZUMgL0ltYWdlSSBdID4+Ci9NYXRyaXggWyAxIDAgMCAxIDAgNDc1LjUzMjA0Mzk1MDkgXSAvTGVu\nZ3RoIDE2MiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeJx1jzEOwzAMA3e9gh9wITuK\n4qxdsvcPbZd4ydLvl3TnwoQBU9aJcjjP4zC/rV739K3Hgv+P6z0btiZdT7ys4mNWlgQ1jFf1jpOO\ngxoWjU6T0wIUnY49ZdQOatga2H0a/NtopKOHjISgmdjE1ORhv9mnJYqKrKRobCyzmZ0pGtFl4sle\nRePwMgNweojHfGVmVMAQk/HL3ENLLMLa3b5HkDfECmVuZHN0cmVhbQplbmRvYmoKNSAwIG9iago8\nPCAvSDEgMzYgMCBSIC9IMiAzNyAwIFIgPj4KZW5kb2JqCjYgMCBvYmoKPDwgPj4KZW5kb2JqCjcg\nMCBvYmoKPDwgPj4KZW5kb2JqCjIgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzIC9LaWRzIFsgMTAgMCBS\nIF0gL0NvdW50IDEgPj4KZW5kb2JqCjM4IDAgb2JqCjw8IC9DcmVhdG9yIChtYXRwbG90bGliIDIu\nMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcpCi9Qcm9kdWNlciAobWF0cGxvdGxpYiBwZGYgYmFj\na2VuZCkgL0NyZWF0aW9uRGF0ZSAoRDoyMDE3MDYwMzE2MTc1MiswMicwMCcpCj4+CmVuZG9iagp4\ncmVmCjAgMzkKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDE2IDAwMDAwIG4gCjAwMDAwMDk2\nNTIgMDAwMDAgbiAKMDAwMDAwODU3NiAwMDAwMCBuIAowMDAwMDA4NjA4IDAwMDAwIG4gCjAwMDAw\nMDk1NjcgMDAwMDAgbiAKMDAwMDAwOTYxMCAwMDAwMCBuIAowMDAwMDA5NjMxIDAwMDAwIG4gCjAw\nMDAwMDAwNjUgMDAwMDAgbiAKMDAwMDAwMDM5OCAwMDAwMCBuIAowMDAwMDAwMjA4IDAwMDAwIG4g\nCjAwMDAwMDE2MTMgMDAwMDAgbiAKMDAwMDAwNzI5NyAwMDAwMCBuIAowMDAwMDA3MDk3IDAwMDAw\nIG4gCjAwMDAwMDY3MDIgMDAwMDAgbiAKMDAwMDAwODM1MCAwMDAwMCBuIAowMDAwMDAxNjM0IDAw\nMDAwIG4gCjAwMDAwMDE3MjMgMDAwMDAgbiAKMDAwMDAwMjEwMCAwMDAwMCBuIAowMDAwMDAyNDAz\nIDAwMDAwIG4gCjAwMDAwMDI3MDMgMDAwMDAgbiAKMDAwMDAwMzAyMSAwMDAwMCBuIAowMDAwMDAz\nMjI3IDAwMDAwIG4gCjAwMDAwMDM2MzggMDAwMDAgbiAKMDAwMDAwMzk0MyAwMDAwMCBuIAowMDAw\nMDA0MDgzIDAwMDAwIG4gCjAwMDAwMDQyMDAgMDAwMDAgbiAKMDAwMDAwNDQzNCAwMDAwMCBuIAow\nMDAwMDA0NzIxIDAwMDAwIG4gCjAwMDAwMDUwMzAgMDAwMDAgbiAKMDAwMDAwNTI2MCAwMDAwMCBu\nIAowMDAwMDA1NjY1IDAwMDAwIG4gCjAwMDAwMDU4NjkgMDAwMDAgbiAKMDAwMDAwNjI4MCAwMDAw\nMCBuIAowMDAwMDA2NDI0IDAwMDAwIG4gCjAwMDAwMDY1NjYgMDAwMDAgbiAKMDAwMDAwODcwNyAw\nMDAwMCBuIAowMDAwMDA5MTMyIDAwMDAwIG4gCjAwMDAwMDk3MTIgMDAwMDAgbiAKdHJhaWxlcgo8\nPCAvU2l6ZSAzOSAvUm9vdCAxIDAgUiAvSW5mbyAzOCAwIFIgPj4Kc3RhcnR4cmVmCjk4NjAKJSVF\nT0YK\n", "image/png": "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\nNWHCBM2dO1dr167VmDFjlJ6eLknFXwEkiHhXdzRafWyq4B3l1atXe0pKipuZf/e73/U5c+Z4bm5u\nuXl39/z8fO/QoYObmW/YsKHEvMOHD/uJJ57oycnJvnXr1uLpTz31lEvySy+9tMK+j5bKOfJU+shV\nEU4LpNFqph2v25miI1eS/OWXXy4xb8qUKS7JL7vsshLTi44kdejQoczY3d2XLFnikrxHjx5ljlIV\nre+uu+4qnrZv3z5v2bKlJycn+6pVq0rk77rrruLxVeXI1Q033OCS/Pbbb/eCgoIS8/bt21fitE1O\nC6TREr9xt0AgwZx33nl65pln1LZtWz3zzDO65ppr1KlTJ7Vq1UpDhw4tc6MISUpKStKoUaPk7nry\nySdLzJs3b5527typQYMGlbhr39atWyVJHTt2rNknBCDhHA/bmcsuu0wDBw4sMe3OO+/UKaecoiVL\nlmjTpk1llhk3bpw6d+5cZvrUqVMlSdOnTy9zJCgrK0vdunXTs88+Wzxt3rx5+vLLL3XjjTfqwgsv\nLJHPzs6u8k0rduzYoeeff17t27fXQw89pAYNSv5b1qRJE26AAdQxFFdAArruuuu0efNmLV68WD/7\n2c80cOBAFRYWau7cuRo8eLBGjhwpdy+xzG233aYGDRooJydHBQUFxdOnT58uKXJKDwAUqevbmd69\ne5eZlpSUpJ49e0qS/vrXv5aZ371795h9rVixQikpKZo9e7ays7PLtK+//lo7d+7Url27JEmrV68u\ndwzNmzdXt27dqvQcVq1apcLCQvXq1UsnnHBClZYBkNi45gpIUCkpKbryyit15ZVXSorcOnnOnDka\nNWqUnnrqKQ0dOlRXX311cT4jI0NXXHGFFi9erAULFmjQoEHKzc3V66+/royMDPXr169E/+3bt5ck\nbdmypfaeFICEUpe3M23bto05vejI2d69e8udV9quXbuUn5+viRMnVrjO/fv3q1WrVsV9VzaGyuzZ\ns0dS5DbtAI4PHLkC6oikpCRdd911uvvuuyVJS5YsKZP5/ve/L+lf7yI/+eSTcnfdeuutZU43KXp3\n97333ov5TwiA+qcubWe2b98ec/q2bdskKebpdOV9YHnz5s3VokWLSq+lyMjIKNF3ZWOoTNEpiLzJ\nBRw/KK6AOqZp06aSVOZ0HUkaPHiw2rVrpwULFujzzz9XTk5O8XUSpXXu3Fl9+/bVoUOHNHny5ErX\n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\nMQDHFTNz/q7iz8zk7hbvcQAAgPqD0wIBAAAAIAQUVwAAAAAQAoorAAAAAAgBxRUAAAAAhIDiCqiH\nZs6cKTPTzJkz4zqO9957T1dccYVat24tM1O3bt0kSVlZWTIz5ebmxnV8AAAAR4NbsQOIi6+++koD\nBgzQoUOHdPPNN6t169Zq1678O6fn5uaqc+fOGjlyZNyLQgAAgFgorgDExV/+8hft2LFDv/zlL/XT\nn/60xLxf//rXuvfee3XSSSfFaXQAAABHj+IKQFx88cUXkqQOHTqUmde+fXu1b9++tocEAABwTLjm\nCqhlL730ki6//HK1b99eDRs2VIcOHdS7d289/vjjZbJffvml7rvvPn3zm99U48aN1bx5c3Xt2lX3\n3nuv8vLyinPvv/++xowZo65du6ply5ZKS0vTaaedpnvuuUe7d+8+qvH94x//0J133qkuXbqoYcOG\natWqlQYPHqxVq1aVyWZnZ8vMtGzZMs2aNUsXXXSRmjRpok6dOpXbf25ursxMI0eOlCR973vfk5mV\nuAas9DVX2dnZ6ty5syTpD3/4Q3E+Ea4bAwAAKMKRK6AW/f73v9e///u/q127dho0aJBat26tHTt2\n6IMPPlBOTo5+8IMfFGc3btyoPn36aNOmTbrgggt0xx13qLCwUJ9++qkeffRR3X777TrhhBMkSdOn\nT9eLL76o3r17q2/fviosLNT777+vRx55RAsXLtS7776rpk2bVjq+1atX68orr9SXX36pfv36adiw\nYfrnP/+puXPnqmfPnnrxxRfVv3//Mss9/PDDeu211zRo0CD16dNHe/fuLXcd6enpmjBhgtasWaN5\n8+ZpyJAhxTeyKPpaWmZmpvbs2aPHHntMXbt21dVXX108r7xlAAAAap2702i0EFvkzyq2888/31NT\nU3379u1l5u3cubPE4x49ergk/9WvfhUze/DgweLHubm5np+fXyY3Y8YMl+STJk0qMT0nJ8cleU5O\nTvG0I0eO+CmnnOINGzb0ZcuWlchv2bLFO3To4O3atfNDhw4VT58wYYJL8saNG/vq1avLfd6xxBpD\nkZEjR7ok37hxY/G0jRs3uiQfOXJklfoPXoe4/z7QaDQajUarP43TAoFalpycrJSUlDLTW7duXfz9\n+++/rxUrVqhbt276yU9+EjOblpZW/DgjI0NJSUllcqNGjVKzZs20ePHiSsf1yiuvaP369frhD3+o\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "mglearn.plots.plot_proper_processing()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### [데이터 전처리 과정에 검증데이터 정보 누설에 따른 문제를 보여주는 예시]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 아래에 임의로 생성한 데이터 X와 y는 전혀 연관관계가 없으므로 회귀 문제로 값을 예측하면 예측이 잘 안되는 것이 올바름" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": true }, "outputs": [], "source": [ "rnd = np.random.RandomState(seed=0)\n", "X = rnd.normal(size=(100, 10000))\n", "y = rnd.normal(size=(100,))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Pipeline 사용없이 전체 데이터를 미리 전처리(변환)한 이후 그러한 데이터로 교차 검증을 하는 경우 예제 (잘못된 예제)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "X_selected.shape: (100, 500)\n", "Cross-validation accuracy (cv only on ridge): 0.91\n" ] } ], "source": [ "import warnings\n", "warnings.filterwarnings('ignore')\n", "from sklearn.feature_selection import SelectPercentile, f_regression\n", "from sklearn.model_selection import cross_val_score\n", "from sklearn.linear_model import Ridge\n", "\n", "select = SelectPercentile(score_func=f_regression, percentile=5).fit(X, y)\n", "\n", "X_selected = select.transform(X)\n", "\n", "print(\"X_selected.shape: {}\".format(X_selected.shape))\n", "\n", "print(\"Cross-validation accuracy (cv only on ridge): {:.2f}\".format(\n", " np.mean(cross_val_score(Ridge(), X_selected, y, cv=5))\n", " )\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Pipeline을 사용하여 전체 데이터의 전처리를 데이터 교차 검증과 내에서 수행하도록 하는 경우 예제 (올바른 예제)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Cross-validation accuracy (pipeline): -0.25\n" ] } ], "source": [ "select = SelectPercentile(score_func=f_regression, percentile=5)\n", "model = Ridge()\n", "\n", "pipe = Pipeline([(\"select\", select), (\"ridge\", model)])\n", "print(\"Cross-validation accuracy (pipeline): {:.2f}\".format(\n", " np.mean(cross_val_score(pipe, X, y, cv=5))\n", " )\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The General Pipeline Interface\n", "- Pipeline은 전처리나 분류에 국한하지 않고 어떠한 estimator와도 연결할 수 있음\n", "- 예를 들어, 특성 추출, 특성 선택, 스케일 변경, 분류(또는 회귀, 군집)라는 총 4단계를 포함하는 파이프라인을 구성할 수 있음.\n", "- Pipeline에 들어가는 estimator는 마지막 단계를 제외하고는 모두 fit과 transform을 지니고 있어야 함.\n", " - 즉, 다음 단계를 위한 새로운 데이터 표현을 만들 수 있어야 함.\n", "- Pipeline에 들어가는 마지막 estimator는 fit만 호출해도 됨." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def fit(self, X, y):\n", " X_transformed = X\n", " for name, estimator in self.steps[:-1]:\n", " # iterate over all but the final step\n", " # fit and transform the data\n", " X_transformed = estimator.fit_transform(X_transformed, y)\n", " # fit the last step\n", " self.steps[-1][1].fit(X_transformed, y)\n", " return self" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def predict(self, X):\n", " X_transformed = X\n", " for step in self.steps[:-1]:\n", " # iterate over all but the final step\n", " # transform the data\n", " X_transformed = step[1].transform(X_transformed)\n", " # predict using the last step\n", " return self.steps[-1][1].predict(X_transformed)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![pipeline_illustration](images/pipeline.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Convenient Pipeline creation with ``make_pipeline``" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn.pipeline import make_pipeline\n", "\n", "# standard syntax\n", "pipe_long = Pipeline([(\"scaler\", MinMaxScaler()), (\"svm\", SVC(C=100))])\n", "\n", "# abbreviated syntax\n", "pipe_short = make_pipeline(MinMaxScaler(), SVC(C=100))" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Pipeline steps:\n", "[('minmaxscaler', MinMaxScaler(copy=True, feature_range=(0, 1))), ('svc', SVC(C=100, cache_size=200, class_weight=None, coef0=0.0,\n", " decision_function_shape=None, degree=3, gamma='auto', kernel='rbf',\n", " max_iter=-1, probability=False, random_state=None, shrinking=True,\n", " tol=0.001, verbose=False))]\n" ] } ], "source": [ "print(\"Pipeline steps:\\n{}\".format(pipe_short.steps))" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Pipeline steps:\n", "[('standardscaler-1', StandardScaler(copy=True, with_mean=True, with_std=True)), ('pca', PCA(copy=True, iterated_power='auto', n_components=2, random_state=None,\n", " svd_solver='auto', tol=0.0, whiten=False)), ('standardscaler-2', StandardScaler(copy=True, with_mean=True, with_std=True))]\n" ] } ], "source": [ "from sklearn.preprocessing import StandardScaler\n", "from sklearn.decomposition import PCA\n", "\n", "pipe = make_pipeline(StandardScaler(), PCA(n_components=2), StandardScaler())\n", "print(\"Pipeline steps:\\n{}\".format(pipe.steps))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Accessing step attributes" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "cancer data shape: (569, 30)\n", "components.shape: (2, 30)\n" ] } ], "source": [ "# fit the pipeline defined before to the cancer dataset\n", "print(\"cancer data shape: {}\".format(cancer.data.shape))\n", "pipe.fit(cancer.data)\n", "\n", "# extract the first two principal components from the \"pca\" step\n", "components = pipe.named_steps[\"pca\"].components_\n", "\n", "print(\"components.shape: {}\".format(components.shape))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Accessing Attributes in a Pipeline inside GridSearchCV" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn.linear_model import LogisticRegression\n", "\n", "pipe = make_pipeline(StandardScaler(), LogisticRegression())" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": true }, "outputs": [], "source": [ "param_grid = {\n", " 'logisticregression__C': [0.01, 0.1, 1, 10, 100]\n", "}" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "GridSearchCV(cv=5, error_score='raise',\n", " estimator=Pipeline(steps=[('standardscaler', StandardScaler(copy=True, with_mean=True, with_std=True)), ('logisticregression', LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False))]),\n", " fit_params={}, iid=True, n_jobs=1,\n", " param_grid={'logisticregression__C': [0.01, 0.1, 1, 10, 100]},\n", " pre_dispatch='2*n_jobs', refit=True, return_train_score=True,\n", " scoring=None, verbose=0)" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, random_state=4)\n", "\n", "grid = GridSearchCV(pipe, param_grid, cv=5)\n", "\n", "grid.fit(X_train, y_train)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Best estimator:\n", "Pipeline(steps=[('standardscaler', StandardScaler(copy=True, with_mean=True, with_std=True)), ('logisticregression', LogisticRegression(C=0.1, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False))])\n" ] } ], "source": [ "print(\"Best estimator:\\n{}\".format(grid.best_estimator_))" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Logistic regression step:\n", "LogisticRegression(C=0.1, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False)\n" ] } ], "source": [ "print(\"Logistic regression step:\\n{}\".format(\n", " grid.best_estimator_.named_steps[\"logisticregression\"]))" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Logistic regression coefficients:\n", "[[-0.389 -0.375 -0.376 -0.396 -0.115 0.017 -0.355 -0.39 -0.058 0.209\n", " -0.495 -0.004 -0.371 -0.383 -0.045 0.198 0.004 -0.049 0.21 0.224\n", " -0.547 -0.525 -0.499 -0.515 -0.393 -0.123 -0.388 -0.417 -0.325 -0.139]]\n" ] } ], "source": [ "print(\"Logistic regression coefficients:\\n{}\".format(\n", " grid.best_estimator_.named_steps[\"logisticregression\"].coef_\n", " )\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Grid-searching preprocessing steps and model parameters" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn.datasets import load_boston\n", "from sklearn.preprocessing import PolynomialFeatures\n", "\n", "boston = load_boston()\n", "X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=0)\n", "\n", "pipe = make_pipeline(\n", " StandardScaler(),\n", " PolynomialFeatures(),\n", " Ridge()\n", ")" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": true, "scrolled": true }, "outputs": [], "source": [ "param_grid = {\n", " 'polynomialfeatures__degree': [1, 2, 3],\n", " 'ridge__alpha': [0.001, 0.01, 0.1, 1, 10, 100]\n", "}" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [], "source": [ "grid = GridSearchCV(pipe, param_grid=param_grid, cv=5, n_jobs=-1)\n", "grid.fit(X_train, y_train)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" }, { "data": { "application/pdf": "JVBERi0xLjQKJazcIKu6CjEgMCBvYmoKPDwgL1R5cGUgL0NhdGFsb2cgL1BhZ2VzIDIgMCBSID4+\nCmVuZG9iago4IDAgb2JqCjw8IC9Gb250IDMgMCBSIC9YT2JqZWN0IDcgMCBSIC9FeHRHU3RhdGUg\nNCAwIFIgL1BhdHRlcm4gNSAwIFIKL1NoYWRpbmcgNiAwIFIgL1Byb2NTZXQgWyAvUERGIC9UZXh0\nIC9JbWFnZUIgL0ltYWdlQyAvSW1hZ2VJIF0gPj4KZW5kb2JqCjEwIDAgb2JqCjw8IC9UeXBlIC9Q\nYWdlIC9QYXJlbnQgMiAwIFIgL1Jlc291cmNlcyA4IDAgUgovTWVkaWFCb3ggWyAwIDAgMzgwLjAx\nMjUgMjE1LjkyNSBdIC9Db250ZW50cyA5IDAgUgovR3JvdXAgPDwgL1R5cGUgL0dyb3VwIC9TIC9U\ncmFuc3BhcmVuY3kgL0NTIC9EZXZpY2VSR0IgPj4gL0Fubm90cyBbIF0gPj4KZW5kb2JqCjkgMCBv\nYmoKPDwgL0xlbmd0aCAxMSAwIFIgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCniclVhN\nb+Q2DL3rV+jYHlYRqe/jBm0D9LbtAD0URRBsJrMJxtndpG3Qf19KluUPyR7nkNh+EvmeKZKSB/gT\nu/oI/PTKJX+ivzf+J/+Lrvcc+A2/+un47+Pn42831/zzK5OEd0x5KSSgoYfz+IBgRKDrmWaN918Y\ne2bknebekMMTU1qYOF054elC3mwQaoKcRwSlEdhD2WpEyPED+84X7hQ9ew7WCc1fjvwP/syvPmJ6\nOWG9D1rTjbdGa0834NGR0cuJA3sqrx2Vbs5mjZfIQFDCJnlB9q9QAeNbzn3kN1rO62pPoK2ANlJ8\nVWy98+XEruEMJYjQRoq3mrD3v5zZtbwZJ1wbKd5qxux/MbNreFOgFmtRkNF/xZj806pT7kmMq25o\n2eMNgrUYU2RrkFUcXUvHkNc1MmZFpTUrcxqUj2nondI6xHzUwVjopW2MsmVyjtlKc4Se5UuNjFqX\nKT4IU5JKJVFDABupjZUYsrD1Ubbk6BoySqY1oPViG6RZVE4lcqsxFjMoJ63O0tZHWUXStZSUNG1A\nG+Wa1XlrJSR+H7yNiyeDCUb16jZGWcXSNaUMSd6ANqo9qwtBYWp7QVowLmWUCsr26jZGWcXStaSU\nRG9AG71iUGeMSuwgrYns4AF91rY2xiqGriljKMoGtNFlsjK0TsqYTPTfu3ijMGgwvbaNUVaVZdfY\n9oZUr5GJ2qq851vL6L/2VrK1AW21i8X+MlI0HJaca0CblZ9DDFQSGJdYgwxAV2OswpyZ64OsZuma\nWoaka0CbtZ/lacDQV65UUkcJyji0uSFujLKap2upKbnXgDbLf0jRYLULqQNC3CNIFGrE3Hg2RlnN\n0zXVNA5wjaKqNSeBn/j3cmijgyPEUykd6t7mBzQ6SlqM0ZxsuQXQVFbRH7tm2RPwN3Z94Fe/AAfJ\nDw9MewEclcCk6nDPfohFCT/ywxP/+cDKqZGIGXUQ2uqnTCOygwqkE9IF652pGFcIne4P1SNhQfYQ\nWiukCarma9MhBuHnx6qC7KBDtHQ2wjR/xrfC5o2wc7aC7GFzQaBRNZlssikNiywZkR1sSkE6U1Wx\nBFn45rF3sQf1wQ/UfNJNNHh5vD8db2/vzt++3K0o7cvBGuFyZfVLnoHtqAAdrJI4S32pX4v1JSg7\nBJmZGdeA7CQDoCYzsuE2m3Mp4BO2jOxlc9QxRjbVXABJHj5Q26K2IlyKvqFNIJffoUvfsNH629fz\nf89fu8e788Px7u9/Xo6vt7f3x9PL8Ti4Rf5r/0086z7zL+LVL8Gx9bHfq3N+12qRcd7lj+PJrMF0\nzZtM+vsOCrP+eZqHzIDAHCBqocE68G7oGA7baT7pabttaKJ/pw1So7XvtaFeqd9po5TciAE0bSZh\ni/uBm9voi3HbbzQJ3G6jaeQaRv5i6Gojfzl2DaMSPEi52P8MNN+LFZ30jE0VTrk9Mf9AZ3faGlZC\nifGbKHeGhR0dKXAtC6n5uIaJEnIlKNNILqzozYuRzD9zVfU1i2rlwKqLAZpFuHJgwuDgE/sfMtcB\n5AplbmRzdHJlYW0KZW5kb2JqCjExIDAgb2JqCjExNDYKZW5kb2JqCjE2IDAgb2JqCjw8IC9MZW5n\ndGggNTIgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicMzYzVDBQMLFUMDI2UTA2NAJi\nE4UUQy6gCIiVywUTywGzQKpyuKDKc2CqcrjSAOkJDcAKZW5kc3RyZWFtCmVuZG9iagoxNyAwIG9i\nago8PCAvTGVuZ3RoIDQ5IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nDM2tFAwUDA0\nMAeSRoZAlpGJQoohF0gAxMzlggnmgFkGQBqiOAeuJocrDQDG6A0mCmVuZHN0cmVhbQplbmRvYmoK\nMTggMCBvYmoKPDwgL0xlbmd0aCAyMTAgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnic\nNVDLDUMxCLtnChaoFAKBZJ5WvXX/a23QO2ER/0JYyJQIeanJzinpSz46TA+2Lr+xIgutdSXsypog\nnivvoZmysdHY4mBwGiZegBY3YOhpjRo1dOGCpi6VQoHFJfCZfHV76L5PGXhqGXJ2BBFDyWAJaroW\nTVi0PJ+QTgHi/37D7i3koZLzyp4b+Ruc7fA7s27hJ2p2ItFyFTLUszTHGAgTRR48eUWmcOKz1nfV\nNBLUZgtOlgGuTj+MDgBgIl5ZgOyuRDlL0o6ln2+8x/cPQABTtAplbmRzdHJlYW0KZW5kb2JqCjE5\nIDAgb2JqCjw8IC9MZW5ndGggODAgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicRYy7\nDcAwCER7pmAEfiZmnyiVs38bIErccE+6e7g6EjJT3mGGhwSeDCyGU/EGmaNgNbhGUo2d7KOwbl91\ngeZ6U6v19wcqT3Z2cT3Nyxn0CmVuZHN0cmVhbQplbmRvYmoKMjAgMCBvYmoKPDwgL0xlbmd0aCAy\nNDggL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicLVE5kgNBCMvnFXpCc9PvscuR9//p\nCsoBg4ZDIDotcVDGTxCWK97yyFW04e+ZGMF3waHfynUbFjkQFUjSGFRNqF28Hr0HdhxmAvOkNSyD\nGesDP2MKN3pxeEzG2e11GTUEe9drT2ZQMisXccnEBVN12MiZw0+mjAvtXM8NyLkR1mUYpJuVxoyE\nI00hUkih6iapM0GQBKOrUaONHMV+6csjnWFVI2oM+1xL29dzE84aNDsWqzw5pUdXnMvJxQsrB/28\nzcBFVBqrPBAScL/bQ/2c7OQ33tK5s8X0+F5zsrwwFVjx5rUbkE21+Dcv4vg94+v5/AOopVsWCmVu\nZHN0cmVhbQplbmRvYmoKMjEgMCBvYmoKPDwgL0xlbmd0aCAzMzggL0ZpbHRlciAvRmxhdGVEZWNv\nZGUgPj4Kc3RyZWFtCnicNVI5rt1ADOt9Cl0ggHbNnOcFqX7u34aUXwpDtFaKmo4WlWn5ZSFVLZMu\n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\nOKbnyvqq7vy4LMq+I4cyBWzWOQ42cOW2YYwTo81Wd4f7RJCnk6mj4naQbPiDk8a+ytUVuE42++ol\nGAeCfqEJTPJNoHWGQOPmKXpyCfbxcbvzQLC3vAmkbAjkyBCMDkG7Tq5/cev83v86w53n2gxXjnfx\nO0xru+MvMcmKuYBF7hTU8z0XresMHe/JmWNy031D51ywy91Bps/8H+v3D1CKZogKZW5kc3RyZWFt\nCmVuZG9iagozOCAwIG9iago8PCAvTGVuZ3RoIDE2MSAvRmlsdGVyIC9GbGF0ZURlY29kZSA+Pgpz\ndHJlYW0KeJxFkEsSwyAMQ/ecQkfwRwZ8nnS6Su+/rSFNs4CnsUAGdycEqbUFE9EFL21Lugs+WwnO\nxnjoNm41EuQEdYBWpONolFJ9ucVplXTxaDZzKwutEx1mDnqUoxmgEDoV3u2i5HKm7s75R3D1X/VH\nse6czcTAZOUOhGb1Ke58mx1RXd1kf9JjbtZrfxX2qrC0rKXlhNvOXTOgBO6pHO39BalzOoQKZW5k\nc3RyZWFtCmVuZG9iagozOSAwIG9iago8PCAvTGVuZ3RoIDIxNCAvRmlsdGVyIC9GbGF0ZURlY29k\nZSA+PgpzdHJlYW0KeJw9ULsRQzEI6z0FC+TOfO03z8uly/5tJJykQjZCEpSaTMmUhzrKkqwpTx0+\nS2KHvIflbmQ2JSpFL5OwJffQCvF9ieYU993VlrNDNJdoOX4LMyqqGx3TSzaacCoTuqDcwzP6DW10\nA1aHHrFbINCkYNe2IHLHDxgMwZkTiyIMSk0G/61y91Lc7z0cb6KIlHTwrvnl9MvPLbxOPY5Eur35\nimtxpjoKRHBGavKKdGHFsshDpNUENT0Da7UArt56+TdoR3QZgOwTieM0pRxD/9a4x+sDh4pS9Apl\nbmRzdHJlYW0KZW5kb2JqCjQwIDAgb2JqCjw8IC9MZW5ndGggMjM2IC9GaWx0ZXIgL0ZsYXRlRGVj\nb2RlID4+CnN0cmVhbQp4nE1QS25EIQzbc4pc4EkkIQHOQ9VV5/7bscNU7SqGGH9ID+myVR7rU2J1\niezypU2XyjJ5FajlT9v/UQwCbv/QyEG0t4ydYuYS1sXCJDzlNCMbJ9csH487TxtmhcbEjeOdLhlg\nnxYBNVuVzYE5bTo3QLqQGreqs95kUAwi6kLNB5MunKfRl4g5nqhgSncmtZAbXD7VoQNxWr0KuWOL\nk2/EHFmhwGHQTHHWXwHWqMmyWcggSYYhzn2je5QKjajKeSsVwg+ToRH1htWgBpW5haKp5ZL8HdoC\nMAW2jHXpDEqBqgDB3yqnfb8BJI1dUwplbmRzdHJlYW0KZW5kb2JqCjQxIDAgb2JqCjw8IC9MZW5n\ndGggMTU3IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nEWQuRFDMQhEc1VBCRKwCOqx\nx9F3/6kX+Uq0bwAth68lU6ofJyKm3Ndo9DB5Dp9NJVYs2Ca2kxpyGxZBSjGYeE4xq6O3oZmH1Ou4\nqKq4dWaV02nLysV/82hXM5M9wjXqJ/BN6PifPLSp6FugrwuUfUC1OJ1JUDF9r2KBo5x2fyKcGOA+\nGUeZKSNxYm4K7PcZAGa+V7jG4wXdATd5CmVuZHN0cmVhbQplbmRvYmoKNDIgMCBvYmoKPDwgL0xl\nbmd0aCAzMzIgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicLVI5jiQxDMv9Cn5gAOvy\n8Z4eTNT7/3RJVQUFqmzLPORyw0QlfiyQ21Fr4tdGZqDC8K+rzIXvSNvIOohryEVcyZbCZ0Qs5DHE\nPMSC79v4GR75rMzJswfGL9n3GVbsqQnLQsaLM7TDKo7DKsixYOsiqnt4U6TDqSTY44v/PsVzF4IW\nviNowC/556sjeL6kRdo9Ztu0Ww+WaUeVFJaD7WnOy+RL6yxXx+P5INneFTtCaleAojB3xnkujjJt\nZURrYWeDpMbF9ubYj6UEXejGZaQ4AvmZKsIDSprMbKIg/sjpIacyEKau6Uont1EVd+rJXLO5vJ1J\nMlv3RYrNFM7rwpn1d5gyq807eZYTpU5F+Bl7tgQNnePq2WuZhUa3OcErJXw2dnpy8r2aWQ/JqUhI\nFdO6Ck6jyBRL2Jb4moqa0tTL8N+X9xl//wEz4nwBCmVuZHN0cmVhbQplbmRvYmoKNDMgMCBvYmoK\nPDwgL0xlbmd0aCAxMzEgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicRY/LDQQhDEPv\nVOES8hk+qYfVntj+r+swmkFC+EEiO/EwCKzz8jbQxfDRosM3/jbVq2OVLB+6elJWD+mQh7zyFVBp\nMFHEhVlMHUNhzpjKyJYytxvhtk2DrGyVVK2DdjwGD7anZasIfqltYeos8QzCVV64xw0/kEutd71V\nvn9CUzCXCmVuZHN0cmVhbQplbmRvYmoKNDQgMCBvYmoKPDwgL0xlbmd0aCAxNzEgL0ZpbHRlciAv\nRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCnicTZBNDkIhEIP3nKIXMKHzA4/zaFzp/bd28PnigvRLIUOn\nwwMdR+JGR4bO6HiwyTEOvAsyJl6N85+M6ySOCeoVbcG6tDvuzSwxJywTI2BrlNybRxT44ZgLQYLs\n8sMXGESka5hvNZ91k35+u9Nd1KV199MjCpzIjlAMG3AF2NM9DtwSzu+aJr9UKRmbOJQPVBeRstkJ\nhailYpdTVWiM4lY974te7fkBwfY7+wplbmRzdHJlYW0KZW5kb2JqCjQ1IDAgb2JqCjw8IC9MZW5n\ndGggMTM4IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4nD2PQQ4DMQgD73mFPxApdkJY\n3rNVT9v/X0ua3V7QCIwxFkJDb6hqDpuCDceLpUuo1vApiolKDsiZYA6lpNIdZ5F6YjgY3B60G87i\nsen6EbuSVn3Q5ka6JWiCR+xTadyWcRPEAzUF6inqXKO8ELmfqVfYNJLdtLKSazim373nqev/01Xe\nX1/fLowKZW5kc3RyZWFtCmVuZG9iagoxNCAwIG9iago8PCAvVHlwZSAvRm9udCAvQmFzZUZvbnQg\nL0RlamFWdVNhbnMgL0ZpcnN0Q2hhciAwIC9MYXN0Q2hhciAyNTUKL0ZvbnREZXNjcmlwdG9yIDEz\nIDAgUiAvU3VidHlwZSAvVHlwZTMgL05hbWUgL0RlamFWdVNhbnMKL0ZvbnRCQm94IFsgLTEwMjEg\nLTQ2MyAxNzk0IDEyMzMgXSAvRm9udE1hdHJpeCBbIDAuMDAxIDAgMCAwLjAwMSAwIDAgXQovQ2hh\nclByb2NzIDE1IDAgUgovRW5jb2RpbmcgPDwgL1R5cGUgL0VuY29kaW5nCi9EaWZmZXJlbmNlcyBb\nIDQ1IC9oeXBoZW4gL3BlcmlvZCA0OCAvemVybyAvb25lIC90d28gL3RocmVlIC9mb3VyIC9maXZl\nIC9zaXggL3NldmVuCi9laWdodCAvbmluZSA5NSAvdW5kZXJzY29yZSA5NyAvYSAxMDAgL2QgL2Ug\nL2YgL2cgL2ggL2kgMTA4IC9sIC9tIC9uIC9vIC9wCjExNCAvciAvcyAvdCAvdSAxMjEgL3kgXQo+\nPgovV2lkdGhzIDEyIDAgUiA+PgplbmRvYmoKMTMgMCBvYmoKPDwgL1R5cGUgL0ZvbnREZXNjcmlw\ndG9yIC9Gb250TmFtZSAvRGVqYVZ1U2FucyAvRmxhZ3MgMzIKL0ZvbnRCQm94IFsgLTEwMjEgLTQ2\nMyAxNzk0IDEyMzMgXSAvQXNjZW50IDkyOSAvRGVzY2VudCAtMjM2IC9DYXBIZWlnaHQgMAovWEhl\naWdodCAwIC9JdGFsaWNBbmdsZSAwIC9TdGVtViAwIC9NYXhXaWR0aCAxMzQyID4+CmVuZG9iagox\nMiAwIG9iagpbIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAw\nIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwCjYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAg\nNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgMzE4IDQwMSA0NjAgODM4IDYzNgo5NTAgNzgwIDI3NSAz\nOTAgMzkwIDUwMCA4MzggMzE4IDM2MSAzMTggMzM3IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYz\nNiA2MzYKNjM2IDYzNiAzMzcgMzM3IDgzOCA4MzggODM4IDUzMSAxMDAwIDY4NCA2ODYgNjk4IDc3\nMCA2MzIgNTc1IDc3NSA3NTIgMjk1CjI5NSA2NTYgNTU3IDg2MyA3NDggNzg3IDYwMyA3ODcgNjk1\nIDYzNSA2MTEgNzMyIDY4NCA5ODkgNjg1IDYxMSA2ODUgMzkwIDMzNwozOTAgODM4IDUwMCA1MDAg\nNjEzIDYzNSA1NTAgNjM1IDYxNSAzNTIgNjM1IDYzNCAyNzggMjc4IDU3OSAyNzggOTc0IDYzNCA2\nMTIKNjM1IDYzNSA0MTEgNTIxIDM5MiA2MzQgNTkyIDgxOCA1OTIgNTkyIDUyNSA2MzYgMzM3IDYz\nNiA4MzggNjAwIDYzNiA2MDAgMzE4CjM1MiA1MTggMTAwMCA1MDAgNTAwIDUwMCAxMzQyIDYzNSA0\nMDAgMTA3MCA2MDAgNjg1IDYwMCA2MDAgMzE4IDMxOCA1MTggNTE4CjU5MCA1MDAgMTAwMCA1MDAg\nMTAwMCA1MjEgNDAwIDEwMjMgNjAwIDUyNSA2MTEgMzE4IDQwMSA2MzYgNjM2IDYzNiA2MzYgMzM3\nCjUwMCA1MDAgMTAwMCA0NzEgNjEyIDgzOCAzNjEgMTAwMCA1MDAgNTAwIDgzOCA0MDEgNDAxIDUw\nMCA2MzYgNjM2IDMxOCA1MDAKNDAxIDQ3MSA2MTIgOTY5IDk2OSA5NjkgNTMxIDY4NCA2ODQgNjg0\nIDY4NCA2ODQgNjg0IDk3NCA2OTggNjMyIDYzMiA2MzIgNjMyCjI5NSAyOTUgMjk1IDI5NSA3NzUg\nNzQ4IDc4NyA3ODcgNzg3IDc4NyA3ODcgODM4IDc4NyA3MzIgNzMyIDczMiA3MzIgNjExIDYwNQo2\nMzAgNjEzIDYxMyA2MTMgNjEzIDYxMyA2MTMgOTgyIDU1MCA2MTUgNjE1IDYxNSA2MTUgMjc4IDI3\nOCAyNzggMjc4IDYxMiA2MzQKNjEyIDYxMiA2MTIgNjEyIDYxMiA4MzggNjEyIDYzNCA2MzQgNjM0\nIDYzNCA1OTIgNjM1IDU5MiBdCmVuZG9iagoxNSAwIG9iago8PCAvaHlwaGVuIDE2IDAgUiAvcGVy\naW9kIDE3IDAgUiAvemVybyAxOCAwIFIgL29uZSAxOSAwIFIgL3R3byAyMCAwIFIKL3RocmVlIDIx\nIDAgUiAvZm91ciAyMiAwIFIgL2ZpdmUgMjMgMCBSIC9zaXggMjQgMCBSIC9zZXZlbiAyNSAwIFIK\nL2VpZ2h0IDI2IDAgUiAvbmluZSAyNyAwIFIgL3VuZGVyc2NvcmUgMjggMCBSIC9hIDI5IDAgUiAv\nZCAzMCAwIFIgL2UgMzEgMCBSCi9mIDMyIDAgUiAvZyAzMyAwIFIgL2ggMzQgMCBSIC9pIDM1IDAg\nUiAvbCAzNiAwIFIgL20gMzcgMCBSIC9uIDM4IDAgUgovbyAzOSAwIFIgL3AgNDAgMCBSIC9yIDQx\nIDAgUiAvcyA0MiAwIFIgL3QgNDMgMCBSIC91IDQ0IDAgUiAveSA0NSAwIFIgPj4KZW5kb2JqCjMg\nMCBvYmoKPDwgL0YxIDE0IDAgUiA+PgplbmRvYmoKNCAwIG9iago8PCAvQTEgPDwgL1R5cGUgL0V4\ndEdTdGF0ZSAvQ0EgMCAvY2EgMSA+PgovQTIgPDwgL1R5cGUgL0V4dEdTdGF0ZSAvQ0EgMSAvY2Eg\nMSA+PiA+PgplbmRvYmoKNSAwIG9iago8PCA+PgplbmRvYmoKNiAwIG9iago8PCA+PgplbmRvYmoK\nNyAwIG9iago8PCA+PgplbmRvYmoKMiAwIG9iago8PCAvVHlwZSAvUGFnZXMgL0tpZHMgWyAxMCAw\nIFIgXSAvQ291bnQgMSA+PgplbmRvYmoKNDYgMCBvYmoKPDwgL0NyZWF0b3IgKG1hdHBsb3RsaWIg\nMi4wLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZykKL1Byb2R1Y2VyIChtYXRwbG90bGliIHBkZiBi\nYWNrZW5kKSAvQ3JlYXRpb25EYXRlIChEOjIwMTcwNjAzMTYxNzU1KzAyJzAwJykKPj4KZW5kb2Jq\nCnhyZWYKMCA0NwowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMTYgMDAwMDAgbiAKMDAwMDAx\nMTg3NyAwMDAwMCBuIAowMDAwMDExNjgzIDAwMDAwIG4gCjAwMDAwMTE3MTUgMDAwMDAgbiAKMDAw\nMDAxMTgxNCAwMDAwMCBuIAowMDAwMDExODM1IDAwMDAwIG4gCjAwMDAwMTE4NTYgMDAwMDAgbiAK\nMDAwMDAwMDA2NSAwMDAwMCBuIAowMDAwMDAwMzk0IDAwMDAwIG4gCjAwMDAwMDAyMDggMDAwMDAg\nbiAKMDAwMDAwMTYxNSAwMDAwMCBuIAowMDAwMDEwMjU5IDAwMDAwIG4gCjAwMDAwMTAwNTkgMDAw\nMDAgbiAKMDAwMDAwOTU5OSAwMDAwMCBuIAowMDAwMDExMzEyIDAwMDAwIG4gCjAwMDAwMDE2MzYg\nMDAwMDAgbiAKMDAwMDAwMTc2MCAwMDAwMCBuIAowMDAwMDAxODgxIDAwMDAwIG4gCjAwMDAwMDIx\nNjQgMDAwMDAgbiAKMDAwMDAwMjMxNiAwMDAwMCBuIAowMDAwMDAyNjM3IDAwMDAwIG4gCjAwMDAw\nMDMwNDggMDAwMDAgbiAKMDAwMDAwMzIxMCAwMDAwMCBuIAowMDAwMDAzNTMwIDAwMDAwIG4gCjAw\nMDAwMDM5MjAgMDAwMDAgbiAKMDAwMDAwNDA2MCAwMDAwMCBuIAowMDAwMDA0NTI1IDAwMDAwIG4g\nCjAwMDAwMDQ5MTggMDAwMDAgbiAKMDAwMDAwNTA0MiAwMDAwMCBuIAowMDAwMDA1NDE5IDAwMDAw\nIG4gCjAwMDAwMDU3MTkgMDAwMDAgbiAKMDAwMDAwNjAzNyAwMDAwMCBuIAowMDAwMDA2MjQzIDAw\nMDAwIG4gCjAwMDAwMDY2NTQgMDAwMDAgbiAKMDAwMDAwNjg5MCAwMDAwMCBuIAowMDAwMDA3MDMw\nIDAwMDAwIG4gCjAwMDAwMDcxNDcgMDAwMDAgbiAKMDAwMDAwNzQ3NSAwMDAwMCBuIAowMDAwMDA3\nNzA5IDAwMDAwIG4gCjAwMDAwMDc5OTYgMDAwMDAgbiAKMDAwMDAwODMwNSAwMDAwMCBuIAowMDAw\nMDA4NTM1IDAwMDAwIG4gCjAwMDAwMDg5NDAgMDAwMDAgbiAKMDAwMDAwOTE0NCAwMDAwMCBuIAow\nMDAwMDA5Mzg4IDAwMDAwIG4gCjAwMDAwMTE5MzcgMDAwMDAgbiAKdHJhaWxlcgo8PCAvU2l6ZSA0\nNyAvUm9vdCAxIDAgUiAvSW5mbyA0NiAwIFIgPj4Kc3RhcnR4cmVmCjEyMDg1CiUlRU9GCg==\n", "image/png": "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\n/SRlKrYAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "mglearn.tools.heatmap(\n", " grid.cv_results_['mean_test_score'].reshape(3, -1),\n", " xlabel=\"ridge__alpha\",\n", " ylabel=\"polynomialfeatures__degree\",\n", " xticklabels=param_grid['ridge__alpha'],\n", " yticklabels=param_grid['polynomialfeatures__degree'], vmin=0\n", ")" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Best parameters: {'polynomialfeatures__degree': 2, 'ridge__alpha': 10}\n" ] } ], "source": [ "print(\"Best parameters: {}\".format(grid.best_params_))" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Test-set score: 0.77\n" ] } ], "source": [ "print(\"Test-set score: {:.2f}\".format(grid.score(X_test, y_test)))" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Score without poly features: 0.63\n" ] } ], "source": [ "param_grid = {\n", " 'ridge__alpha': [0.001, 0.01, 0.1, 1, 10, 100]\n", "}\n", "\n", "pipe = make_pipeline(StandardScaler(), Ridge())\n", "\n", "grid = GridSearchCV(pipe, param_grid, cv=5)\n", "\n", "grid.fit(X_train, y_train)\n", "\n", "print(\"Score without poly features: {:.2f}\".format(grid.score(X_test, y_test)))" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": true }, "outputs": [], "source": [ "pipe = Pipeline([('preprocessing', StandardScaler()), ('classifier', SVC())])" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn.ensemble import RandomForestClassifier\n", "\n", "param_grid = [\n", " {'classifier': [SVC()], \n", " 'preprocessing': [StandardScaler(), None],\n", " 'classifier__gamma': [0.001, 0.01, 0.1, 1, 10, 100],\n", " 'classifier__C': [0.001, 0.01, 0.1, 1, 10, 100]\n", " },\n", " {'classifier': [RandomForestClassifier(n_estimators=100)],\n", " 'preprocessing': [None], \n", " 'classifier__max_features': [1, 2, 3]\n", " }\n", "]" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Best params:\n", "{'classifier': SVC(C=10, cache_size=200, class_weight=None, coef0=0.0,\n", " decision_function_shape='ovr', degree=3, gamma=0.01, kernel='rbf',\n", " max_iter=-1, probability=False, random_state=None, shrinking=True,\n", " tol=0.001, verbose=False), 'classifier__C': 10, 'classifier__gamma': 0.01, 'preprocessing': StandardScaler(copy=True, with_mean=True, with_std=True)}\n", "\n", "Best cross-validation score: 0.99\n", "Test-set score: 0.98\n" ] } ], "source": [ "X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, random_state=0)\n", "\n", "grid = GridSearchCV(pipe, param_grid, cv=5)\n", "grid.fit(X_train, y_train)\n", "\n", "print(\"Best params:\\n{}\\n\".format(grid.best_params_))\n", "print(\"Best cross-validation score: {:.2f}\".format(grid.best_score_))\n", "print(\"Test-set score: {:.2f}\".format(grid.score(X_test, y_test)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Summary and Outlook" ] } ], "metadata": { "anaconda-cloud": {}, "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.6.0" } }, "nbformat": 4, "nbformat_minor": 1 }