├── .gitignore ├── LICENSE ├── PyTorch.tgz ├── README.md ├── ROC.ipynb ├── Santander Customer Satisfaction.ipynb ├── comprehensive ├── Tradeshift Text Classification.ipynb └── data_analyses_and_dimensionality_reduction.ipynb └── csdn ├── CSDN-52211334.ipynb ├── README.md ├── datasets ├── Default.csv └── processed.cleveland.csv └── tools.py /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | 27 | # PyInstaller 28 | # Usually these files are written by a python script from a template 29 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 30 | *.manifest 31 | *.spec 32 | 33 | # Installer logs 34 | pip-log.txt 35 | pip-delete-this-directory.txt 36 | 37 | # Unit test / coverage reports 38 | htmlcov/ 39 | .tox/ 40 | .coverage 41 | .coverage.* 42 | .cache 43 | nosetests.xml 44 | coverage.xml 45 | *,cover 46 | .hypothesis/ 47 | 48 | # Translations 49 | *.mo 50 | *.pot 51 | 52 | # Django stuff: 53 | *.log 54 | local_settings.py 55 | 56 | # Flask stuff: 57 | instance/ 58 | .webassets-cache 59 | 60 | # Scrapy stuff: 61 | .scrapy 62 | 63 | # Sphinx documentation 64 | docs/_build/ 65 | 66 | # PyBuilder 67 | target/ 68 | 69 | # IPython Notebook 70 | .ipynb_checkpoints 71 | 72 | # pyenv 73 | .python-version 74 | 75 | # celery beat schedule file 76 | celerybeat-schedule 77 | 78 | # dotenv 79 | .env 80 | 81 | # virtualenv 82 | venv/ 83 | ENV/ 84 | 85 | # Spyder project settings 86 | .spyderproject 87 | 88 | # Rope project settings 89 | .ropeproject 90 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /PyTorch.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hanxlinsist/jupyter_hub/a916e44c9ed9447c04224344aa9a561a7446a603/PyTorch.tgz -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 介绍 2 | 3 | 主要包含用于机器学习,数据可视化的Python代码 4 | -------------------------------------------------------------------------------- /ROC.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 64, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import numpy as np\n", 12 | "import matplotlib.pyplot as plt\n", 13 | "from sklearn import svm, datasets\n", 14 | "from sklearn.metrics import roc_curve, auc, roc_auc_score\n", 15 | "from sklearn.cross_validation import train_test_split\n", 16 | "from sklearn.preprocessing import label_binarize\n", 17 | "from sklearn.multiclass import OneVsRestClassifier\n", 18 | "from scipy import interp\n", 19 | "\n", 20 | "%matplotlib inline" 21 | ] 22 | }, 23 | { 24 | "cell_type": "markdown", 25 | "metadata": {}, 26 | "source": [ 27 | "A receiver operating characteristic (ROC), or simply ROC curve, is a graphical plot which illustrates the performance of a binary classifier system as its discrimination threshold is varied. It is created by plotting the fraction of true positives out of the positives (TPR = true positive rate) vs. the fraction of false positives out of the negatives (FPR = false positive rate), at various threshold settings. TPR is also known as sensitivity, and FPR is one minus the specificity or true negative rate." 28 | ] 29 | }, 30 | { 31 | "cell_type": "markdown", 32 | "metadata": {}, 33 | "source": [ 34 | "ROC curves are typically used in binary classification to study the output of a classifier. In order to extend ROC curve and ROC area to multi-class or multi-label classification, it is necessary to binarize the output. One ROC curve can be drawn per label, but one can also draw a ROC curve by considering each element of the label indicator matrix as a binary prediction (micro-averaging).\n", 35 | "Another evaluation measure for multi-class classification is macro-averaging, which gives equal weight to the classification of each label." 36 | ] 37 | }, 38 | { 39 | "cell_type": "code", 40 | "execution_count": 2, 41 | "metadata": { 42 | "collapsed": false 43 | }, 44 | "outputs": [ 45 | { 46 | "name": "stdout", 47 | "output_type": "stream", 48 | "text": [ 49 | "[[ 5.1 3.5 1.4 0.2]\n", 50 | " [ 4.9 3. 1.4 0.2]\n", 51 | " [ 4.7 3.2 1.3 0.2]\n", 52 | " [ 4.6 3.1 1.5 0.2]]\n", 53 | "-----\n", 54 | "[0 0 0 0]\n" 55 | ] 56 | } 57 | ], 58 | "source": [ 59 | "# Import some data to play with\n", 60 | "iris = datasets.load_iris()\n", 61 | "X = iris.data\n", 62 | "y = iris.target\n", 63 | "\n", 64 | "print(X[0:4, :])\n", 65 | "print('-----')\n", 66 | "print(y[0:4])" 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": 3, 72 | "metadata": { 73 | "collapsed": false 74 | }, 75 | "outputs": [], 76 | "source": [ 77 | "# Binarize the output\n", 78 | "y = label_binarize(y, classes=[0, 1, 2])\n", 79 | "n_classes = y.shape[1]" 80 | ] 81 | }, 82 | { 83 | "cell_type": "code", 84 | "execution_count": 4, 85 | "metadata": { 86 | "collapsed": false 87 | }, 88 | "outputs": [], 89 | "source": [ 90 | "# Add noisy features to make the problem harder\n", 91 | "random_state = np.random.RandomState(0)\n", 92 | "n_samples, n_features = X.shape\n", 93 | "X = np.c_[X, random_state.randn(n_samples, 200 * n_features)]" 94 | ] 95 | }, 96 | { 97 | "cell_type": "code", 98 | "execution_count": 5, 99 | "metadata": { 100 | "collapsed": false 101 | }, 102 | "outputs": [ 103 | { 104 | "name": "stdout", 105 | "output_type": "stream", 106 | "text": [ 107 | "[[1 0 0]\n", 108 | " [0 0 1]\n", 109 | " [0 1 0]\n", 110 | " [1 0 0]]\n" 111 | ] 112 | } 113 | ], 114 | "source": [ 115 | "# shuffle and split training and test sets\n", 116 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.5, random_state=0)\n", 117 | "\n", 118 | "print(y_train[0:4, :])" 119 | ] 120 | }, 121 | { 122 | "cell_type": "code", 123 | "execution_count": 14, 124 | "metadata": { 125 | "collapsed": false 126 | }, 127 | "outputs": [], 128 | "source": [ 129 | "# Learn to predict each class against the other\n", 130 | "classifier = OneVsRestClassifier(svm.SVC(kernel='linear', probability=True, random_state=random_state))\n", 131 | "y_score = classifier.fit(X_train, y_train).decision_function(X_test)" 132 | ] 133 | }, 134 | { 135 | "cell_type": "code", 136 | "execution_count": 15, 137 | "metadata": { 138 | "collapsed": false 139 | }, 140 | "outputs": [], 141 | "source": [ 142 | "# Compute ROC curve and ROC area for each class\n", 143 | "fpr = dict()\n", 144 | "tpr = dict()\n", 145 | "roc_auc = dict()\n", 146 | "for i in range(n_classes):\n", 147 | " fpr[i], tpr[i], _ = roc_curve(y_test[:, i], y_score[:, i])\n", 148 | " roc_auc[i] = auc(fpr[i], tpr[i])" 149 | ] 150 | }, 151 | { 152 | "cell_type": "code", 153 | "execution_count": 16, 154 | "metadata": { 155 | "collapsed": true 156 | }, 157 | "outputs": [], 158 | "source": [ 159 | "# Compute micro-average ROC curve and ROC area\n", 160 | "fpr[\"micro\"], tpr[\"micro\"], _ = roc_curve(y_test.ravel(), y_score.ravel())\n", 161 | "roc_auc[\"micro\"] = auc(fpr[\"micro\"], tpr[\"micro\"])" 162 | ] 163 | }, 164 | { 165 | "cell_type": "code", 166 | "execution_count": 59, 167 | "metadata": { 168 | "collapsed": false 169 | }, 170 | "outputs": [ 171 | { 172 | "data": { 173 | "text/plain": [ 174 | "(225,)" 175 | ] 176 | }, 177 | "execution_count": 59, 178 | "metadata": {}, 179 | "output_type": "execute_result" 180 | } 181 | ], 182 | "source": [ 183 | "y_score.ravel().shape" 184 | ] 185 | }, 186 | { 187 | "cell_type": "code", 188 | "execution_count": 28, 189 | "metadata": { 190 | "collapsed": false 191 | }, 192 | "outputs": [ 193 | { 194 | "data": { 195 | "image/png": "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\n5szR6NGjNX36dM2ePdvvSAAAIALRSqMdVFZWauLEiSosLNSrr75KY1kAANAgirN2UF5erqSkJOXn\n5ysxMdHvOAAAIILRSgMAAKCN0UoDAAAgRlCctbGSkhIFAgG/YwAAgChFcdaGXnzxRQ0dOlQFBQV+\nRwEAAFGKCQFtoKamRlOnTlVOTo5eeOEFnX322X5HAgAAUYrirJW2bt2q8ePHq3PnziosLFRqaqrf\nkQAAQBRjtmYrjRs3ToMGDdKUKVOUkMBZYgAA0LrZmhRnrVRTU6MOHRiABBDf+vTpo08++cTvGEC7\n6927t/79738fsZziDADgK+8Pkd8xgHbX0M8+fc7aCf/wAACAcKM4awLnnGbOnKkf/OAHfkcBAAAx\njouljqKiokITJkxQcXGxFi9e7HccAAAQ4xg5a0RRUZEyMjKUlpamNWvWqE+fPn5HAgAAMY7irAH5\n+fkaPXq07r33Xj322GPq2LGj35EAAGi19957T8OGDfM7RlTYuXOnzjjjDFVXV7frcSnOGpCenq7X\nXntN3//+9/2OAgBohT59+qhz587q1q2b0tLSdP311+uzzz47bJ21a9fqggsuULdu3ZScnKzLLrtM\nGzduPGydffv2adKkSerdu7e6deumU089Vbfddpt2797dni+n1e6880794he/8DtGq3z++eeaMGGC\nkpKSlJaWplmzZjW47v3336+uXbuqW7du6tatmzp37qwOHTrUfm5bt27Vd77zHXXv3l29evXS73//\n+9ptv/KVrygzM/OwZe2B4qwBHTp0UL9+/fyOAQBoJTPTX//6V+3du1fr169XUVGR7r///trn161b\np4suukjf/e53tW3bNm3evFkDBw7UOeecU9u/qrq6WpmZmdq4caNWrFihvXv3at26dUpNTdXrr78e\ntuwHDx5s0/1t375dq1ev1mWXXRYReVrqrrvu0kcffaTi4mKtWrVKv/nNb7RixYp6173jjju0b98+\n7d27V3v37tXtt9+uUaNGKSUlRZKUlZWlfv36qbS0VH/5y180ZcoU/f3vf6/d/uqrr2734kzOuai4\nBaMCACJRJP8b3adPH5eXl1f7+Be/+IUbM2ZM7ePzzjvP3XTTTUds961vfctdd911zjnn5s6d6048\n8UT32WefNfm477zzjrvwwgtdSkqKO/HEE93999/vnHPuhz/8ofvVr35Vu97q1avdySeffFjeGTNm\nuIEDB7pOnTq5GTNmuCuvvPKwfd9yyy3u1ltvdc45t2fPHnfDDTe4Hj16uJNPPtn98pe/dIFAoN5M\nzzzzjLvwwgsPW/bAAw+4fv36ua5du7ozzzzTPf/887XPPf300+6cc85x2dnZrnv37rW558+f7776\n1a+6lJQUd/HFF7tPPvmkdptbb73V9ezZ03Xr1s1lZGS4V199tcnvWVOlpaW5lStX1j6+88473VVX\nXdWkbU855RT3hz/8wTnn3P79+52ZubKystrnb7zxRveDH/yg9nFNTY3r3Lmz27JlS737a+hn31ve\nopon7kfOqqqqNGXKFJWWlvodBQAQZp9++qmWL1+uU089VZJ04MABrV27VldeeeUR637ve99Tbm6u\nJCkvL08XX3yxvvSlLzXpOPv379eFF16oSy65RNu2bdOHH36oCy64oMH1zQ7vVbpw4UItX75cFRUV\nGj9+vJYvX67KykpJUiAQ0OLFi3XNNddIkq677jodd9xx+vjjj1VUVKTc3FzNmzev3uO8/fbbOv30\n0w9b1r9/f/3zn//U3r17dddddykrK0s7duyofT4/P1/9+/fXzp07NXXqVC1dulQPPPCAXnjhBZWW\nluq8887TVVddVbv+2Wefrbfeekvl5eW6+uqrNW7cOH3++ef15pkxY4aSk5OVkpKi5OTkw+4fGtmq\nq6KiQtu2bdPAgQNrlw0aNEjvvvtuQ29vrX/84x8qLS3V5ZdfLik4QFW3iaxzTu+8807t42OOOUb9\n+/fXhg0bjrr/thLXxdnmzZt17rnn6v3339dxxx3ndxwAiFlmbXNrqe985zvq1q2bevXqpRNOOEHT\npk2TJO3evVuBQEA9evQ4YpsePXqorKxMkrRr165612nIX/7yF/Xo0UOTJk3Scccdp8TExGZdhH/r\nrbcqLS1NHTt2VK9evTR06FA9//zzkoKF4qH97dixQ8uXL9esWbPUqVMnpaamatKkScrJyal3vxUV\nFeratethy6644gqdcMIJkoLfF33qqacedqr2pJNO0k9/+lMlJCSoY8eO+v3vf6877rhDp512mhIS\nEjR58mStX79excXFkoKnAY8//nglJCQoOztbVVVVev/99+vNc/vtt6u8vFy7d+9WeXn5YfcbupZv\n//79MjMlJSXVLuvWrZv27dt31Pf1mWee0ZVXXqnOnTtLkrp06aJzzjlH99xzj6qqqlRYWKg//elP\nR1yT2LVrV1VUVBx1/20lbouzZcuWacSIEbrmmmu0ZMmSwz5kAEDbcq5tbi21dOlS7d27V3//+9+1\nadOm2qIrOTlZCQkJ2rZt2xHbbNu2TampqZKk7t2717tOQ4qLi1t13fLJJ5982OOrrrqqtuDKycnR\n1VdfLUnasmWLqqur1aNHj9oRp5/85Ce1r6+u5OTkI4qYZ555RkOGDKkduXr33XcP275nz56Hrf/J\nJ5/o1ltvVUpKilJSUtS9e3eZmUpKSiRJDz30kM4444za/e3du7fBPC3RpUsXSdLevXtrl+3Zs+eI\norOuAwcOaPHixfrhD3942PIFCxbo448/Vq9evfSzn/1M11577RHv/759+3T88ce3zQtogrgrzpxz\nmjx5sm666Sa98MILmjRp0hHDyQCA2HLotNV5552n6667Tj//+c8lSZ07d9bIkSPrbTK+aNEiffOb\n35QkffOb39Qrr7yiAwcONOl4PXv21EcffVTvc4mJiYeNzNRX9NX9uzRu3DitXr1aJSUlev7552uL\ns549e6pTp07atWtX7YhTRUWF3nrrrXqPPXDgQH3wwQe1j7ds2aIbb7xRv/vd72pHrs4888zDTvPV\nzXJoRuPu3btrj7l//36NGDFCa9as0YMPPqglS5bU7q9bt24Nfv1h3ZmUh26HltXn+OOPV48ePQ47\nzbhhwwadeeaZ9a5/yJ///Gd1795d559//mHLe/bsqRdffFE7duzQunXrVFpaqrPPPrv2+YMHD+rD\nDz/UoEGDGt1/W4q74szMdMYZZ6iwsFAjR470Ow4AoJ1NmjRJubm5evvttyVJDzzwgP7v//5Pjz32\nmPbv36/y8nL98pe/1GuvvaY777xTknTttdeqZ8+euuKKK/T+++/LOaddu3bp/vvv18svv3zEMcaM\nGaPt27frkUce0eeff679+/fXniocPHiwXnrpJZWXl2v79u2aPXv2UTOnpqbq61//uq6//nqdcsop\ntdeNnXjiiRo9erSys7O1b98+Oef08ccf6x//+Ee9+7nwwgtVWFhYew1YZWWlEhISlJqaqkAgoKee\neuqw663q8+Mf/1j33Xef3nvvPUnBUaslS5ZICo4wHXvsserevbs+//xz3X333Y2ebqw7k/LQ7dCy\nhlx77bWaPn26KioqtHHjRs2dO1fXX399o7mfeeaZer+GcdOmTdq/f7+qq6v1/9u7/yArqzqO4+9P\n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\n", 196 | "text/plain": [ 197 | "" 198 | ] 199 | }, 200 | "metadata": {}, 201 | "output_type": "display_data" 202 | } 203 | ], 204 | "source": [ 205 | "# Plot of a ROC curve for a specific class\n", 206 | "plt.figure(figsize=(10,8))\n", 207 | "plt.plot(fpr[2], tpr[2], label='ROC curve (area = %0.2f)' % roc_auc[2])\n", 208 | "plt.plot([0, 1], [0, 1], 'k--')\n", 209 | "plt.xlim([0.0, 1.0])\n", 210 | "plt.ylim([0.0, 1.05])\n", 211 | "plt.xlabel('False Positive Rate')\n", 212 | "plt.ylabel('True Positive Rate')\n", 213 | "plt.title('Receiver operating characteristic example')\n", 214 | "plt.legend(loc=\"lower right\")\n", 215 | "plt.show()" 216 | ] 217 | }, 218 | { 219 | "cell_type": "code", 220 | "execution_count": 60, 221 | "metadata": { 222 | "collapsed": false 223 | }, 224 | "outputs": [], 225 | "source": [ 226 | "# Compute macro-average ROC curve and ROC area\n", 227 | "\n", 228 | "# First aggregate all false positive rates\n", 229 | "all_fpr = np.unique(np.concatenate([fpr[i] for i in range(n_classes)]))\n", 230 | "\n", 231 | "# Then interpolate all ROC curves at this points\n", 232 | "mean_tpr = np.zeros_like(all_fpr)\n", 233 | "for i in range(n_classes):\n", 234 | " mean_tpr += interp(all_fpr, fpr[i], tpr[i])\n", 235 | "\n", 236 | "# Finally average it and compute AUC\n", 237 | "mean_tpr /= n_classes\n", 238 | "\n", 239 | "fpr[\"macro\"] = all_fpr\n", 240 | "tpr[\"macro\"] = mean_tpr\n", 241 | "roc_auc[\"macro\"] = auc(fpr[\"macro\"], tpr[\"macro\"])" 242 | ] 243 | }, 244 | { 245 | "cell_type": "code", 246 | "execution_count": 61, 247 | "metadata": { 248 | "collapsed": false 249 | }, 250 | "outputs": [ 251 | { 252 | "data": { 253 | "image/png": "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\nnMC4ceM01p89exb//PMP8vLykJ2djWXLluHJkyfo1KmTWObkyZPo379/qa+j0pX3fuirfqAcbc4+\nOvARYQGo26ZulK/Of3YPuEi7EW5QVi4v2+ZMrVbTypUrqUGDBrR3796KCYrVei/yHfGqNWrUSGw/\nRUQ0ZswYjfYyP//8M3l6ehJRyQ4BSqWSxo0bRw0bNiRzc3MaOnQoEWnvlUhEtH79emrSpAlZWFjQ\nwIEDKS4uTmdcv/32Gzk5OZFcLqeBAwfStGnTaMyYMRplJk6cSDKZrETvxqioKBowYABZWVmRpaUl\n9e7dmyIjI4lIs01VWc+1detWcnR0JEtLS1qyZAnZ29tTaGgoERV8Z6xatYpcXFxILpdT06ZNad68\neVpfk7brkpmZSVZWVrR//35x3TfffENNmzYlIyMjcnR0pNmzZ1NOTo7GfufPn6f+/fuTmZkZWVhY\nUOfOnemXX37ReT3Xr19PLi4uZGpqSm+88YbYCSE8PJxatWpFcrmcxo4dS6NGjdJoc6btfSQi6t27\nN9WtW5ceP36ssf7cuXPk5uZG5ubm1KBBA/L29qaYmBitx0hMTCQHBwexzVh8fDy5u7uTiYkJubi4\n0IYNGzQ+b7169aJNmzZpHCM1NZX8/PzI3t6ezMzMqH379vTrr78SUUFnDldXVzI1NaV27drRt99+\nq/P1vIyIiAhydXUlIyMjsTNNoR07dtDrr7+uUX7p0qXk5uZW4jgnT56kNm3akFwuJwsLC3J3dxc/\nZ0REWVlZZG9vT0+ePClzbLq+e/ASbc4EeplGFGUgCEI/AN+hoJZuExEtK7Z9FIDCyS3TAPgR0RUU\nIwgClTXWECEEJnEmeHPjm5AJMlyafAlvNHzj2XEKyhA9W6jk118TCSEhoGe3N15UcnIyJkyYgJiY\nGOzatUusqmfsZQmCUOrtFFZ9ZGRkwMzMDLdv39ZoQ8fKZ/78+WjQoAE+/vhjqUOp8tauXYvY2Fh8\n/fXXZd5H13fPs/XlaiSlV56dykoQBBmAtQB6A4gHcF4QhCAiulGk2F0APYko5VkitxFA55c994f7\nPwSB4N/ZX0zMmPTOnz8PW1tbBAYGlntQRMZYzbN//3707t0barUas2bNQuvWrTkxqyBLliyROoRq\nY+rUqVKHAKDy25y9CeAWEUUTUR6AnQAGFS1ARGFElPJsMQyAXUWc+MLDC7CX22OB+4KKOByrIJ6e\nnli7di0nZowxDUFBQbC1tYW9vT3u3Lkj9hJlrDaq7OTMDkBMkeVYlJ58TQJwsKJO/mnXTzFiiAn3\nwGSMsSpu48aNUCqVUCqVOHLkCJo1ayZ1SIxJplJva74IQRB6ARgPoLuuMkV7lbi7u4vduovKyssS\nnw9uPhgfa+mdWZ16YJqHhkKpY/4wqSj0yvaxSUlJkXysGMYYY+xVCAkJ0egZ+zIqtUOAIAidASwg\non7PlmejoPdC8U4BrQH8BqAfEWkdKKasHQL2R+2HiYsJZq2fhQsfXNDsAFDyoFW+Q8DLNL6XUmBg\nIGbOnIkrV67A0tJS6nBYLcAdAhhjUqiMDgGVfVvzPICmgiA4CYJQF4APAI3BaQRBcERBYjZGV2L2\nIoJuBAEABrkMek5JVhlycnIwZcoUfPHFFzh06BAnZowxxtgLqtTkjIjyAUwFcBjANQA7iei6IAiT\nBUH44FmxzwGYA/hREIRLgiCce5lz/v2gYGC8Ac0GvMxhWDncu3cP3bt3x5MnTxAeHi75CMuMMcZY\ndVTpbc6I6BAAl2Lr1hd5/j6A9yvqfGk5BXOIudp1KDh+4QZtFYsKRUWdttbLz8+Ht7c3PvjgA3z8\n8cdapyNhjDHG2PPVuOmbslQFHQKeZiQCRBBQ8NA6g/GzKTnYy6tTpw7OnTuH6dOnc2LGGGNV2Pr1\n6zFz5kypw6gW9u/fDx8fn1d+3pqXnD3rrWmobyhxJLWPsbGx1CEwxpiG6OhoyGQycZLtxo0bY9my\nZSXKbdmyBa1bt4axsTFsbW0xZcoUpKSkaJSJiorC8OHDYWVlBYVCgbZt22LVqlXVqiNKXl4evvrq\nK50TpVcX0dHR8PDwgLGxMVq2bIljx47pLOvl5SVOri6Xy2FgYKDR7CYyMhI9e/aEmZkZHB0dNQbt\n9fb2xr///ourV69W6usprkYlZ0SEnPwcAEA9vXoSR8MYY9LJz8+XOgSdXnVsgiAgJSUFqamp2L17\nNxYvXqzxY75y5UrMmTMHK1euRGpqKsLCwhAdHQ1PT0+ong1ldOfOHXTu3BlOTk64evUqlEoldu/e\njYsXLyItLa3SYq/oaxUUFIQWLVrA2tq6XPur1eoKjae8Ro4cCVdXVyQlJWHJkiUYNmwYnj59qrXs\nX3/9JU6unpqaiq5du2L48OHi9lGjRsHd3R3JyckICQnBjz/+iP3794vbfXx8sH79em2HrjzlnZTz\nVT9QhkmNM3MzCQsgTnxeMPZG9Z7f/GUnGa9o+fn5tHDhQvruu++kDoUxDWX5jpCKs7MzLV++nFq3\nbk0mJiY0adIkevz4MfXv359MTU3J09OTkpOTxfLvvvsuWVtbk5mZGbm5udG1a9fEbVlZWTRz5kxy\ncnIiMzMz6tGjB2VnZ9P9+/dJEATatGkTOTo6ipM+BwUFUatWrUihUFCvXr3o+vXrOuM8d+4cdenS\nhczMzMjW1pamTp1KeXl5RETk5+dHn3zyiUb5QYMG0apVq4ioYELtoUOHkpWVFTVu3JjWrFkjlluw\nYAENGzaMRo8eTfXr16dNmzaVei4iouDgYHJxcSEzMzOaMmUKubm5aUzIvWnTJmrRogWZm5tTv379\nKDo6WutrKj6RPBHRm2++SStWrCCigkm9TUxMaM+ePRr7paenk5WVFW3evJmIiHx9fcnb21vntdPm\nzz//pLZt24qTtQcHBxNRwefh2LFjGtdn9OjRYrzF38f+/fvTDz/8oHHsNm3a0B9//EFERNevXydP\nT08yNzen5s2b065du3TGNGHCBPrqq6801pX2eXvvvffIz8+PvLy8yMTEhI4dO0Y5OTk0a9YscnR0\nJGtra/Lz8xMnVlcqleTt7U1WVlZkbm5O3t7eFBcX90LX7XmioqKoXr16lJ6eLq7r2bMnrV+//rn7\n3rt3j+rUqaPxeTE2Ntb4f/Huu+/S119/LS7/888/1KhRI53H1PXdg5eY+FzypKvMgZbhi/dp5lNO\nzirRkydPqE+fPtSzZ88K/8/G2Msq7TsCC1Bhj/JwdnamLl26UEJCAsXHx1ODBg3I1dWVIiMjKScn\nhzw8PGjRokVi+c2bN1NGRgbl5ubSjBkzqG3btuK2KVOmUK9evejhw4ekVqvpzJkzlJubK/6ojxs3\njjIzMyk7O5uioqLI2NiYjh07RiqVir755htq2rSpRhJU1IULF+js2bOkVqspOjqaWrZsSatXryYi\nor///pscHR3FskqlkgwNDenRo0ekVqvJ1dWVlixZQiqViu7du0dNmjShw4cPE1FB8lG3bl3au3cv\nERFlZ2fTxYsXdZ4rMTGR5HI5/fnnn5Sfn0+rV6+munXrisnZn3/+Sc2aNaObN29Sfn4+ffXVV9S1\na1etr6kwOVOpVEREdObMGTI2NqagoCAiIjp48CDp6+trJG+Fxo0bR6NGjSIiImtra9qyZcvz3mrR\n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\n", 254 | "text/plain": [ 255 | "" 256 | ] 257 | }, 258 | "metadata": {}, 259 | "output_type": "display_data" 260 | } 261 | ], 262 | "source": [ 263 | "# Plot all ROC curves\n", 264 | "plt.figure(figsize=(10,8))\n", 265 | "plt.plot(fpr[\"micro\"], tpr[\"micro\"],\n", 266 | " label='micro-average ROC curve (area = {0:0.2f})'\n", 267 | " ''.format(roc_auc[\"micro\"]),\n", 268 | " linewidth=2)\n", 269 | "\n", 270 | "plt.plot(fpr[\"macro\"], tpr[\"macro\"],\n", 271 | " label='macro-average ROC curve (area = {0:0.2f})'\n", 272 | " ''.format(roc_auc[\"macro\"]),\n", 273 | " linewidth=2)\n", 274 | "\n", 275 | "for i in range(n_classes):\n", 276 | " plt.plot(fpr[i], tpr[i], label='ROC curve of class {0} (area = {1:0.2f})'\n", 277 | " ''.format(i, roc_auc[i]))\n", 278 | "\n", 279 | "plt.plot([0, 1], [0, 1], 'k--')\n", 280 | "plt.xlim([0.0, 1.0])\n", 281 | "plt.ylim([0.0, 1.05])\n", 282 | "plt.xlabel('False Positive Rate')\n", 283 | "plt.ylabel('True Positive Rate')\n", 284 | "plt.title('Some extension of Receiver operating characteristic to multi-class')\n", 285 | "plt.legend(loc=\"lower right\")\n", 286 | "plt.show()" 287 | ] 288 | }, 289 | { 290 | "cell_type": "code", 291 | "execution_count": 49, 292 | "metadata": { 293 | "collapsed": false 294 | }, 295 | "outputs": [ 296 | { 297 | "data": { 298 | "text/plain": [ 299 | "array([0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1,\n", 300 | " 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0,\n", 301 | " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1,\n", 302 | " 1, 0, 0, 1, 1, 0])" 303 | ] 304 | }, 305 | "execution_count": 49, 306 | "metadata": {}, 307 | "output_type": "execute_result" 308 | } 309 | ], 310 | "source": [ 311 | "y_test[:, 0]" 312 | ] 313 | }, 314 | { 315 | "cell_type": "code", 316 | "execution_count": 50, 317 | "metadata": { 318 | "collapsed": false 319 | }, 320 | "outputs": [ 321 | { 322 | "data": { 323 | "text/plain": [ 324 | "array([-0.76305896, -0.20238399, 0.11808492, -0.90750303, -0.01108555,\n", 325 | " -0.60521037, 0.02264569, -0.61115098, -0.37590649, -0.47019698,\n", 326 | " -0.42194767, -0.33545871, -0.22711497, -0.07836815, -0.533757 ,\n", 327 | " 0.09973063, -0.71354879, -0.55067912, 0.37989555, -0.11088917,\n", 328 | " -0.70721114, -0.02407429, -0.25004251, 0.12688003, -0.68224184,\n", 329 | " -0.0800568 , -0.03254409, -0.04974597, -0.13003384, -0.19289268,\n", 330 | " -0.36221002, -0.2284516 , -0.06178684, -0.52446923, -0.40029714,\n", 331 | " -0.3511887 , -0.05774206, -1.11908314, 0.19597017, -0.04342577,\n", 332 | " -0.4812135 , 0.17431275, -0.41431727, -0.01086869, 0.01626312,\n", 333 | " -0.11923774, -0.70843733, -0.77322168, -0.61461496, -0.96335686,\n", 334 | " -0.31000437, -0.31988026, -0.35307167, 0.12141618, -0.66412149,\n", 335 | " -0.55119677, -0.55717268, -0.41121128, -0.49442008, 0.06881717,\n", 336 | " -0.23058968, 0.30309598, 0.17584119, -0.19111926, -0.42896846,\n", 337 | " -0.67758109, -0.32984013, -0.97144386, 0.02097654, -0.08193282,\n", 338 | " -0.41489593, -0.30434286, 0.18874747, 0.24975994, -0.39991848])" 339 | ] 340 | }, 341 | "execution_count": 50, 342 | "metadata": {}, 343 | "output_type": "execute_result" 344 | } 345 | ], 346 | "source": [ 347 | "y_score[:, 0]" 348 | ] 349 | }, 350 | { 351 | "cell_type": "code", 352 | "execution_count": 88, 353 | "metadata": { 354 | "collapsed": false 355 | }, 356 | "outputs": [ 357 | { 358 | "name": "stdout", 359 | "output_type": "stream", 360 | "text": [ 361 | "[ 0. 0.5 0.5 1. ]\n", 362 | "[ 0.5 0.5 1. 1. ]\n", 363 | "[ 0.8 0.4 0.35 0.1 ]\n" 364 | ] 365 | } 366 | ], 367 | "source": [ 368 | "y = np.array([1, 1, 2, 2])\n", 369 | "pred = np.array([0.1, 0.4, 0.35, 0.8])\n", 370 | "fpr, tpr, thresholds = metrics.roc_curve(y, pred, pos_label=2)\n", 371 | "print(fpr)\n", 372 | "print(tpr)\n", 373 | "print(thresholds)\n", 374 | "# metrics.auc(fpr, tpr)" 375 | ] 376 | } 377 | ], 378 | "metadata": { 379 | "kernelspec": { 380 | "display_name": "Python 3", 381 | "language": "python", 382 | "name": "python3" 383 | }, 384 | "language_info": { 385 | "codemirror_mode": { 386 | "name": "ipython", 387 | "version": 3 388 | }, 389 | "file_extension": ".py", 390 | "mimetype": "text/x-python", 391 | "name": "python", 392 | "nbconvert_exporter": "python", 393 | "pygments_lexer": "ipython3", 394 | "version": "3.5.2" 395 | } 396 | }, 397 | "nbformat": 4, 398 | "nbformat_minor": 0 399 | } 400 | -------------------------------------------------------------------------------- /comprehensive/Tradeshift Text Classification.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "### Big Data -- Sample Data!" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 2, 13 | "metadata": { 14 | "collapsed": false 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "from sklearn.feature_extraction import DictVectorizer\n", 19 | "import pandas as pd\n", 20 | "import numpy as np" 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": 3, 26 | "metadata": { 27 | "collapsed": false 28 | }, 29 | "outputs": [], 30 | "source": [ 31 | "train_sample = pd.read_csv('/home/vincent/Desktop/datasets/' + 'test.csv', nrows=1000)\n", 32 | "labels = pd.read_csv('/home/vincent/Desktop/datasets/' + 'trainLabels.csv', nrows=1000)" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": 4, 38 | "metadata": { 39 | "collapsed": false 40 | }, 41 | "outputs": [ 42 | { 43 | "data": { 44 | "text/html": [ 45 | "
\n", 46 | "\n", 47 | " \n", 48 | " \n", 49 | " \n", 50 | " \n", 51 | " \n", 52 | " \n", 53 | " \n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | "
idx1x2x3x4x5x6x7x8x9...x136x137x138x139x140x141x142x143x144x145
01700001YESNOI7K7j9mvUurktDbybGa8nYojS5TrOrQqvAandHsdjv8=YGCdISifn4fLao/ASKdZFhGIq23oqzfSbUVb6px1pig=0.6536980.0416840.9405730.0908510.873563...0.0000000.9833064678NONOYES30.1684480.863581
11700002NONOcSuQaz0xx+UxAtskjMBN1xCeacDm/4oJYEIDFL3CMoU=vOPAlFJxrZoxaQht2ylUA2U0jUyFGxJF7iy/SNua2+U=1.2941180.0000001.0000000.0000000.468855...-0.6666671.001188918YESNOYES10.6949890.468855
21700003NONOVduR3ZHc2+rs/i34uA1VtOPTyOogJacJNc3mBuRRjIU=ZSznNzP7c1xuAbA4HWA+NnJ4UXhlkZckpXtvQW/EJPw=0.4570760.3184880.3600940.4444770.354545...0.0000000.9744003413YESNOYES00.3261060.345455
31700004NONOS7l8SI3WbSTbhCSCcNJBWCtNjh8fSqS3ZhPZ3X+EGGU=aZTF/lredyP4cukeN8bh6kpBjYmS1QFNpPOg2LVm3Lg=1.0858780.8748110.9398251.0547320.767586...0.0000000.8746773307YESNOYES10.7508320.760316
41700005NONOYKBNeCS2s8QQz1xy7Aes8Ina4f27Q022R7ggwOX58l0=6E1RoTs+Er+giZsKw158lVBRFEjPAoSaWCcPwdXuk6k=1.4147980.0000001.0000000.0000000.348653...-1.0000001.001262892NONONO100.5807170.337559
\n", 196 | "

5 rows × 146 columns

\n", 197 | "
" 198 | ], 199 | "text/plain": [ 200 | " id x1 x2 x3 \\\n", 201 | "0 1700001 YES NO I7K7j9mvUurktDbybGa8nYojS5TrOrQqvAandHsdjv8= \n", 202 | "1 1700002 NO NO cSuQaz0xx+UxAtskjMBN1xCeacDm/4oJYEIDFL3CMoU= \n", 203 | "2 1700003 NO NO VduR3ZHc2+rs/i34uA1VtOPTyOogJacJNc3mBuRRjIU= \n", 204 | "3 1700004 NO NO S7l8SI3WbSTbhCSCcNJBWCtNjh8fSqS3ZhPZ3X+EGGU= \n", 205 | "4 1700005 NO NO YKBNeCS2s8QQz1xy7Aes8Ina4f27Q022R7ggwOX58l0= \n", 206 | "\n", 207 | " x4 x5 x6 x7 \\\n", 208 | "0 YGCdISifn4fLao/ASKdZFhGIq23oqzfSbUVb6px1pig= 0.653698 0.041684 0.940573 \n", 209 | "1 vOPAlFJxrZoxaQht2ylUA2U0jUyFGxJF7iy/SNua2+U= 1.294118 0.000000 1.000000 \n", 210 | "2 ZSznNzP7c1xuAbA4HWA+NnJ4UXhlkZckpXtvQW/EJPw= 0.457076 0.318488 0.360094 \n", 211 | "3 aZTF/lredyP4cukeN8bh6kpBjYmS1QFNpPOg2LVm3Lg= 1.085878 0.874811 0.939825 \n", 212 | "4 6E1RoTs+Er+giZsKw158lVBRFEjPAoSaWCcPwdXuk6k= 1.414798 0.000000 1.000000 \n", 213 | "\n", 214 | " x8 x9 ... x136 x137 x138 x139 x140 x141 x142 \\\n", 215 | "0 0.090851 0.873563 ... 0.000000 0.98 3306 4678 NO NO YES \n", 216 | "1 0.000000 0.468855 ... -0.666667 1.00 1188 918 YES NO YES \n", 217 | "2 0.444477 0.354545 ... 0.000000 0.97 4400 3413 YES NO YES \n", 218 | "3 1.054732 0.767586 ... 0.000000 0.87 4677 3307 YES NO YES \n", 219 | "4 0.000000 0.348653 ... -1.000000 1.00 1262 892 NO NO NO \n", 220 | "\n", 221 | " x143 x144 x145 \n", 222 | "0 3 0.168448 0.863581 \n", 223 | "1 1 0.694989 0.468855 \n", 224 | "2 0 0.326106 0.345455 \n", 225 | "3 1 0.750832 0.760316 \n", 226 | "4 10 0.580717 0.337559 \n", 227 | "\n", 228 | "[5 rows x 146 columns]" 229 | ] 230 | }, 231 | "execution_count": 4, 232 | "metadata": {}, 233 | "output_type": "execute_result" 234 | } 235 | ], 236 | "source": [ 237 | "train_sample.head()" 238 | ] 239 | }, 240 | { 241 | "cell_type": "code", 242 | "execution_count": 5, 243 | "metadata": { 244 | "collapsed": false 245 | }, 246 | "outputs": [ 247 | { 248 | "data": { 249 | "text/html": [ 250 | "
\n", 251 | "\n", 252 | " \n", 253 | " \n", 254 | " \n", 255 | " \n", 256 | " \n", 257 | " \n", 258 | " \n", 259 | " \n", 260 | " \n", 261 | " \n", 262 | " \n", 263 | " \n", 264 | " \n", 265 | " \n", 266 | " \n", 267 | " \n", 268 | " \n", 269 | " \n", 270 | " \n", 271 | " \n", 272 | " \n", 273 | " \n", 274 | " \n", 275 | " \n", 276 | " \n", 277 | " \n", 278 | " \n", 279 | " \n", 280 | " \n", 281 | " \n", 282 | " \n", 283 | " \n", 284 | " \n", 285 | " \n", 286 | " \n", 287 | " \n", 288 | " \n", 289 | " \n", 290 | " \n", 291 | " \n", 292 | " \n", 293 | " \n", 294 | " \n", 295 | " \n", 296 | " \n", 297 | " \n", 298 | " \n", 299 | " \n", 300 | " \n", 301 | " \n", 302 | " \n", 303 | " \n", 304 | " \n", 305 | " \n", 306 | " \n", 307 | " \n", 308 | " \n", 309 | " \n", 310 | " \n", 311 | " \n", 312 | " \n", 313 | " \n", 314 | " \n", 315 | " \n", 316 | " \n", 317 | " \n", 318 | " \n", 319 | " \n", 320 | " \n", 321 | " \n", 322 | " \n", 323 | " \n", 324 | " \n", 325 | " \n", 326 | " \n", 327 | " \n", 328 | " \n", 329 | " \n", 330 | " \n", 331 | " \n", 332 | " \n", 333 | " \n", 334 | " \n", 335 | " \n", 336 | " \n", 337 | " \n", 338 | " \n", 339 | " \n", 340 | " \n", 341 | " \n", 342 | " \n", 343 | " \n", 344 | " \n", 345 | " \n", 346 | " \n", 347 | " \n", 348 | " \n", 349 | " \n", 350 | " \n", 351 | " \n", 352 | " \n", 353 | " \n", 354 | " \n", 355 | " \n", 356 | " \n", 357 | " \n", 358 | " \n", 359 | " \n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " \n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | "
idy1y2y3y4y5y6y7y8y9...y24y25y26y27y28y29y30y31y32y33
01000000000...0000000001
12000000000...0000000010
23001000000...0000000000
34000000000...0000000001
45000000000...0000000001
\n", 401 | "

5 rows × 34 columns

\n", 402 | "
" 403 | ], 404 | "text/plain": [ 405 | " id y1 y2 y3 y4 y5 y6 y7 y8 y9 ... y24 y25 y26 y27 y28 y29 \\\n", 406 | "0 1 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", 407 | "1 2 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", 408 | "2 3 0 0 1 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", 409 | "3 4 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", 410 | "4 5 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 \n", 411 | "\n", 412 | " y30 y31 y32 y33 \n", 413 | "0 0 0 0 1 \n", 414 | "1 0 0 1 0 \n", 415 | "2 0 0 0 0 \n", 416 | "3 0 0 0 1 \n", 417 | "4 0 0 0 1 \n", 418 | "\n", 419 | "[5 rows x 34 columns]" 420 | ] 421 | }, 422 | "execution_count": 5, 423 | "metadata": {}, 424 | "output_type": "execute_result" 425 | } 426 | ], 427 | "source": [ 428 | "labels.head()" 429 | ] 430 | }, 431 | { 432 | "cell_type": "code", 433 | "execution_count": 6, 434 | "metadata": { 435 | "collapsed": false 436 | }, 437 | "outputs": [ 438 | { 439 | "data": { 440 | "text/plain": [ 441 | "Index(['id', 'y1', 'y2', 'y3', 'y4', 'y5', 'y6', 'y7', 'y8', 'y9', 'y10',\n", 442 | " 'y11', 'y12', 'y13', 'y14', 'y15', 'y16', 'y17', 'y18', 'y19', 'y20',\n", 443 | " 'y21', 'y22', 'y23', 'y24', 'y25', 'y26', 'y27', 'y28', 'y29', 'y30',\n", 444 | " 'y31', 'y32', 'y33'],\n", 445 | " dtype='object')" 446 | ] 447 | }, 448 | "execution_count": 6, 449 | "metadata": {}, 450 | "output_type": "execute_result" 451 | } 452 | ], 453 | "source": [ 454 | "labels.columns" 455 | ] 456 | }, 457 | { 458 | "cell_type": "code", 459 | "execution_count": 7, 460 | "metadata": { 461 | "collapsed": false 462 | }, 463 | "outputs": [], 464 | "source": [ 465 | "train_sample[['id']] = range(1, 1001)" 466 | ] 467 | }, 468 | { 469 | "cell_type": "markdown", 470 | "metadata": {}, 471 | "source": [ 472 | "## Try to make something useful" 473 | ] 474 | }, 475 | { 476 | "cell_type": "code", 477 | "execution_count": 8, 478 | "metadata": { 479 | "collapsed": false 480 | }, 481 | "outputs": [], 482 | "source": [ 483 | "train = pd.merge(train_sample, labels, on = 'id')" 484 | ] 485 | }, 486 | { 487 | "cell_type": "code", 488 | "execution_count": 9, 489 | "metadata": { 490 | "collapsed": false 491 | }, 492 | "outputs": [ 493 | { 494 | "data": { 495 | "text/html": [ 496 | "
\n", 497 | "\n", 498 | " \n", 499 | " \n", 500 | " \n", 501 | " \n", 502 | " \n", 503 | " \n", 504 | " \n", 505 | " \n", 506 | " \n", 507 | " \n", 508 | " \n", 509 | " \n", 510 | " \n", 511 | " \n", 512 | " \n", 513 | " \n", 514 | " \n", 515 | " \n", 516 | " \n", 517 | " \n", 518 | " \n", 519 | " \n", 520 | " \n", 521 | " \n", 522 | " \n", 523 | " \n", 524 | " \n", 525 | " \n", 526 | " \n", 527 | " \n", 528 | " \n", 529 | " \n", 530 | " \n", 531 | " \n", 532 | " \n", 533 | " \n", 534 | " \n", 535 | " \n", 536 | " \n", 537 | " \n", 538 | " \n", 539 | " \n", 540 | " \n", 541 | " \n", 542 | " \n", 543 | " \n", 544 | " \n", 545 | " \n", 546 | " \n", 547 | " \n", 548 | " \n", 549 | " \n", 550 | " \n", 551 | " \n", 552 | " \n", 553 | " \n", 554 | " \n", 555 | " \n", 556 | " \n", 557 | " \n", 558 | " \n", 559 | " \n", 560 | " \n", 561 | " \n", 562 | " \n", 563 | " \n", 564 | " \n", 565 | " \n", 566 | " \n", 567 | " \n", 568 | " \n", 569 | " \n", 570 | " \n", 571 | " \n", 572 | " \n", 573 | " \n", 574 | " \n", 575 | " \n", 576 | " \n", 577 | " \n", 578 | " \n", 579 | " \n", 580 | " \n", 581 | " \n", 582 | " \n", 583 | " \n", 584 | " \n", 585 | " \n", 586 | " \n", 587 | " \n", 588 | " \n", 589 | " \n", 590 | " \n", 591 | " \n", 592 | " \n", 593 | " \n", 594 | " \n", 595 | " \n", 596 | " \n", 597 | " \n", 598 | " \n", 599 | " \n", 600 | " \n", 601 | " \n", 602 | " \n", 603 | " \n", 604 | " \n", 605 | " \n", 606 | " \n", 607 | " \n", 608 | " \n", 609 | " \n", 610 | " \n", 611 | " \n", 612 | " \n", 613 | " \n", 614 | " \n", 615 | " \n", 616 | " \n", 617 | " \n", 618 | " \n", 619 | " \n", 620 | " \n", 621 | " \n", 622 | " \n", 623 | " \n", 624 | " \n", 625 | " \n", 626 | " \n", 627 | " \n", 628 | " \n", 629 | " \n", 630 | " \n", 631 | " \n", 632 | " \n", 633 | " \n", 634 | " \n", 635 | " \n", 636 | " \n", 637 | " \n", 638 | " \n", 639 | " \n", 640 | " \n", 641 | " \n", 642 | " \n", 643 | " \n", 644 | " \n", 645 | " \n", 646 | "
idx1x2x3x4x5x6x7x8x9...y24y25y26y27y28y29y30y31y32y33
01YESNOI7K7j9mvUurktDbybGa8nYojS5TrOrQqvAandHsdjv8=YGCdISifn4fLao/ASKdZFhGIq23oqzfSbUVb6px1pig=0.6536980.0416840.9405730.0908510.873563...0000000001
12NONOcSuQaz0xx+UxAtskjMBN1xCeacDm/4oJYEIDFL3CMoU=vOPAlFJxrZoxaQht2ylUA2U0jUyFGxJF7iy/SNua2+U=1.2941180.0000001.0000000.0000000.468855...0000000010
23NONOVduR3ZHc2+rs/i34uA1VtOPTyOogJacJNc3mBuRRjIU=ZSznNzP7c1xuAbA4HWA+NnJ4UXhlkZckpXtvQW/EJPw=0.4570760.3184880.3600940.4444770.354545...0000000000
34NONOS7l8SI3WbSTbhCSCcNJBWCtNjh8fSqS3ZhPZ3X+EGGU=aZTF/lredyP4cukeN8bh6kpBjYmS1QFNpPOg2LVm3Lg=1.0858780.8748110.9398251.0547320.767586...0000000001
45NONOYKBNeCS2s8QQz1xy7Aes8Ina4f27Q022R7ggwOX58l0=6E1RoTs+Er+giZsKw158lVBRFEjPAoSaWCcPwdXuk6k=1.4147980.0000001.0000000.0000000.348653...0000000001
\n", 647 | "

5 rows × 179 columns

\n", 648 | "
" 649 | ], 650 | "text/plain": [ 651 | " id x1 x2 x3 \\\n", 652 | "0 1 YES NO I7K7j9mvUurktDbybGa8nYojS5TrOrQqvAandHsdjv8= \n", 653 | "1 2 NO NO cSuQaz0xx+UxAtskjMBN1xCeacDm/4oJYEIDFL3CMoU= \n", 654 | "2 3 NO NO VduR3ZHc2+rs/i34uA1VtOPTyOogJacJNc3mBuRRjIU= \n", 655 | "3 4 NO NO S7l8SI3WbSTbhCSCcNJBWCtNjh8fSqS3ZhPZ3X+EGGU= \n", 656 | "4 5 NO NO YKBNeCS2s8QQz1xy7Aes8Ina4f27Q022R7ggwOX58l0= \n", 657 | "\n", 658 | " x4 x5 x6 x7 \\\n", 659 | "0 YGCdISifn4fLao/ASKdZFhGIq23oqzfSbUVb6px1pig= 0.653698 0.041684 0.940573 \n", 660 | "1 vOPAlFJxrZoxaQht2ylUA2U0jUyFGxJF7iy/SNua2+U= 1.294118 0.000000 1.000000 \n", 661 | "2 ZSznNzP7c1xuAbA4HWA+NnJ4UXhlkZckpXtvQW/EJPw= 0.457076 0.318488 0.360094 \n", 662 | "3 aZTF/lredyP4cukeN8bh6kpBjYmS1QFNpPOg2LVm3Lg= 1.085878 0.874811 0.939825 \n", 663 | "4 6E1RoTs+Er+giZsKw158lVBRFEjPAoSaWCcPwdXuk6k= 1.414798 0.000000 1.000000 \n", 664 | "\n", 665 | " x8 x9 ... y24 y25 y26 y27 y28 y29 y30 y31 y32 y33 \n", 666 | "0 0.090851 0.873563 ... 0 0 0 0 0 0 0 0 0 1 \n", 667 | "1 0.000000 0.468855 ... 0 0 0 0 0 0 0 0 1 0 \n", 668 | "2 0.444477 0.354545 ... 0 0 0 0 0 0 0 0 0 0 \n", 669 | "3 1.054732 0.767586 ... 0 0 0 0 0 0 0 0 0 1 \n", 670 | "4 0.000000 0.348653 ... 0 0 0 0 0 0 0 0 0 1 \n", 671 | "\n", 672 | "[5 rows x 179 columns]" 673 | ] 674 | }, 675 | "execution_count": 9, 676 | "metadata": {}, 677 | "output_type": "execute_result" 678 | } 679 | ], 680 | "source": [ 681 | "train.head()" 682 | ] 683 | }, 684 | { 685 | "cell_type": "code", 686 | "execution_count": 10, 687 | "metadata": { 688 | "collapsed": false 689 | }, 690 | "outputs": [ 691 | { 692 | "data": { 693 | "text/plain": [ 694 | "Counter({'i': 1, 'x': 145, 'y': 33})" 695 | ] 696 | }, 697 | "execution_count": 10, 698 | "metadata": {}, 699 | "output_type": "execute_result" 700 | } 701 | ], 702 | "source": [ 703 | "from collections import Counter\n", 704 | "Counter([name[0] for name in train.columns])" 705 | ] 706 | }, 707 | { 708 | "cell_type": "code", 709 | "execution_count": 11, 710 | "metadata": { 711 | "collapsed": false 712 | }, 713 | "outputs": [ 714 | { 715 | "data": { 716 | "text/plain": [ 717 | "Index(['id', 'x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x9',\n", 718 | " ...\n", 719 | " 'y24', 'y25', 'y26', 'y27', 'y28', 'y29', 'y30', 'y31', 'y32', 'y33'],\n", 720 | " dtype='object', length=179)" 721 | ] 722 | }, 723 | "execution_count": 11, 724 | "metadata": {}, 725 | "output_type": "execute_result" 726 | } 727 | ], 728 | "source": [ 729 | "train.columns" 730 | ] 731 | }, 732 | { 733 | "cell_type": "markdown", 734 | "metadata": {}, 735 | "source": [ 736 | "### Categorical values encoding" 737 | ] 738 | }, 739 | { 740 | "cell_type": "code", 741 | "execution_count": 12, 742 | "metadata": { 743 | "collapsed": false 744 | }, 745 | "outputs": [], 746 | "source": [ 747 | "train.replace('YES', 1, inplace = True)\n", 748 | "train.replace('NO', 0, inplace = True)\n", 749 | "train.replace('nan', np.NaN, inplace = True)" 750 | ] 751 | }, 752 | { 753 | "cell_type": "code", 754 | "execution_count": 13, 755 | "metadata": { 756 | "collapsed": false 757 | }, 758 | "outputs": [ 759 | { 760 | "data": { 761 | "text/html": [ 762 | "
\n", 763 | "\n", 764 | " \n", 765 | " \n", 766 | " \n", 767 | " \n", 768 | " \n", 769 | " \n", 770 | " \n", 771 | " \n", 772 | " \n", 773 | " \n", 774 | " \n", 775 | " \n", 776 | " \n", 777 | " \n", 778 | " \n", 779 | " \n", 780 | " \n", 781 | " \n", 782 | " \n", 783 | " \n", 784 | " \n", 785 | " \n", 786 | " \n", 787 | " \n", 788 | " \n", 789 | " \n", 790 | " \n", 791 | " \n", 792 | " \n", 793 | " \n", 794 | " \n", 795 | " \n", 796 | " \n", 797 | " \n", 798 | " \n", 799 | " \n", 800 | " \n", 801 | " \n", 802 | " \n", 803 | " \n", 804 | " \n", 805 | " \n", 806 | " \n", 807 | " \n", 808 | " \n", 809 | " \n", 810 | " \n", 811 | " \n", 812 | " \n", 813 | " \n", 814 | " \n", 815 | " \n", 816 | " \n", 817 | " \n", 818 | " \n", 819 | " \n", 820 | " \n", 821 | " \n", 822 | " \n", 823 | " \n", 824 | " \n", 825 | " \n", 826 | " \n", 827 | " \n", 828 | " \n", 829 | " \n", 830 | " \n", 831 | " \n", 832 | " \n", 833 | " \n", 834 | " \n", 835 | " \n", 836 | " \n", 837 | " \n", 838 | " \n", 839 | " \n", 840 | " \n", 841 | " \n", 842 | " \n", 843 | " \n", 844 | " \n", 845 | " \n", 846 | " \n", 847 | " \n", 848 | " \n", 849 | " \n", 850 | " \n", 851 | " \n", 852 | " \n", 853 | " \n", 854 | " \n", 855 | " \n", 856 | " \n", 857 | " \n", 858 | " \n", 859 | " \n", 860 | " \n", 861 | " \n", 862 | " \n", 863 | " \n", 864 | " \n", 865 | " \n", 866 | " \n", 867 | " \n", 868 | " \n", 869 | " \n", 870 | " \n", 871 | " \n", 872 | " \n", 873 | " \n", 874 | " \n", 875 | " \n", 876 | " \n", 877 | " \n", 878 | " \n", 879 | " \n", 880 | " \n", 881 | " \n", 882 | " \n", 883 | " \n", 884 | " \n", 885 | " \n", 886 | " \n", 887 | " \n", 888 | " \n", 889 | " \n", 890 | " \n", 891 | " \n", 892 | " \n", 893 | " \n", 894 | " \n", 895 | " \n", 896 | " \n", 897 | " \n", 898 | " \n", 899 | " \n", 900 | " \n", 901 | " \n", 902 | " \n", 903 | " \n", 904 | " \n", 905 | " \n", 906 | " \n", 907 | " \n", 908 | " \n", 909 | " \n", 910 | " \n", 911 | " \n", 912 | "
idx1x2x3x4x5x6x7x8x9...y24y25y26y27y28y29y30y31y32y33
011.00.0I7K7j9mvUurktDbybGa8nYojS5TrOrQqvAandHsdjv8=YGCdISifn4fLao/ASKdZFhGIq23oqzfSbUVb6px1pig=0.6536980.0416840.9405730.0908510.873563...0000000001
120.00.0cSuQaz0xx+UxAtskjMBN1xCeacDm/4oJYEIDFL3CMoU=vOPAlFJxrZoxaQht2ylUA2U0jUyFGxJF7iy/SNua2+U=1.2941180.0000001.0000000.0000000.468855...0000000010
230.00.0VduR3ZHc2+rs/i34uA1VtOPTyOogJacJNc3mBuRRjIU=ZSznNzP7c1xuAbA4HWA+NnJ4UXhlkZckpXtvQW/EJPw=0.4570760.3184880.3600940.4444770.354545...0000000000
340.00.0S7l8SI3WbSTbhCSCcNJBWCtNjh8fSqS3ZhPZ3X+EGGU=aZTF/lredyP4cukeN8bh6kpBjYmS1QFNpPOg2LVm3Lg=1.0858780.8748110.9398251.0547320.767586...0000000001
450.00.0YKBNeCS2s8QQz1xy7Aes8Ina4f27Q022R7ggwOX58l0=6E1RoTs+Er+giZsKw158lVBRFEjPAoSaWCcPwdXuk6k=1.4147980.0000001.0000000.0000000.348653...0000000001
\n", 913 | "

5 rows × 179 columns

\n", 914 | "
" 915 | ], 916 | "text/plain": [ 917 | " id x1 x2 x3 \\\n", 918 | "0 1 1.0 0.0 I7K7j9mvUurktDbybGa8nYojS5TrOrQqvAandHsdjv8= \n", 919 | "1 2 0.0 0.0 cSuQaz0xx+UxAtskjMBN1xCeacDm/4oJYEIDFL3CMoU= \n", 920 | "2 3 0.0 0.0 VduR3ZHc2+rs/i34uA1VtOPTyOogJacJNc3mBuRRjIU= \n", 921 | "3 4 0.0 0.0 S7l8SI3WbSTbhCSCcNJBWCtNjh8fSqS3ZhPZ3X+EGGU= \n", 922 | "4 5 0.0 0.0 YKBNeCS2s8QQz1xy7Aes8Ina4f27Q022R7ggwOX58l0= \n", 923 | "\n", 924 | " x4 x5 x6 x7 \\\n", 925 | "0 YGCdISifn4fLao/ASKdZFhGIq23oqzfSbUVb6px1pig= 0.653698 0.041684 0.940573 \n", 926 | "1 vOPAlFJxrZoxaQht2ylUA2U0jUyFGxJF7iy/SNua2+U= 1.294118 0.000000 1.000000 \n", 927 | "2 ZSznNzP7c1xuAbA4HWA+NnJ4UXhlkZckpXtvQW/EJPw= 0.457076 0.318488 0.360094 \n", 928 | "3 aZTF/lredyP4cukeN8bh6kpBjYmS1QFNpPOg2LVm3Lg= 1.085878 0.874811 0.939825 \n", 929 | "4 6E1RoTs+Er+giZsKw158lVBRFEjPAoSaWCcPwdXuk6k= 1.414798 0.000000 1.000000 \n", 930 | "\n", 931 | " x8 x9 ... y24 y25 y26 y27 y28 y29 y30 y31 y32 y33 \n", 932 | "0 0.090851 0.873563 ... 0 0 0 0 0 0 0 0 0 1 \n", 933 | "1 0.000000 0.468855 ... 0 0 0 0 0 0 0 0 1 0 \n", 934 | "2 0.444477 0.354545 ... 0 0 0 0 0 0 0 0 0 0 \n", 935 | "3 1.054732 0.767586 ... 0 0 0 0 0 0 0 0 0 1 \n", 936 | "4 0.000000 0.348653 ... 0 0 0 0 0 0 0 0 0 1 \n", 937 | "\n", 938 | "[5 rows x 179 columns]" 939 | ] 940 | }, 941 | "execution_count": 13, 942 | "metadata": {}, 943 | "output_type": "execute_result" 944 | } 945 | ], 946 | "source": [ 947 | "train.head()" 948 | ] 949 | }, 950 | { 951 | "cell_type": "code", 952 | "execution_count": 26, 953 | "metadata": { 954 | "collapsed": false, 955 | "scrolled": false 956 | }, 957 | "outputs": [], 958 | "source": [ 959 | "names_categorical = []\n", 960 | "X_numerical = []\n", 961 | "\n", 962 | "for name in train.columns:\n", 963 | " if name.startswith('x'):\n", 964 | " # 找出每个列中最多的数据类型,因为每一列中可能会有str或数值类型的值\n", 965 | " column_type, _ = max(Counter(map(lambda x: str(type(x)), train[name])).items(), key = lambda x: x[1])\n", 966 | " if column_type == str(str):\n", 967 | " train[name] = train[name].apply(str)\n", 968 | " names_categorical.append(name)\n", 969 | " else:\n", 970 | " X_numerical.append(train[name].fillna(-999))" 971 | ] 972 | }, 973 | { 974 | "cell_type": "code", 975 | "execution_count": 39, 976 | "metadata": { 977 | "collapsed": false 978 | }, 979 | "outputs": [], 980 | "source": [ 981 | "vec = DictVectorizer()\n", 982 | "X_sparse = vec.fit_transform(train[names_categorical].T.to_dict().values())" 983 | ] 984 | }, 985 | { 986 | "cell_type": "code", 987 | "execution_count": 47, 988 | "metadata": { 989 | "collapsed": false 990 | }, 991 | "outputs": [], 992 | "source": [ 993 | "X_numerical = np.column_stack(X_numerical)\n", 994 | "X_numerical = np.nan_to_num(X_numerical)" 995 | ] 996 | }, 997 | { 998 | "cell_type": "code", 999 | "execution_count": 50, 1000 | "metadata": { 1001 | "collapsed": false 1002 | }, 1003 | "outputs": [ 1004 | { 1005 | "name": "stdout", 1006 | "output_type": "stream", 1007 | "text": [ 1008 | "(1000, 135)\n", 1009 | "(1000, 5305)\n" 1010 | ] 1011 | } 1012 | ], 1013 | "source": [ 1014 | "print(X_numerical.shape)\n", 1015 | "print(X_sparse.shape)" 1016 | ] 1017 | }, 1018 | { 1019 | "cell_type": "code", 1020 | "execution_count": 56, 1021 | "metadata": { 1022 | "collapsed": false 1023 | }, 1024 | "outputs": [], 1025 | "source": [ 1026 | "from sklearn.metrics import roc_auc_score, f1_score, log_loss, make_scorer\n", 1027 | "from sklearn.svm import LinearSVC\n", 1028 | "from sklearn.cross_validation import cross_val_score, train_test_split\n", 1029 | "from sklearn.ensemble import RandomForestClassifier" 1030 | ] 1031 | }, 1032 | { 1033 | "cell_type": "code", 1034 | "execution_count": 57, 1035 | "metadata": { 1036 | "collapsed": false 1037 | }, 1038 | "outputs": [], 1039 | "source": [ 1040 | "y_columns = [name for name in train.columns if name.startswith('y')]" 1041 | ] 1042 | }, 1043 | { 1044 | "cell_type": "code", 1045 | "execution_count": 60, 1046 | "metadata": { 1047 | "collapsed": false 1048 | }, 1049 | "outputs": [], 1050 | "source": [ 1051 | "X_numerical_base, X_numerical_meta, X_sparse_base, X_sparse_meta, y_base, y_meta = train_test_split(\n", 1052 | " X_numerical, \n", 1053 | " X_sparse, \n", 1054 | " train[y_columns].values,\n", 1055 | " test_size = 0.5\n", 1056 | ")" 1057 | ] 1058 | }, 1059 | { 1060 | "cell_type": "code", 1061 | "execution_count": 74, 1062 | "metadata": { 1063 | "collapsed": false 1064 | }, 1065 | "outputs": [ 1066 | { 1067 | "name": "stdout", 1068 | "output_type": "stream", 1069 | "text": [ 1070 | "start training\n", 1071 | "end training\n" 1072 | ] 1073 | } 1074 | ], 1075 | "source": [ 1076 | "X_meta = []\n", 1077 | "print('start training')\n", 1078 | "for i in range(y_base.shape[1]):\n", 1079 | " y = y_base[:, i]\n", 1080 | " if len(np.unique(y)) == 2:\n", 1081 | " rf = RandomForestClassifier(n_estimators = 10, n_jobs = -1)\n", 1082 | " rf.fit(X_numerical_base, y)\n", 1083 | " X_meta.append(rf.predict_proba(X_numerical_meta))\n", 1084 | " \n", 1085 | " svm = LinearSVC()\n", 1086 | " svm.fit(X_sparse_base, y)\n", 1087 | " X_meta.append(svm.decision_function(X_sparse_meta))\n", 1088 | "print('end training')" 1089 | ] 1090 | }, 1091 | { 1092 | "cell_type": "code", 1093 | "execution_count": 83, 1094 | "metadata": { 1095 | "collapsed": false 1096 | }, 1097 | "outputs": [ 1098 | { 1099 | "name": "stdout", 1100 | "output_type": "stream", 1101 | "text": [ 1102 | "(500, 75)\n" 1103 | ] 1104 | } 1105 | ], 1106 | "source": [ 1107 | "X_meta = np.column_stack(X_meta)\n", 1108 | "print(X_meta.shape)" 1109 | ] 1110 | } 1111 | ], 1112 | "metadata": { 1113 | "kernelspec": { 1114 | "display_name": "Python 3", 1115 | "language": "python", 1116 | "name": "python3" 1117 | }, 1118 | "language_info": { 1119 | "codemirror_mode": { 1120 | "name": "ipython", 1121 | "version": 3 1122 | }, 1123 | "file_extension": ".py", 1124 | "mimetype": "text/x-python", 1125 | "name": "python", 1126 | "nbconvert_exporter": "python", 1127 | "pygments_lexer": "ipython3", 1128 | "version": "3.5.2" 1129 | } 1130 | }, 1131 | "nbformat": 4, 1132 | "nbformat_minor": 0 1133 | } 1134 | -------------------------------------------------------------------------------- /csdn/README.md: -------------------------------------------------------------------------------- 1 | # 介绍 2 | 3 | 这个目录中的jupyter notebook都是对应我csdn博客文章的代码。每个notebook中会有相应代码的解释,但是细节我都会放在博客文章当中。 4 | 5 | # csdn文章与notebook相应的链接 6 | 7 | ## Logistic Regression、Linear Discriminant Analysis、Shrinkage Methods(Ridge Regression and Lasso) 8 | 9 | [文章](http://blog.csdn.net/xlinsist/article/details/52211334) 10 | 11 | [notebook](http://nbviewer.jupyter.org/github/hanxlinsist/jupyter_hub/blob/master/csdn/CSDN-52211334.ipynb) 12 | 13 | [Default.csv](https://github.com/hanxlinsist/jupyter_hub/blob/master/csdn/datasets/Default.csv) 14 | 15 | [processed.cleveland.csv](https://github.com/hanxlinsist/jupyter_hub/blob/master/csdn/datasets/processed.cleveland.csv) 16 | -------------------------------------------------------------------------------- /csdn/datasets/processed.cleveland.csv: -------------------------------------------------------------------------------- 1 | 63.0,1.0,1.0,145.0,233.0,1.0,2.0,150.0,0.0,2.3,3.0,0.0,6.0,0 2 | 67.0,1.0,4.0,160.0,286.0,0.0,2.0,108.0,1.0,1.5,2.0,3.0,3.0,2 3 | 67.0,1.0,4.0,120.0,229.0,0.0,2.0,129.0,1.0,2.6,2.0,2.0,7.0,1 4 | 37.0,1.0,3.0,130.0,250.0,0.0,0.0,187.0,0.0,3.5,3.0,0.0,3.0,0 5 | 41.0,0.0,2.0,130.0,204.0,0.0,2.0,172.0,0.0,1.4,1.0,0.0,3.0,0 6 | 56.0,1.0,2.0,120.0,236.0,0.0,0.0,178.0,0.0,0.8,1.0,0.0,3.0,0 7 | 62.0,0.0,4.0,140.0,268.0,0.0,2.0,160.0,0.0,3.6,3.0,2.0,3.0,3 8 | 57.0,0.0,4.0,120.0,354.0,0.0,0.0,163.0,1.0,0.6,1.0,0.0,3.0,0 9 | 63.0,1.0,4.0,130.0,254.0,0.0,2.0,147.0,0.0,1.4,2.0,1.0,7.0,2 10 | 53.0,1.0,4.0,140.0,203.0,1.0,2.0,155.0,1.0,3.1,3.0,0.0,7.0,1 11 | 57.0,1.0,4.0,140.0,192.0,0.0,0.0,148.0,0.0,0.4,2.0,0.0,6.0,0 12 | 56.0,0.0,2.0,140.0,294.0,0.0,2.0,153.0,0.0,1.3,2.0,0.0,3.0,0 13 | 56.0,1.0,3.0,130.0,256.0,1.0,2.0,142.0,1.0,0.6,2.0,1.0,6.0,2 14 | 44.0,1.0,2.0,120.0,263.0,0.0,0.0,173.0,0.0,0.0,1.0,0.0,7.0,0 15 | 52.0,1.0,3.0,172.0,199.0,1.0,0.0,162.0,0.0,0.5,1.0,0.0,7.0,0 16 | 57.0,1.0,3.0,150.0,168.0,0.0,0.0,174.0,0.0,1.6,1.0,0.0,3.0,0 17 | 48.0,1.0,2.0,110.0,229.0,0.0,0.0,168.0,0.0,1.0,3.0,0.0,7.0,1 18 | 54.0,1.0,4.0,140.0,239.0,0.0,0.0,160.0,0.0,1.2,1.0,0.0,3.0,0 19 | 48.0,0.0,3.0,130.0,275.0,0.0,0.0,139.0,0.0,0.2,1.0,0.0,3.0,0 20 | 49.0,1.0,2.0,130.0,266.0,0.0,0.0,171.0,0.0,0.6,1.0,0.0,3.0,0 21 | 64.0,1.0,1.0,110.0,211.0,0.0,2.0,144.0,1.0,1.8,2.0,0.0,3.0,0 22 | 58.0,0.0,1.0,150.0,283.0,1.0,2.0,162.0,0.0,1.0,1.0,0.0,3.0,0 23 | 58.0,1.0,2.0,120.0,284.0,0.0,2.0,160.0,0.0,1.8,2.0,0.0,3.0,1 24 | 58.0,1.0,3.0,132.0,224.0,0.0,2.0,173.0,0.0,3.2,1.0,2.0,7.0,3 25 | 60.0,1.0,4.0,130.0,206.0,0.0,2.0,132.0,1.0,2.4,2.0,2.0,7.0,4 26 | 50.0,0.0,3.0,120.0,219.0,0.0,0.0,158.0,0.0,1.6,2.0,0.0,3.0,0 27 | 58.0,0.0,3.0,120.0,340.0,0.0,0.0,172.0,0.0,0.0,1.0,0.0,3.0,0 28 | 66.0,0.0,1.0,150.0,226.0,0.0,0.0,114.0,0.0,2.6,3.0,0.0,3.0,0 29 | 43.0,1.0,4.0,150.0,247.0,0.0,0.0,171.0,0.0,1.5,1.0,0.0,3.0,0 30 | 40.0,1.0,4.0,110.0,167.0,0.0,2.0,114.0,1.0,2.0,2.0,0.0,7.0,3 31 | 69.0,0.0,1.0,140.0,239.0,0.0,0.0,151.0,0.0,1.8,1.0,2.0,3.0,0 32 | 60.0,1.0,4.0,117.0,230.0,1.0,0.0,160.0,1.0,1.4,1.0,2.0,7.0,2 33 | 64.0,1.0,3.0,140.0,335.0,0.0,0.0,158.0,0.0,0.0,1.0,0.0,3.0,1 34 | 59.0,1.0,4.0,135.0,234.0,0.0,0.0,161.0,0.0,0.5,2.0,0.0,7.0,0 35 | 44.0,1.0,3.0,130.0,233.0,0.0,0.0,179.0,1.0,0.4,1.0,0.0,3.0,0 36 | 42.0,1.0,4.0,140.0,226.0,0.0,0.0,178.0,0.0,0.0,1.0,0.0,3.0,0 37 | 43.0,1.0,4.0,120.0,177.0,0.0,2.0,120.0,1.0,2.5,2.0,0.0,7.0,3 38 | 57.0,1.0,4.0,150.0,276.0,0.0,2.0,112.0,1.0,0.6,2.0,1.0,6.0,1 39 | 55.0,1.0,4.0,132.0,353.0,0.0,0.0,132.0,1.0,1.2,2.0,1.0,7.0,3 40 | 61.0,1.0,3.0,150.0,243.0,1.0,0.0,137.0,1.0,1.0,2.0,0.0,3.0,0 41 | 65.0,0.0,4.0,150.0,225.0,0.0,2.0,114.0,0.0,1.0,2.0,3.0,7.0,4 42 | 40.0,1.0,1.0,140.0,199.0,0.0,0.0,178.0,1.0,1.4,1.0,0.0,7.0,0 43 | 71.0,0.0,2.0,160.0,302.0,0.0,0.0,162.0,0.0,0.4,1.0,2.0,3.0,0 44 | 59.0,1.0,3.0,150.0,212.0,1.0,0.0,157.0,0.0,1.6,1.0,0.0,3.0,0 45 | 61.0,0.0,4.0,130.0,330.0,0.0,2.0,169.0,0.0,0.0,1.0,0.0,3.0,1 46 | 58.0,1.0,3.0,112.0,230.0,0.0,2.0,165.0,0.0,2.5,2.0,1.0,7.0,4 47 | 51.0,1.0,3.0,110.0,175.0,0.0,0.0,123.0,0.0,0.6,1.0,0.0,3.0,0 48 | 50.0,1.0,4.0,150.0,243.0,0.0,2.0,128.0,0.0,2.6,2.0,0.0,7.0,4 49 | 65.0,0.0,3.0,140.0,417.0,1.0,2.0,157.0,0.0,0.8,1.0,1.0,3.0,0 50 | 53.0,1.0,3.0,130.0,197.0,1.0,2.0,152.0,0.0,1.2,3.0,0.0,3.0,0 51 | 41.0,0.0,2.0,105.0,198.0,0.0,0.0,168.0,0.0,0.0,1.0,1.0,3.0,0 52 | 65.0,1.0,4.0,120.0,177.0,0.0,0.0,140.0,0.0,0.4,1.0,0.0,7.0,0 53 | 44.0,1.0,4.0,112.0,290.0,0.0,2.0,153.0,0.0,0.0,1.0,1.0,3.0,2 54 | 44.0,1.0,2.0,130.0,219.0,0.0,2.0,188.0,0.0,0.0,1.0,0.0,3.0,0 55 | 60.0,1.0,4.0,130.0,253.0,0.0,0.0,144.0,1.0,1.4,1.0,1.0,7.0,1 56 | 54.0,1.0,4.0,124.0,266.0,0.0,2.0,109.0,1.0,2.2,2.0,1.0,7.0,1 57 | 50.0,1.0,3.0,140.0,233.0,0.0,0.0,163.0,0.0,0.6,2.0,1.0,7.0,1 58 | 41.0,1.0,4.0,110.0,172.0,0.0,2.0,158.0,0.0,0.0,1.0,0.0,7.0,1 59 | 54.0,1.0,3.0,125.0,273.0,0.0,2.0,152.0,0.0,0.5,3.0,1.0,3.0,0 60 | 51.0,1.0,1.0,125.0,213.0,0.0,2.0,125.0,1.0,1.4,1.0,1.0,3.0,0 61 | 51.0,0.0,4.0,130.0,305.0,0.0,0.0,142.0,1.0,1.2,2.0,0.0,7.0,2 62 | 46.0,0.0,3.0,142.0,177.0,0.0,2.0,160.0,1.0,1.4,3.0,0.0,3.0,0 63 | 58.0,1.0,4.0,128.0,216.0,0.0,2.0,131.0,1.0,2.2,2.0,3.0,7.0,1 64 | 54.0,0.0,3.0,135.0,304.0,1.0,0.0,170.0,0.0,0.0,1.0,0.0,3.0,0 65 | 54.0,1.0,4.0,120.0,188.0,0.0,0.0,113.0,0.0,1.4,2.0,1.0,7.0,2 66 | 60.0,1.0,4.0,145.0,282.0,0.0,2.0,142.0,1.0,2.8,2.0,2.0,7.0,2 67 | 60.0,1.0,3.0,140.0,185.0,0.0,2.0,155.0,0.0,3.0,2.0,0.0,3.0,1 68 | 54.0,1.0,3.0,150.0,232.0,0.0,2.0,165.0,0.0,1.6,1.0,0.0,7.0,0 69 | 59.0,1.0,4.0,170.0,326.0,0.0,2.0,140.0,1.0,3.4,3.0,0.0,7.0,2 70 | 46.0,1.0,3.0,150.0,231.0,0.0,0.0,147.0,0.0,3.6,2.0,0.0,3.0,1 71 | 65.0,0.0,3.0,155.0,269.0,0.0,0.0,148.0,0.0,0.8,1.0,0.0,3.0,0 72 | 67.0,1.0,4.0,125.0,254.0,1.0,0.0,163.0,0.0,0.2,2.0,2.0,7.0,3 73 | 62.0,1.0,4.0,120.0,267.0,0.0,0.0,99.0,1.0,1.8,2.0,2.0,7.0,1 74 | 65.0,1.0,4.0,110.0,248.0,0.0,2.0,158.0,0.0,0.6,1.0,2.0,6.0,1 75 | 44.0,1.0,4.0,110.0,197.0,0.0,2.0,177.0,0.0,0.0,1.0,1.0,3.0,1 76 | 65.0,0.0,3.0,160.0,360.0,0.0,2.0,151.0,0.0,0.8,1.0,0.0,3.0,0 77 | 60.0,1.0,4.0,125.0,258.0,0.0,2.0,141.0,1.0,2.8,2.0,1.0,7.0,1 78 | 51.0,0.0,3.0,140.0,308.0,0.0,2.0,142.0,0.0,1.5,1.0,1.0,3.0,0 79 | 48.0,1.0,2.0,130.0,245.0,0.0,2.0,180.0,0.0,0.2,2.0,0.0,3.0,0 80 | 58.0,1.0,4.0,150.0,270.0,0.0,2.0,111.0,1.0,0.8,1.0,0.0,7.0,3 81 | 45.0,1.0,4.0,104.0,208.0,0.0,2.0,148.0,1.0,3.0,2.0,0.0,3.0,0 82 | 53.0,0.0,4.0,130.0,264.0,0.0,2.0,143.0,0.0,0.4,2.0,0.0,3.0,0 83 | 39.0,1.0,3.0,140.0,321.0,0.0,2.0,182.0,0.0,0.0,1.0,0.0,3.0,0 84 | 68.0,1.0,3.0,180.0,274.0,1.0,2.0,150.0,1.0,1.6,2.0,0.0,7.0,3 85 | 52.0,1.0,2.0,120.0,325.0,0.0,0.0,172.0,0.0,0.2,1.0,0.0,3.0,0 86 | 44.0,1.0,3.0,140.0,235.0,0.0,2.0,180.0,0.0,0.0,1.0,0.0,3.0,0 87 | 47.0,1.0,3.0,138.0,257.0,0.0,2.0,156.0,0.0,0.0,1.0,0.0,3.0,0 88 | 53.0,0.0,3.0,128.0,216.0,0.0,2.0,115.0,0.0,0.0,1.0,0.0,?,0 89 | 53.0,0.0,4.0,138.0,234.0,0.0,2.0,160.0,0.0,0.0,1.0,0.0,3.0,0 90 | 51.0,0.0,3.0,130.0,256.0,0.0,2.0,149.0,0.0,0.5,1.0,0.0,3.0,0 91 | 66.0,1.0,4.0,120.0,302.0,0.0,2.0,151.0,0.0,0.4,2.0,0.0,3.0,0 92 | 62.0,0.0,4.0,160.0,164.0,0.0,2.0,145.0,0.0,6.2,3.0,3.0,7.0,3 93 | 62.0,1.0,3.0,130.0,231.0,0.0,0.0,146.0,0.0,1.8,2.0,3.0,7.0,0 94 | 44.0,0.0,3.0,108.0,141.0,0.0,0.0,175.0,0.0,0.6,2.0,0.0,3.0,0 95 | 63.0,0.0,3.0,135.0,252.0,0.0,2.0,172.0,0.0,0.0,1.0,0.0,3.0,0 96 | 52.0,1.0,4.0,128.0,255.0,0.0,0.0,161.0,1.0,0.0,1.0,1.0,7.0,1 97 | 59.0,1.0,4.0,110.0,239.0,0.0,2.0,142.0,1.0,1.2,2.0,1.0,7.0,2 98 | 60.0,0.0,4.0,150.0,258.0,0.0,2.0,157.0,0.0,2.6,2.0,2.0,7.0,3 99 | 52.0,1.0,2.0,134.0,201.0,0.0,0.0,158.0,0.0,0.8,1.0,1.0,3.0,0 100 | 48.0,1.0,4.0,122.0,222.0,0.0,2.0,186.0,0.0,0.0,1.0,0.0,3.0,0 101 | 45.0,1.0,4.0,115.0,260.0,0.0,2.0,185.0,0.0,0.0,1.0,0.0,3.0,0 102 | 34.0,1.0,1.0,118.0,182.0,0.0,2.0,174.0,0.0,0.0,1.0,0.0,3.0,0 103 | 57.0,0.0,4.0,128.0,303.0,0.0,2.0,159.0,0.0,0.0,1.0,1.0,3.0,0 104 | 71.0,0.0,3.0,110.0,265.0,1.0,2.0,130.0,0.0,0.0,1.0,1.0,3.0,0 105 | 49.0,1.0,3.0,120.0,188.0,0.0,0.0,139.0,0.0,2.0,2.0,3.0,7.0,3 106 | 54.0,1.0,2.0,108.0,309.0,0.0,0.0,156.0,0.0,0.0,1.0,0.0,7.0,0 107 | 59.0,1.0,4.0,140.0,177.0,0.0,0.0,162.0,1.0,0.0,1.0,1.0,7.0,2 108 | 57.0,1.0,3.0,128.0,229.0,0.0,2.0,150.0,0.0,0.4,2.0,1.0,7.0,1 109 | 61.0,1.0,4.0,120.0,260.0,0.0,0.0,140.0,1.0,3.6,2.0,1.0,7.0,2 110 | 39.0,1.0,4.0,118.0,219.0,0.0,0.0,140.0,0.0,1.2,2.0,0.0,7.0,3 111 | 61.0,0.0,4.0,145.0,307.0,0.0,2.0,146.0,1.0,1.0,2.0,0.0,7.0,1 112 | 56.0,1.0,4.0,125.0,249.0,1.0,2.0,144.0,1.0,1.2,2.0,1.0,3.0,1 113 | 52.0,1.0,1.0,118.0,186.0,0.0,2.0,190.0,0.0,0.0,2.0,0.0,6.0,0 114 | 43.0,0.0,4.0,132.0,341.0,1.0,2.0,136.0,1.0,3.0,2.0,0.0,7.0,2 115 | 62.0,0.0,3.0,130.0,263.0,0.0,0.0,97.0,0.0,1.2,2.0,1.0,7.0,2 116 | 41.0,1.0,2.0,135.0,203.0,0.0,0.0,132.0,0.0,0.0,2.0,0.0,6.0,0 117 | 58.0,1.0,3.0,140.0,211.0,1.0,2.0,165.0,0.0,0.0,1.0,0.0,3.0,0 118 | 35.0,0.0,4.0,138.0,183.0,0.0,0.0,182.0,0.0,1.4,1.0,0.0,3.0,0 119 | 63.0,1.0,4.0,130.0,330.0,1.0,2.0,132.0,1.0,1.8,1.0,3.0,7.0,3 120 | 65.0,1.0,4.0,135.0,254.0,0.0,2.0,127.0,0.0,2.8,2.0,1.0,7.0,2 121 | 48.0,1.0,4.0,130.0,256.0,1.0,2.0,150.0,1.0,0.0,1.0,2.0,7.0,3 122 | 63.0,0.0,4.0,150.0,407.0,0.0,2.0,154.0,0.0,4.0,2.0,3.0,7.0,4 123 | 51.0,1.0,3.0,100.0,222.0,0.0,0.0,143.0,1.0,1.2,2.0,0.0,3.0,0 124 | 55.0,1.0,4.0,140.0,217.0,0.0,0.0,111.0,1.0,5.6,3.0,0.0,7.0,3 125 | 65.0,1.0,1.0,138.0,282.0,1.0,2.0,174.0,0.0,1.4,2.0,1.0,3.0,1 126 | 45.0,0.0,2.0,130.0,234.0,0.0,2.0,175.0,0.0,0.6,2.0,0.0,3.0,0 127 | 56.0,0.0,4.0,200.0,288.0,1.0,2.0,133.0,1.0,4.0,3.0,2.0,7.0,3 128 | 54.0,1.0,4.0,110.0,239.0,0.0,0.0,126.0,1.0,2.8,2.0,1.0,7.0,3 129 | 44.0,1.0,2.0,120.0,220.0,0.0,0.0,170.0,0.0,0.0,1.0,0.0,3.0,0 130 | 62.0,0.0,4.0,124.0,209.0,0.0,0.0,163.0,0.0,0.0,1.0,0.0,3.0,0 131 | 54.0,1.0,3.0,120.0,258.0,0.0,2.0,147.0,0.0,0.4,2.0,0.0,7.0,0 132 | 51.0,1.0,3.0,94.0,227.0,0.0,0.0,154.0,1.0,0.0,1.0,1.0,7.0,0 133 | 29.0,1.0,2.0,130.0,204.0,0.0,2.0,202.0,0.0,0.0,1.0,0.0,3.0,0 134 | 51.0,1.0,4.0,140.0,261.0,0.0,2.0,186.0,1.0,0.0,1.0,0.0,3.0,0 135 | 43.0,0.0,3.0,122.0,213.0,0.0,0.0,165.0,0.0,0.2,2.0,0.0,3.0,0 136 | 55.0,0.0,2.0,135.0,250.0,0.0,2.0,161.0,0.0,1.4,2.0,0.0,3.0,0 137 | 70.0,1.0,4.0,145.0,174.0,0.0,0.0,125.0,1.0,2.6,3.0,0.0,7.0,4 138 | 62.0,1.0,2.0,120.0,281.0,0.0,2.0,103.0,0.0,1.4,2.0,1.0,7.0,3 139 | 35.0,1.0,4.0,120.0,198.0,0.0,0.0,130.0,1.0,1.6,2.0,0.0,7.0,1 140 | 51.0,1.0,3.0,125.0,245.0,1.0,2.0,166.0,0.0,2.4,2.0,0.0,3.0,0 141 | 59.0,1.0,2.0,140.0,221.0,0.0,0.0,164.0,1.0,0.0,1.0,0.0,3.0,0 142 | 59.0,1.0,1.0,170.0,288.0,0.0,2.0,159.0,0.0,0.2,2.0,0.0,7.0,1 143 | 52.0,1.0,2.0,128.0,205.0,1.0,0.0,184.0,0.0,0.0,1.0,0.0,3.0,0 144 | 64.0,1.0,3.0,125.0,309.0,0.0,0.0,131.0,1.0,1.8,2.0,0.0,7.0,1 145 | 58.0,1.0,3.0,105.0,240.0,0.0,2.0,154.0,1.0,0.6,2.0,0.0,7.0,0 146 | 47.0,1.0,3.0,108.0,243.0,0.0,0.0,152.0,0.0,0.0,1.0,0.0,3.0,1 147 | 57.0,1.0,4.0,165.0,289.0,1.0,2.0,124.0,0.0,1.0,2.0,3.0,7.0,4 148 | 41.0,1.0,3.0,112.0,250.0,0.0,0.0,179.0,0.0,0.0,1.0,0.0,3.0,0 149 | 45.0,1.0,2.0,128.0,308.0,0.0,2.0,170.0,0.0,0.0,1.0,0.0,3.0,0 150 | 60.0,0.0,3.0,102.0,318.0,0.0,0.0,160.0,0.0,0.0,1.0,1.0,3.0,0 151 | 52.0,1.0,1.0,152.0,298.0,1.0,0.0,178.0,0.0,1.2,2.0,0.0,7.0,0 152 | 42.0,0.0,4.0,102.0,265.0,0.0,2.0,122.0,0.0,0.6,2.0,0.0,3.0,0 153 | 67.0,0.0,3.0,115.0,564.0,0.0,2.0,160.0,0.0,1.6,2.0,0.0,7.0,0 154 | 55.0,1.0,4.0,160.0,289.0,0.0,2.0,145.0,1.0,0.8,2.0,1.0,7.0,4 155 | 64.0,1.0,4.0,120.0,246.0,0.0,2.0,96.0,1.0,2.2,3.0,1.0,3.0,3 156 | 70.0,1.0,4.0,130.0,322.0,0.0,2.0,109.0,0.0,2.4,2.0,3.0,3.0,1 157 | 51.0,1.0,4.0,140.0,299.0,0.0,0.0,173.0,1.0,1.6,1.0,0.0,7.0,1 158 | 58.0,1.0,4.0,125.0,300.0,0.0,2.0,171.0,0.0,0.0,1.0,2.0,7.0,1 159 | 60.0,1.0,4.0,140.0,293.0,0.0,2.0,170.0,0.0,1.2,2.0,2.0,7.0,2 160 | 68.0,1.0,3.0,118.0,277.0,0.0,0.0,151.0,0.0,1.0,1.0,1.0,7.0,0 161 | 46.0,1.0,2.0,101.0,197.0,1.0,0.0,156.0,0.0,0.0,1.0,0.0,7.0,0 162 | 77.0,1.0,4.0,125.0,304.0,0.0,2.0,162.0,1.0,0.0,1.0,3.0,3.0,4 163 | 54.0,0.0,3.0,110.0,214.0,0.0,0.0,158.0,0.0,1.6,2.0,0.0,3.0,0 164 | 58.0,0.0,4.0,100.0,248.0,0.0,2.0,122.0,0.0,1.0,2.0,0.0,3.0,0 165 | 48.0,1.0,3.0,124.0,255.0,1.0,0.0,175.0,0.0,0.0,1.0,2.0,3.0,0 166 | 57.0,1.0,4.0,132.0,207.0,0.0,0.0,168.0,1.0,0.0,1.0,0.0,7.0,0 167 | 52.0,1.0,3.0,138.0,223.0,0.0,0.0,169.0,0.0,0.0,1.0,?,3.0,0 168 | 54.0,0.0,2.0,132.0,288.0,1.0,2.0,159.0,1.0,0.0,1.0,1.0,3.0,0 169 | 35.0,1.0,4.0,126.0,282.0,0.0,2.0,156.0,1.0,0.0,1.0,0.0,7.0,1 170 | 45.0,0.0,2.0,112.0,160.0,0.0,0.0,138.0,0.0,0.0,2.0,0.0,3.0,0 171 | 70.0,1.0,3.0,160.0,269.0,0.0,0.0,112.0,1.0,2.9,2.0,1.0,7.0,3 172 | 53.0,1.0,4.0,142.0,226.0,0.0,2.0,111.0,1.0,0.0,1.0,0.0,7.0,0 173 | 59.0,0.0,4.0,174.0,249.0,0.0,0.0,143.0,1.0,0.0,2.0,0.0,3.0,1 174 | 62.0,0.0,4.0,140.0,394.0,0.0,2.0,157.0,0.0,1.2,2.0,0.0,3.0,0 175 | 64.0,1.0,4.0,145.0,212.0,0.0,2.0,132.0,0.0,2.0,2.0,2.0,6.0,4 176 | 57.0,1.0,4.0,152.0,274.0,0.0,0.0,88.0,1.0,1.2,2.0,1.0,7.0,1 177 | 52.0,1.0,4.0,108.0,233.0,1.0,0.0,147.0,0.0,0.1,1.0,3.0,7.0,0 178 | 56.0,1.0,4.0,132.0,184.0,0.0,2.0,105.0,1.0,2.1,2.0,1.0,6.0,1 179 | 43.0,1.0,3.0,130.0,315.0,0.0,0.0,162.0,0.0,1.9,1.0,1.0,3.0,0 180 | 53.0,1.0,3.0,130.0,246.0,1.0,2.0,173.0,0.0,0.0,1.0,3.0,3.0,0 181 | 48.0,1.0,4.0,124.0,274.0,0.0,2.0,166.0,0.0,0.5,2.0,0.0,7.0,3 182 | 56.0,0.0,4.0,134.0,409.0,0.0,2.0,150.0,1.0,1.9,2.0,2.0,7.0,2 183 | 42.0,1.0,1.0,148.0,244.0,0.0,2.0,178.0,0.0,0.8,1.0,2.0,3.0,0 184 | 59.0,1.0,1.0,178.0,270.0,0.0,2.0,145.0,0.0,4.2,3.0,0.0,7.0,0 185 | 60.0,0.0,4.0,158.0,305.0,0.0,2.0,161.0,0.0,0.0,1.0,0.0,3.0,1 186 | 63.0,0.0,2.0,140.0,195.0,0.0,0.0,179.0,0.0,0.0,1.0,2.0,3.0,0 187 | 42.0,1.0,3.0,120.0,240.0,1.0,0.0,194.0,0.0,0.8,3.0,0.0,7.0,0 188 | 66.0,1.0,2.0,160.0,246.0,0.0,0.0,120.0,1.0,0.0,2.0,3.0,6.0,2 189 | 54.0,1.0,2.0,192.0,283.0,0.0,2.0,195.0,0.0,0.0,1.0,1.0,7.0,1 190 | 69.0,1.0,3.0,140.0,254.0,0.0,2.0,146.0,0.0,2.0,2.0,3.0,7.0,2 191 | 50.0,1.0,3.0,129.0,196.0,0.0,0.0,163.0,0.0,0.0,1.0,0.0,3.0,0 192 | 51.0,1.0,4.0,140.0,298.0,0.0,0.0,122.0,1.0,4.2,2.0,3.0,7.0,3 193 | 43.0,1.0,4.0,132.0,247.0,1.0,2.0,143.0,1.0,0.1,2.0,?,7.0,1 194 | 62.0,0.0,4.0,138.0,294.0,1.0,0.0,106.0,0.0,1.9,2.0,3.0,3.0,2 195 | 68.0,0.0,3.0,120.0,211.0,0.0,2.0,115.0,0.0,1.5,2.0,0.0,3.0,0 196 | 67.0,1.0,4.0,100.0,299.0,0.0,2.0,125.0,1.0,0.9,2.0,2.0,3.0,3 197 | 69.0,1.0,1.0,160.0,234.0,1.0,2.0,131.0,0.0,0.1,2.0,1.0,3.0,0 198 | 45.0,0.0,4.0,138.0,236.0,0.0,2.0,152.0,1.0,0.2,2.0,0.0,3.0,0 199 | 50.0,0.0,2.0,120.0,244.0,0.0,0.0,162.0,0.0,1.1,1.0,0.0,3.0,0 200 | 59.0,1.0,1.0,160.0,273.0,0.0,2.0,125.0,0.0,0.0,1.0,0.0,3.0,1 201 | 50.0,0.0,4.0,110.0,254.0,0.0,2.0,159.0,0.0,0.0,1.0,0.0,3.0,0 202 | 64.0,0.0,4.0,180.0,325.0,0.0,0.0,154.0,1.0,0.0,1.0,0.0,3.0,0 203 | 57.0,1.0,3.0,150.0,126.0,1.0,0.0,173.0,0.0,0.2,1.0,1.0,7.0,0 204 | 64.0,0.0,3.0,140.0,313.0,0.0,0.0,133.0,0.0,0.2,1.0,0.0,7.0,0 205 | 43.0,1.0,4.0,110.0,211.0,0.0,0.0,161.0,0.0,0.0,1.0,0.0,7.0,0 206 | 45.0,1.0,4.0,142.0,309.0,0.0,2.0,147.0,1.0,0.0,2.0,3.0,7.0,3 207 | 58.0,1.0,4.0,128.0,259.0,0.0,2.0,130.0,1.0,3.0,2.0,2.0,7.0,3 208 | 50.0,1.0,4.0,144.0,200.0,0.0,2.0,126.0,1.0,0.9,2.0,0.0,7.0,3 209 | 55.0,1.0,2.0,130.0,262.0,0.0,0.0,155.0,0.0,0.0,1.0,0.0,3.0,0 210 | 62.0,0.0,4.0,150.0,244.0,0.0,0.0,154.0,1.0,1.4,2.0,0.0,3.0,1 211 | 37.0,0.0,3.0,120.0,215.0,0.0,0.0,170.0,0.0,0.0,1.0,0.0,3.0,0 212 | 38.0,1.0,1.0,120.0,231.0,0.0,0.0,182.0,1.0,3.8,2.0,0.0,7.0,4 213 | 41.0,1.0,3.0,130.0,214.0,0.0,2.0,168.0,0.0,2.0,2.0,0.0,3.0,0 214 | 66.0,0.0,4.0,178.0,228.0,1.0,0.0,165.0,1.0,1.0,2.0,2.0,7.0,3 215 | 52.0,1.0,4.0,112.0,230.0,0.0,0.0,160.0,0.0,0.0,1.0,1.0,3.0,1 216 | 56.0,1.0,1.0,120.0,193.0,0.0,2.0,162.0,0.0,1.9,2.0,0.0,7.0,0 217 | 46.0,0.0,2.0,105.0,204.0,0.0,0.0,172.0,0.0,0.0,1.0,0.0,3.0,0 218 | 46.0,0.0,4.0,138.0,243.0,0.0,2.0,152.0,1.0,0.0,2.0,0.0,3.0,0 219 | 64.0,0.0,4.0,130.0,303.0,0.0,0.0,122.0,0.0,2.0,2.0,2.0,3.0,0 220 | 59.0,1.0,4.0,138.0,271.0,0.0,2.0,182.0,0.0,0.0,1.0,0.0,3.0,0 221 | 41.0,0.0,3.0,112.0,268.0,0.0,2.0,172.0,1.0,0.0,1.0,0.0,3.0,0 222 | 54.0,0.0,3.0,108.0,267.0,0.0,2.0,167.0,0.0,0.0,1.0,0.0,3.0,0 223 | 39.0,0.0,3.0,94.0,199.0,0.0,0.0,179.0,0.0,0.0,1.0,0.0,3.0,0 224 | 53.0,1.0,4.0,123.0,282.0,0.0,0.0,95.0,1.0,2.0,2.0,2.0,7.0,3 225 | 63.0,0.0,4.0,108.0,269.0,0.0,0.0,169.0,1.0,1.8,2.0,2.0,3.0,1 226 | 34.0,0.0,2.0,118.0,210.0,0.0,0.0,192.0,0.0,0.7,1.0,0.0,3.0,0 227 | 47.0,1.0,4.0,112.0,204.0,0.0,0.0,143.0,0.0,0.1,1.0,0.0,3.0,0 228 | 67.0,0.0,3.0,152.0,277.0,0.0,0.0,172.0,0.0,0.0,1.0,1.0,3.0,0 229 | 54.0,1.0,4.0,110.0,206.0,0.0,2.0,108.0,1.0,0.0,2.0,1.0,3.0,3 230 | 66.0,1.0,4.0,112.0,212.0,0.0,2.0,132.0,1.0,0.1,1.0,1.0,3.0,2 231 | 52.0,0.0,3.0,136.0,196.0,0.0,2.0,169.0,0.0,0.1,2.0,0.0,3.0,0 232 | 55.0,0.0,4.0,180.0,327.0,0.0,1.0,117.0,1.0,3.4,2.0,0.0,3.0,2 233 | 49.0,1.0,3.0,118.0,149.0,0.0,2.0,126.0,0.0,0.8,1.0,3.0,3.0,1 234 | 74.0,0.0,2.0,120.0,269.0,0.0,2.0,121.0,1.0,0.2,1.0,1.0,3.0,0 235 | 54.0,0.0,3.0,160.0,201.0,0.0,0.0,163.0,0.0,0.0,1.0,1.0,3.0,0 236 | 54.0,1.0,4.0,122.0,286.0,0.0,2.0,116.0,1.0,3.2,2.0,2.0,3.0,3 237 | 56.0,1.0,4.0,130.0,283.0,1.0,2.0,103.0,1.0,1.6,3.0,0.0,7.0,2 238 | 46.0,1.0,4.0,120.0,249.0,0.0,2.0,144.0,0.0,0.8,1.0,0.0,7.0,1 239 | 49.0,0.0,2.0,134.0,271.0,0.0,0.0,162.0,0.0,0.0,2.0,0.0,3.0,0 240 | 42.0,1.0,2.0,120.0,295.0,0.0,0.0,162.0,0.0,0.0,1.0,0.0,3.0,0 241 | 41.0,1.0,2.0,110.0,235.0,0.0,0.0,153.0,0.0,0.0,1.0,0.0,3.0,0 242 | 41.0,0.0,2.0,126.0,306.0,0.0,0.0,163.0,0.0,0.0,1.0,0.0,3.0,0 243 | 49.0,0.0,4.0,130.0,269.0,0.0,0.0,163.0,0.0,0.0,1.0,0.0,3.0,0 244 | 61.0,1.0,1.0,134.0,234.0,0.0,0.0,145.0,0.0,2.6,2.0,2.0,3.0,2 245 | 60.0,0.0,3.0,120.0,178.0,1.0,0.0,96.0,0.0,0.0,1.0,0.0,3.0,0 246 | 67.0,1.0,4.0,120.0,237.0,0.0,0.0,71.0,0.0,1.0,2.0,0.0,3.0,2 247 | 58.0,1.0,4.0,100.0,234.0,0.0,0.0,156.0,0.0,0.1,1.0,1.0,7.0,2 248 | 47.0,1.0,4.0,110.0,275.0,0.0,2.0,118.0,1.0,1.0,2.0,1.0,3.0,1 249 | 52.0,1.0,4.0,125.0,212.0,0.0,0.0,168.0,0.0,1.0,1.0,2.0,7.0,3 250 | 62.0,1.0,2.0,128.0,208.0,1.0,2.0,140.0,0.0,0.0,1.0,0.0,3.0,0 251 | 57.0,1.0,4.0,110.0,201.0,0.0,0.0,126.0,1.0,1.5,2.0,0.0,6.0,0 252 | 58.0,1.0,4.0,146.0,218.0,0.0,0.0,105.0,0.0,2.0,2.0,1.0,7.0,1 253 | 64.0,1.0,4.0,128.0,263.0,0.0,0.0,105.0,1.0,0.2,2.0,1.0,7.0,0 254 | 51.0,0.0,3.0,120.0,295.0,0.0,2.0,157.0,0.0,0.6,1.0,0.0,3.0,0 255 | 43.0,1.0,4.0,115.0,303.0,0.0,0.0,181.0,0.0,1.2,2.0,0.0,3.0,0 256 | 42.0,0.0,3.0,120.0,209.0,0.0,0.0,173.0,0.0,0.0,2.0,0.0,3.0,0 257 | 67.0,0.0,4.0,106.0,223.0,0.0,0.0,142.0,0.0,0.3,1.0,2.0,3.0,0 258 | 76.0,0.0,3.0,140.0,197.0,0.0,1.0,116.0,0.0,1.1,2.0,0.0,3.0,0 259 | 70.0,1.0,2.0,156.0,245.0,0.0,2.0,143.0,0.0,0.0,1.0,0.0,3.0,0 260 | 57.0,1.0,2.0,124.0,261.0,0.0,0.0,141.0,0.0,0.3,1.0,0.0,7.0,1 261 | 44.0,0.0,3.0,118.0,242.0,0.0,0.0,149.0,0.0,0.3,2.0,1.0,3.0,0 262 | 58.0,0.0,2.0,136.0,319.0,1.0,2.0,152.0,0.0,0.0,1.0,2.0,3.0,3 263 | 60.0,0.0,1.0,150.0,240.0,0.0,0.0,171.0,0.0,0.9,1.0,0.0,3.0,0 264 | 44.0,1.0,3.0,120.0,226.0,0.0,0.0,169.0,0.0,0.0,1.0,0.0,3.0,0 265 | 61.0,1.0,4.0,138.0,166.0,0.0,2.0,125.0,1.0,3.6,2.0,1.0,3.0,4 266 | 42.0,1.0,4.0,136.0,315.0,0.0,0.0,125.0,1.0,1.8,2.0,0.0,6.0,2 267 | 52.0,1.0,4.0,128.0,204.0,1.0,0.0,156.0,1.0,1.0,2.0,0.0,?,2 268 | 59.0,1.0,3.0,126.0,218.0,1.0,0.0,134.0,0.0,2.2,2.0,1.0,6.0,2 269 | 40.0,1.0,4.0,152.0,223.0,0.0,0.0,181.0,0.0,0.0,1.0,0.0,7.0,1 270 | 42.0,1.0,3.0,130.0,180.0,0.0,0.0,150.0,0.0,0.0,1.0,0.0,3.0,0 271 | 61.0,1.0,4.0,140.0,207.0,0.0,2.0,138.0,1.0,1.9,1.0,1.0,7.0,1 272 | 66.0,1.0,4.0,160.0,228.0,0.0,2.0,138.0,0.0,2.3,1.0,0.0,6.0,0 273 | 46.0,1.0,4.0,140.0,311.0,0.0,0.0,120.0,1.0,1.8,2.0,2.0,7.0,2 274 | 71.0,0.0,4.0,112.0,149.0,0.0,0.0,125.0,0.0,1.6,2.0,0.0,3.0,0 275 | 59.0,1.0,1.0,134.0,204.0,0.0,0.0,162.0,0.0,0.8,1.0,2.0,3.0,1 276 | 64.0,1.0,1.0,170.0,227.0,0.0,2.0,155.0,0.0,0.6,2.0,0.0,7.0,0 277 | 66.0,0.0,3.0,146.0,278.0,0.0,2.0,152.0,0.0,0.0,2.0,1.0,3.0,0 278 | 39.0,0.0,3.0,138.0,220.0,0.0,0.0,152.0,0.0,0.0,2.0,0.0,3.0,0 279 | 57.0,1.0,2.0,154.0,232.0,0.0,2.0,164.0,0.0,0.0,1.0,1.0,3.0,1 280 | 58.0,0.0,4.0,130.0,197.0,0.0,0.0,131.0,0.0,0.6,2.0,0.0,3.0,0 281 | 57.0,1.0,4.0,110.0,335.0,0.0,0.0,143.0,1.0,3.0,2.0,1.0,7.0,2 282 | 47.0,1.0,3.0,130.0,253.0,0.0,0.0,179.0,0.0,0.0,1.0,0.0,3.0,0 283 | 55.0,0.0,4.0,128.0,205.0,0.0,1.0,130.0,1.0,2.0,2.0,1.0,7.0,3 284 | 35.0,1.0,2.0,122.0,192.0,0.0,0.0,174.0,0.0,0.0,1.0,0.0,3.0,0 285 | 61.0,1.0,4.0,148.0,203.0,0.0,0.0,161.0,0.0,0.0,1.0,1.0,7.0,2 286 | 58.0,1.0,4.0,114.0,318.0,0.0,1.0,140.0,0.0,4.4,3.0,3.0,6.0,4 287 | 58.0,0.0,4.0,170.0,225.0,1.0,2.0,146.0,1.0,2.8,2.0,2.0,6.0,2 288 | 58.0,1.0,2.0,125.0,220.0,0.0,0.0,144.0,0.0,0.4,2.0,?,7.0,0 289 | 56.0,1.0,2.0,130.0,221.0,0.0,2.0,163.0,0.0,0.0,1.0,0.0,7.0,0 290 | 56.0,1.0,2.0,120.0,240.0,0.0,0.0,169.0,0.0,0.0,3.0,0.0,3.0,0 291 | 67.0,1.0,3.0,152.0,212.0,0.0,2.0,150.0,0.0,0.8,2.0,0.0,7.0,1 292 | 55.0,0.0,2.0,132.0,342.0,0.0,0.0,166.0,0.0,1.2,1.0,0.0,3.0,0 293 | 44.0,1.0,4.0,120.0,169.0,0.0,0.0,144.0,1.0,2.8,3.0,0.0,6.0,2 294 | 63.0,1.0,4.0,140.0,187.0,0.0,2.0,144.0,1.0,4.0,1.0,2.0,7.0,2 295 | 63.0,0.0,4.0,124.0,197.0,0.0,0.0,136.0,1.0,0.0,2.0,0.0,3.0,1 296 | 41.0,1.0,2.0,120.0,157.0,0.0,0.0,182.0,0.0,0.0,1.0,0.0,3.0,0 297 | 59.0,1.0,4.0,164.0,176.0,1.0,2.0,90.0,0.0,1.0,2.0,2.0,6.0,3 298 | 57.0,0.0,4.0,140.0,241.0,0.0,0.0,123.0,1.0,0.2,2.0,0.0,7.0,1 299 | 45.0,1.0,1.0,110.0,264.0,0.0,0.0,132.0,0.0,1.2,2.0,0.0,7.0,1 300 | 68.0,1.0,4.0,144.0,193.0,1.0,0.0,141.0,0.0,3.4,2.0,2.0,7.0,2 301 | 57.0,1.0,4.0,130.0,131.0,0.0,0.0,115.0,1.0,1.2,2.0,1.0,7.0,3 302 | 57.0,0.0,2.0,130.0,236.0,0.0,2.0,174.0,0.0,0.0,2.0,1.0,3.0,1 303 | 38.0,1.0,3.0,138.0,175.0,0.0,0.0,173.0,0.0,0.0,1.0,?,3.0,0 304 | -------------------------------------------------------------------------------- /csdn/tools.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # coding=utf-8 3 | 4 | import matplotlib.pyplot as plt 5 | import numpy as np 6 | from matplotlib.colors import ListedColormap 7 | 8 | 9 | def plot_decision_regions(X, y, classifier, test_idx=None, resolution=0.02): 10 | # setup marker generator and color map 11 | markers = ('s', 'x', 'o', '^', 'v') 12 | colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan') 13 | cmap = ListedColormap(colors[:len(np.unique(y))]) 14 | # plot the decision surface 15 | x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1 16 | x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1 17 | xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution), np.arange(x2_min, x2_max, resolution)) 18 | Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T) 19 | Z = Z.reshape(xx1.shape) 20 | plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=cmap) 21 | plt.xlim(xx1.min(), xx1.max()) 22 | plt.ylim(xx2.min(), xx2.max()) 23 | # plot class samples 24 | for idx, cl in enumerate(np.unique(y)): 25 | plt.scatter(x=X[y == cl, 0], y=X[y == cl, 1],alpha=0.8, c=cmap(idx),marker=markers[idx], label=cl) 26 | # highlight test samples 27 | if test_idx: 28 | X_test, y_test = X[test_idx, :], y[test_idx] 29 | plt.scatter(X_test[:, 0], X_test[:, 1], c='', alpha=1.0, linewidth=1, marker='o', s=55, label='test set') --------------------------------------------------------------------------------