Skip to content

Instantly share code, notes, and snippets.

@tvorogme
Created May 27, 2016 16:05
Show Gist options
  • Save tvorogme/448d994687cfccc5a6a6b35489f069d1 to your computer and use it in GitHub Desktop.
Save tvorogme/448d994687cfccc5a6a6b35489f069d1 to your computer and use it in GitHub Desktop.
Sklearn diffrent examples
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 89,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"data = pd.read_csv('final.csv')"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"data = data.drop('Unnamed: 0', 1)"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from sklearn.ensemble import VotingClassifier\n",
"from sklearn.grid_search import GridSearchCV"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from sklearn import datasets\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.neighbors import KNeighborsClassifier\n",
"from sklearn.svm import SVC\n",
"from sklearn.ensemble import VotingClassifier\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"from itertools import product"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"x = data.values[:,2:4]\n",
"y = data.values[:,4]"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"clf1 = LogisticRegression(random_state = 1)\n",
"clf2 = KNeighborsClassifier(n_neighbors = 10)\n",
"clf3 = SVC(kernel='rbf', probability=True)\n",
"clf4 = RandomForestClassifier(random_state = 1, min_weight_fraction_leaf=0.2,n_estimators = 100)\n",
"eclf = VotingClassifier(estimators=[('lr', clf1), ('knn', clf2), ('svc', clf3), ('rfc', clf4)], voting='soft', weights=[1,1,4,1])"
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from sklearn import metrics"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from sklearn.cross_validation import train_test_split\n",
"Xtr, Xts, Ytr,Yts = train_test_split(x,y, train_size= 0.7)"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"VotingClassifier(estimators=[('lr', 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=1, solver='liblinear', tol=0.0001,\n",
" verbose=0, warm_start=False)), ('knn', KNeighbor...stimators=100, n_jobs=1,\n",
" oob_score=False, random_state=1, verbose=0, warm_start=False))],\n",
" voting='soft', weights=[1, 1, 4, 1])"
]
},
"execution_count": 98,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"clf1.fit(Xtr,Ytr)\n",
"clf2.fit(Xtr,Ytr)\n",
"clf3.fit(Xtr,Ytr)\n",
"clf4.fit(Xtr,Ytr)\n",
"eclf.fit(Xtr,Ytr)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"['rfc__random_state',\n",
" 'rfc__bootstrap',\n",
" 'rfc__n_estimators',\n",
" 'svc__kernel',\n",
" 'lr__class_weight',\n",
" 'knn__weights',\n",
" 'svc__random_state',\n",
" 'svc__gamma',\n",
" 'svc__max_iter',\n",
" 'estimators',\n",
" 'lr__verbose',\n",
" 'svc__C',\n",
" 'rfc__n_jobs',\n",
" 'rfc__max_depth',\n",
" 'lr__n_jobs',\n",
" 'lr__random_state',\n",
" 'knn__algorithm',\n",
" 'lr',\n",
" 'rfc__warm_start',\n",
" 'svc__shrinking',\n",
" 'knn__metric_params',\n",
" 'svc__cache_size',\n",
" 'lr__dual',\n",
" 'lr__max_iter',\n",
" 'rfc',\n",
" 'lr__fit_intercept',\n",
" 'lr__penalty',\n",
" 'knn__n_neighbors',\n",
" 'lr__tol',\n",
" 'rfc__min_samples_leaf',\n",
" 'rfc__max_features',\n",
" 'knn__n_jobs',\n",
" 'rfc__oob_score',\n",
" 'knn__metric',\n",
" 'lr__multi_class',\n",
" 'svc__verbose',\n",
" 'rfc__min_samples_split',\n",
" 'svc__probability',\n",
" 'rfc__class_weight',\n",
" 'knn__p',\n",
" 'rfc__verbose',\n",
" 'svc__coef0',\n",
" 'rfc__max_leaf_nodes',\n",
" 'svc__tol',\n",
" 'knn',\n",
" 'svc__class_weight',\n",
" 'lr__solver',\n",
" 'svc__decision_function_shape',\n",
" 'svc__degree',\n",
" 'svc',\n",
" 'rfc__criterion',\n",
" 'knn__leaf_size',\n",
" 'weights',\n",
" 'rfc__min_weight_fraction_leaf',\n",
" 'lr__intercept_scaling',\n",
" 'voting',\n",
" 'lr__warm_start',\n",
" 'lr__C']"
]
},
"execution_count": 99,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"grid.estimator.get_params().keys()"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" 0 0.85 0.91 0.88 191\n",
" 1 0.91 0.84 0.87 195\n",
"\n",
"avg / total 0.88 0.88 0.88 386\n",
"\n",
"[[174 17]\n",
" [ 31 164]]\n"
]
}
],
"source": [
"print(metrics.classification_report(Yts, eclf.predict(Xts)))\n",
"print(metrics.confusion_matrix(Yts, eclf.predict(Xts)))"
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.87564766839378239"
]
},
"execution_count": 101,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s = np.sum(Yts == eclf.predict(Xts))\n",
"s/float(len(Yts))"
]
},
{
"cell_type": "code",
"execution_count": 102,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'est' is not defined",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-102-f8270e228664>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mexternals\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mjoblib\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mjoblib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdump\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mest\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'tree.pkl'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mNameError\u001b[0m: name 'est' is not defined"
]
}
],
"source": [
"from sklearn.externals import joblib\n",
"joblib.dump(est, 'tree.pkl')"
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from sklearn.metrics import accuracy_score,roc_auc_score, roc_curve\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7ff44d1d9e10>"
]
},
"execution_count": 104,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\ncuGFF4b8TEZGBuvXr6/0B2vp0qVkZGSELJ+SksLLL7/Mt99+yzfffENpaSmnn346AB999BFLliyh\nY8eOdOzYkddff52nnnqKH//4x8Htd911Fx07dqRTp04AnHHGGcyYMaPSMaZOncq1115b7diXXXYZ\n33zzDTt27GD8+PFs3LiRU089NWQ9RY42EZ2s42iTnp7OunXr+OEPf1hjmT179tCqVSvatm1LcXEx\n9957b6XttYVnXYqLi3HOkZqaSiAQYNq0aZX6o6uKiYnhF7/4BbfffjvPPPMM7du3Jzc3l+XLl3P+\n+eezZ88eYmNjSUpKIj8/v8bbDsu9//77Da7zcccdx4knnsiECRN45JFHeO+991i2bFnwQmZV69ev\nJykpieTkZObNm8ekSZP45JNPAHjkkUf43e9+B3jncdy4cXTu3Dl4gXrt2rUEAoHg9o4dOzJnzhyO\nP/7QdAI5OTlkZWXx/PPPVzv2F198wYknnkh+fj633norF198Mccdd1yDf2aRpkgt91r87ne/4/e/\n/z0pKSk8+eSTQPVW+LXXXkv37t3p3LkzgwYN4owzzqhUpuoF1bpa8RX/EAwcOJDf/OY3nHHGGXTo\n0IFly5Zx9tln17hvgMcff5w+ffowZMgQkpKS+I//+A/WrFkDeN0Ye/fuJTU1lTPPPJORI0cekaFr\nZ8yYwZIlS2jbti333Xcfb731Fu3atQPg008/JSEhIVj2iy++4PjjjycxMZH77ruP//u//2PAgAGA\n18WTlpZGWloa6enpxMbGEhcXR3JyMuD9n0rF7eV/CFu3bh3c//Tp0znzzDOD3WUV3X777aSkpNC/\nf3/atWvHpEmTKm0PZ3eVSKTVOXBY2A6kgcPqdMEFF/D5559z6qmn1vrgjxx5U6ZM4Y477mD//v2s\nWLGCHj16VNqu761ESmMHDlO4izSCvrcSKUdyVEgRETnKKNxFRHxI4S4i4kMKdxERH1K4i4j4kMJd\nRMSHFO4iIj6kcI8STanXdGhKPfEjhXstwjHNHniTagwdOrTSOk2pV3lKvby8PK666io6d+5McnIy\nZ599NosWLQpu//jjjzn++ONJSUkhNTWVSy+9lK1btwa333nnnRx33HEkJiYyYMAApk+fXunYpaWl\n3H///XTu3JnExEROPvnk4Dj6mlJP/EjhXosj/RTi4ey7qUwHF64p9fbs2cPpp5/Ov//9bwoKCrju\n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\nAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7ff4433d6e90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from sklearn import svm, datasets\n",
"from sklearn.metrics import roc_curve, auc\n",
"from sklearn.cross_validation import train_test_split\n",
"from sklearn.preprocessing import label_binarize\n",
"from sklearn.multiclass import OneVsRestClassifier\n",
"from scipy import interp\n",
"\n",
"\n",
"\n",
"# Compute ROC curve and ROC area for each class\n",
"pred_tr =eclf.predict_proba(Xtr)[:,1]\n",
"pred_ts = eclf.predict_proba(Xts)[:,1]\n",
"auc_tr = roc_auc_score(Ytr,pred_tr)\n",
"auc_ts = roc_auc_score(Yts,pred_ts)\n",
"\n",
"tpr,fpr, _ = roc_curve(Ytr,pred_tr)\n",
"plt.plot(tpr,fpr,label = \"train[area = %.5f]\"%(auc_tr))\n",
"\n",
"tpr,fpr, _ = roc_curve(Yts,pred_ts)\n",
"plt.plot(tpr,fpr,label = \"test[area = %.5f]\"%(auc_ts))\n",
"\n",
"plt.legend(loc='best')"
]
},
{
"cell_type": "code",
"execution_count": 106,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"{'eclf': VotingClassifier(estimators=[('lr', 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=1, solver='liblinear', tol=0.0001,\n",
" verbose=0, warm_start=False)), ('knn', KNeighbor...stimators=100, n_jobs=1,\n",
" oob_score=False, random_state=1, verbose=0, warm_start=False))],\n",
" voting='soft', weights=[1, 1, 4, 1]),\n",
" 'knn': KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n",
" metric_params=None, n_jobs=1, n_neighbors=10, p=2,\n",
" weights='uniform'),\n",
" 'lr': 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=1, solver='liblinear', tol=0.0001,\n",
" verbose=0, warm_start=False),\n",
" 'rf': RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n",
" max_depth=None, max_features='auto', max_leaf_nodes=None,\n",
" min_samples_leaf=1, min_samples_split=2,\n",
" min_weight_fraction_leaf=0.2, n_estimators=100, n_jobs=1,\n",
" oob_score=False, random_state=1, verbose=0, warm_start=False),\n",
" 'svc': 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=True, random_state=None, shrinking=True,\n",
" tol=0.001, verbose=False)}"
]
},
"execution_count": 106,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"clfs = dict(zip(['lr', 'knn', 'svc', 'rf','eclf'],[clf1,clf2,clf3,clf4,eclf],))\n",
"clfs"
]
},
{
"cell_type": "code",
"execution_count": 110,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"predictions_tr = {\n",
" k: v.predict_proba(Xtr)[:,1] for k,v in clfs.items()\n",
"}\n"
]
},
{
"cell_type": "code",
"execution_count": 115,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7ff442cd2210>"
]
},
"execution_count": 115,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\niazku4mIiIiIyNVgRUPNEtfdFBERERERWbIVDTUiIiIiIiLLbU2FGmMMD59+mB2NO1a7KSIiIiIi\nUiXWVKj54gtfpFAp8Kbr3rTaTRERERERkSqx6Do1K6Xslvmtb/8Wn/65TxMMaPCNiIiIiIgszZqp\n1Hzj6DfYnNrMrdtvXe2miIiIiIhIFVkzoaZQKbCpbtNqN0NERERERKrMmgk1IiIiIiIil0KhRkRE\nREREqppCjYiIiIiIVDWFGhERERERqWoKNSIiIiIiUtUUakREREREpKop1IiIiIiISFVTqBERERER\nkaqmUCMiIiIiIlVNoUZERERERKqaQo2IiIiIiFQ1hRoREREREalqCjUiIiIiIlLVFGpERERERKSq\nKdSIiIiIiEhVU6gREREREZGqplAjIiIiIiJVTaFGRERERESqmkKNiIiIiIhUNYUaERERERGpago1\nIiIiIiJS1RRqRERERESkqinUiIiIiIhIVVOoERERERGRqqZQIyIiIiIiVU2hRkREREREqppCjYiI\niIiIVDWFGhERERERqWoKNSIiIiIiUtUUakREREREpKop1IiIiIiISFVTqBERERERkaqmUCMiIiIi\nIlVNoUZERERERKqaQo2IiIiIiFQ1hRoREREREalqCjUiIiIiIlLVFGpERERERKSqKdSIiIiIiEhV\nU6gREREREZGqplAjIiIiIiJVTaFGRERERESq2poMNcYYCkcL/P/t3Xt4TVfi//H3CkHIyUkiEnGn\nwYj7tFUtVUyZoKhLtaGtqtbU0FZ1ppRWk7YUvcyMDi1V91G9aDtK08t06tJqm59RqdCKoAmJukYu\nRIKs3x8434QTgjhx+LyeZz9Pz1pr77XO7n44H2vvtSuEVijroYiIiIiIyBXuigw1mWsyoQACbgko\n66GIiIiIiMgV7ooMNelvpFNjeA2MMWU9FBERERERucJdcaEmf08+Bz87SNj9YWU9FBERERER8QJX\nXKjZ/fZuqvWvhm+gb1kPRUREREREvMAVFWrMCUP6zJO3nomIiIiIiJTEFRVqaq+vTYXwCjh+7yjr\noYiIiIiIiJe4okJNk8+bUPPPNct6GCIiIiIi4kXKl/UATiu3sxyB2wKpNqBaWQ9FRERERES8iGdn\nan75Baq5Dy3+H/izteNWylUq59EhiYiIiIiId/NsqGncGG688aziE0dPUPnflfml6y8eHY6IiIiI\niHg/z4aaV15xW7zv/X0ca3KMrPAsjw5HRERERES8n2dDTdOmbovT30gnZ0COR4ciIiIiIiJXhzJf\n/Ztkg+kAACAASURBVCx7QzZ5u/I4euvRsh6KiIiIiIh4oTIPNelvpBM+LPwKWodNRERERES8SZmG\nmuOZx9n33j7CHwovy2GIiIiIiIgXK9NQ89vC3wjqGkTF6hXLchgiIiIiIuLFyizUWGtJn5FOzT/X\nLKshiIiIiIjIVeC8ocYYE2WM+cUYs9UYM+Yc7W40xhw3xvQtSceZqzPBgLOD80LGKyIiIiIiUsQ5\nQ40xphzwTyAKiASijTFNimk3BfgMMCXpOG1GGjWG18CYEjUXERERERFx63wzNW2AZGvtr9baY8AS\noLebdo8CHwD7StJp3u48Mr7IoPp91S9osCIiIiIiImc6X6ipCews9HnXqTIXY0xNTgadN04V2fN1\nuvvt3VQbUI3yTq3jLCIiIiIil+Z8qeK8AQX4OzDWWmvNyXvJir2fLCYmBoC06WncGXsnjWlc0nGK\niIiIiMhVZuXKlaxcufKSj2OsLT63GGPaAjHW2qhTn58GCqy1Uwq12c7/BZkQ4AjwsLV22RnHsqf7\n+q7ed7Ra2Qq/en6u+kU/LeKz5M9Y1HfRJX8pERERERHxPsYYrLUX/ND9+WZq1gENjTH1gHTgbiC6\ncANrbYNCg5gLfHJmoBEREREREblczhlqrLXHjTEjgc+BcsDb1tqfjTF/OlU/0wNjFBERERERKdZ5\nn9S31sYBcWeUuQ0z1tohpTQuERERERGREjnvyzdFRERERESuZGW+pvKxE8f495Z/893O78p6KCIi\nIiIi4oU8PlNz+OfDFBwuwDfEF4CNezfy8CcPcyD3AN0bdvf0cERERERExMt5fKZm+5jt1Blbh/L+\nJ7u21tIgqAFL+i/x9FBEREREROQq4NGZmoyvMziceJiaI2t6slsREREREbmKeTTUpL2eRt3xdfGp\nqPUJRERERESkdHg0XRQcLaBCeAVPdikiIiIiIle5Mp8yOV5wvKyHICIiIiIiXqzMQ83ff/g7XRp0\nKethiIiIiIiIlyrT99R8uvVT4tPiebvX22U5DBERERER8WJlFmpy8nMYvmI4s3vOprJv5bIahoiI\niIiIeLkyu/3smf8+Q8d6HelynW49ExERERGRi1cmMzXxafEsSVxC4p8Ty6J7ERERERG5ipTJTM3o\nz0fzcpeXCakcUhbdi4iIiIjIVaRMQs2urF3cWvfWsuhaRERERESuMmW+pLOIiIiIiMilUKgRERER\nERGvplAjIiIiIiJeTaFGRERERES8mkKNiIiIiIh4NYUaERERERHxago1IiIiIiLi1RRqRERERETE\nqynUiIiIiIiIV1OoERERERERr6ZQIyIiIiIiXk2hRkREREREvJpCjYiIiIiIeDWFGhERERER8WoK\nNSIiIiIi4tUUakRERERExKsp1IiIiIiIiFdTqBEREREREa+mUCMiIiIiIl5NoUZERERERLxamYQa\niy2LbkVERERE5CpUJqEmJz+HKr5VyqJrERERERG5yng81Bw7cYzsvGyqVq7q6a5FREREROQq5PFQ\nk5GbQZh/GD5Gj/OIiIiIiMil83iyOHj0INX9q3u6WxERERERuUp5PtQcOUi4f7inuxURERERkauU\n528/O5qhUCMiIiIiIqWmTJ6pCXco1IiIiIiISOnw/O1nuXqmRkRERERESk+ZLBSg289ERERERKS0\n6PYzERERERHxauU93eGZMzXGGE8PQeSCWGvLeggiIiIicg4eDTXWWjKPZhLmH3ZWuciVSKFbRERE\n5Mrn0dvP8gvyqexbmQrlKniyWxERERERuYp5NNTkHc8j2C/Yk12KiIiIiMhVzrOh5oRCjYiIiIiI\nlC7N1IiIiIiIiFfzeKgJqhTkyS5FREREROQq5/Hbz4L8vCfU1KtXj6+++qrUj9uxY0f8/Pzo2LFj\nqR9bLszbb7+Nw+HAx8eH7du3l/VwREREROQieP6Zmkrec/uZMeayLOlrjGH69OmsXLmy1I/tSb/+\n+iudOnWiSpUqNGnS5JwB8NChQwwePJiwsDDCwsKIjY0tUt+pUydCQ0NxOp20atWKZcuWuepWrFhB\n+/btCQoKIjw8nIcffpicnJyz+jh48CDVqlXj1ltvdZUlJSXRu3dvQkNDqVq1KlFRUSQlJbnqhw4d\nSnZ29qWcBhEREREpYx4NNUePHyW4sveEmsvpUt7Nc+LEiVIcycWLjo7m+uuv5+DBg0ycOJH+/fuz\nf/9+t22feOIJjh49SkpKCvHx8SxcuJB58+a56qdNm0ZaWhqZmZnMmjWLe++9lz179gCQlZXFhAkT\n2L17Nz///DNpaWn89a9/PauPMWPGEBkZWSSIZmZmcuedd5KUlMSePXto06YNvXv3Lt0TISIiIiJl\nyvMLBXjRTE1hP//8Mw0aNODdd98FTt6a9uqrr9KyZUsCAwO55557yMvLA2DlypXUqlWL1157jbCw\nMGrUqFHkBzyc/VLHyZMnExERQUBAAE2bNuXjjz921c2bN4927doxevRoQkJCiI2NJT8/n7/85S/U\nrVuX6tWrM3z4cI4ePQqcnBW54447CA0NJTg4mJ49e5KWllaq5yMpKYkff/yR2NhYKlasSN++fWnR\nogVLly5123758uX89a9/pVKlStStW5ehQ4cyZ84cV33z5s3x9fV1fT527Bg7d+4EToanrl27UqlS\nJQIDA3n44Yf59ttvixx/7dq1bNq0iSFDhhQJjDfeeCNDhgwhMDCQ8uXLM2rUKLZs2UJGRkZpng4R\nERERKUNX/DM1xpTOdinWr19PVFQU//znP7n77rtPjcvw/vvv8/nnn7Njxw5++umnIsFlz549ZGVl\nkZ6ezttvv82IESPIzMwsto+IiAi++eYbsrKyeO6554rMVADEx8dz3XXXsXfvXsaNG8eYMWNITk4m\nISGB5ORk0tLSeP755wEoKChg6NChpKamkpqaip+fHyNHjiy27zvuuIOgoCC3W69evdzus2nTJho0\naECVKlVcZS1btmTTpk3F9lM4bBQUFJCYmHjWOPz8/Gjbti2dOnXihhtucHucVatW0axZM9fnEydO\n8OijjzJ9+vRi+z5t9erVhIeHExTkPc92iYiIiMi5eTTUGAx+vn4XtI+1pbNdrFWrVtG7d28WLlxI\n9+7di9Q99thjVK9enaCgIHr27MmGDRtcdb6+vkyYMIFy5crRrVs3/P392bJlS7H99O/fn+rVqwMw\nYMAAGjZsyA8//OCqr1GjBiNGjMDHx4eKFSvy1ltv8dprrxEYGIi/vz9PP/00S5YsASA4OJg+ffpQ\nqVIl/P39GTduHKtWrSq27+XLl5ORkeF2K/xsS2E5OTk4nc4iZQEBAcU+nxIVFcWUKVPIyckhOTmZ\nOXPmkJube9Y4cnJy+PTTT+nSpYvb43z55ZcsWLDAFeDg5K1rbdu2pXXr1sV+R4Bdu3YxcuRIXnvt\ntXO2ExERERHv4tFQU7F8RU92d8mstcycOZN27drRoUOHs+pPhxAAPz+/Ig+vV61aFR+f/zu9lStX\ndvtw+2kLFiygdevWrhmSxMREDhw44KqvXbu267/37dvHkSNHuP76613tu3Xr5nqe5ciRI/zpT3+i\nXr16OJ1ObrvtNjIzMy/pOZ4z+fv7k5WVVaTs0KFDBAQEuG0/bdo0KlWqRMOGDenTpw8DBw6kZs2a\nZ7UrV64cUVFRfPHFF3zyySdF6r7//nsGDRrE0qVLiYiIACA9PZ3XX3+dF1988Zzj3bdvH127dmXE\niBGu2TYRERERuTp4NtSU865QY4xh5syZpKSkMHr06MvWT0pKCsOGDWP69OkcPHiQjIwMmjVrViSE\nFH4GJyQkBD8/PzZv3uyaUTl06JArZLz66qskJSURHx9PZmYmq1atwlpbbKjp1q0bDofD7dajRw+3\n+zRt2pTt27cXCWoJCQk0bdrUbfugoCAWLVrE7t272bhxIydOnOCmm24q9pwcO3asyBLLP/74I717\n92bevHl06tTJVR4fH8/u3buJjIwkPDycUaNGER8fT40aNVzfNyMjg65du3LnnXfy9NNPF9uniIiI\niHgnzdSch8Ph4LPPPmP16tWX7Qfx4cOHMcYQEhJCQUEBc+fOPet5k8J8fHx4+OGHGTVqFPv27QMg\nLS2NL774Ajh5a5ifnx9Op5ODBw+etXzymeLi4sjOzna7rVixwu0+jRo1olWrVsTGxnL06FE+/PBD\nEhMT6devn9v227dv58CBA5w4cYK4uDjeeustnnnmGQC2bNlCXFwcubm5HDt2jEWLFrFmzRpuu+02\nABITE13PNJ15C2D37t1JSUkhISGBhIQEnn/+eVq3bs2GDRswxpCVlcUf//hH2rdvz6RJk855HkRE\nRETEO2mmpgScTidffvklcXFxPPfcc27bnPlOm/O936bwrElkZCRPPvkkN998M9WrVycxMZH27dsX\ne2yAKVOmEBERQdu2bXE6nXTp0sX1/pVRo0aRm5tLSEgIt9xyC926dbss79tZsmQJ69atIzg4mPHj\nx7N06VKqVq0KwJo1a3A4HK62//vf/2jRogUBAQGMHz+exYsX06RJE9e5iI2NJSwsjNDQUF5//XXe\ne+89WrVqBcBrr73GgQMHePDBB10zSM2bNwegQoUKhIaGujan0+kqA/joo49Yt24dc+fOde0bEBDA\nrl27XGMrzdvyRERERMTzjKd+0Blj7IdtP6TDsx2o2r1q4fJr7kflH//4R7777jtuvPHGc76wUi6/\nuXPnMnr0aPLy8ti8eTP16tUrUn8tXp8iIiIiZeXUb68L/td4j4aaT9t9Sptxba75UCPeQ9eniIiI\niOdcbKjRMzUiIiIiIuLV9EyNiIiIiIh4Nc3UiIiIiIiIV/NoqPEt5+vJ7kRERERE5BpQolBjjIky\nxvxijNlqjBnjpn6QMSbBGPOTMeZbY0wLt8eh9JcVFhERERGRa9t5Q40xphzwTyAKiASijTFNzmi2\nHehgrW0BvADMKu2BioiIiIiIuFOSmZo2QLK19ldr7TFgCdC7cANr7XfW2sxTH38AapXuMEVERERE\nRNwrSaipCews9HnXqbLiDAU+vZRBXcm2bNlCq1atCAgI4PXXX6djx474+fnRsWPHsh7aNe/tt9/G\n4XDg4+PD9u3by3o4IiIiIuIhJQk1JX7zoDGmE/AgcNZzNwBvbH2DKf+aQkxMDCtXrizpYa8oU6dO\n5Q9/+ANZWVk8+uijGGOYPn26136f03799Vc6depElSpVaNKkCV999VWxbQ8dOsTgwYMJCwsjLCyM\n2NhYV92+ffuIjo6mZs2aBAYG0r59e+Lj4131X3/9NS1atCAoKIiQkBD69u1Lenq6q/6BBx6gYsWK\nOBwOHA4HAQEBrpdfrlmzxlV+evPx8eGjjz4CYOjQoWRnZ5f2qRERERGRy2TlypXExMS4totVklCT\nBtQu9Lk2J2driji1OMBbQC9rbYa7Aw1vOJwxg8YQExPjdTMbx48fByAlJYXIyMgidZfyxvkTJ05c\n0rhKS3R0NNdffz0HDx5k4sSJ9O/fn/3797tt+8QTT3D06FFSUlKIj49n4cKFzJs3D4CcnBxuuukm\n1q9fT0ZGBoMHD6ZHjx4cPnwYgKZNmxIXF0dGRga7d++mYcOGDB8+3HVsYwxjxowhOzub7OxssrKy\nMObkAhO33nqrqzw7O5vly5fj7+9PVFTU5T05IiIiInJZdOzY0WOhZh3Q0BhTzxhTAbgbWFa4gTGm\nDvAhcK+1NvmiR3OFqVevHlOnTqVly5b4+/vzhz/8gZUrVzJy5EgCAgLYunUrgOtH92mTJ08mIiKC\ngIAAmjZtyscff+yqmzdvHu3atWP06NGEhIQQGxtLfn4+f/nLX6hbty7Vq1dn+PDhHD16FDg5K3LH\nHXcQGhpKcHAwPXv2JC0trVS/Z1JSEj/++COxsbFUrFiRvn370qJFC5YuXeq2/fLly/nrX/9KpUqV\nqFu3LkOHDmXOnDkA1K9fn1GjRhEWFoYxhocffpj8/HySkpIACA0NpWbNk3cvFhQU4OPjw7Zt24oc\nv6Qhcd68edx11134+fld7FcXERERkatA+fM1sNYeN8aMBD4HygFvW2t/Nsb86VT9TGACEAS8ceoH\n/jFrbZvSGKCJLZ1loO1zFzebsmTJEj799FNCQkKoWLEinTp14r777uPBBx8sdp+IiAi++eYbqlev\nznvvvce9997Ltm3bCAsLAyA+Pp6BAweyd+9e8vPzGTNmDDt27CAhIYHy5cszcOBAnn/+eSZNmkRB\nQQFDhw7lgw8+4Pjx4zz44IOMHDnSdcvVme644w6+/fZbt3W33nory5YtO6t806ZNNGjQgCpVqrjK\nWrZsyaZNm4r9joWDR0FBAYmJiW7bbdiwgfz8fCIiIlxlqamptGzZkqysLMqVK8fs2bOL7DNjxgxm\nzJhB/fr1GTduHH379j3ruIcPH2bp0qUsX7682DGKiIiIyLXhvKEGwFobB8SdUTaz0H8/BDxUukM7\ndeyLDCOlwRjDY4895ppZOO18Mwn9+/d3/feAAQN46aWX+OGHH+jVqxcANWrUYMSIEQBUrFiRt956\ni59++onAwEAAnn76aQYNGsSkSZMIDg6mT58+ruONGzeOzp07F9v3xfzIz8nJwel0FikLCAgodkYo\nKiqKKVOmMG/ePH777TfmzJlDbm7uWe2ysrK47777iImJweFwuMrr1KlDRkYGGRkZvPXWWzRu3NhV\n99hjj/Haa6/hdDr5/PPPufvuu6levTq33HJLkWN/+OGHVKtWjQ4dOlzw9xURERGRq0uJXr55Latd\nu/ZZZWfebnamBQsW0Lp1a4KCgggKCiIxMZEDBw64Pea+ffs4cuQI119/vat9t27dXM+zHDlyhD/9\n6U/Uq1cPp9PJbbfdRmZm5iU9x3Mmf39/srKyipQdOnSIgIAAt+2nTZtGpUqVaNiwIX369GHgwIFn\nBb/c3Fx69uzJLbfcwpgxbteNICgoiMGDB9O7d28KCgoAXOfNx8eHbt26MWjQID788MOz9p0/fz73\n33//xXxdEREREbnKKNScx/kCzJlSUlIYNmwY06dP5+DBg2RkZNCsWbMiIaTwMUNCQvDz82Pz5s2u\n2YtDhw65Qsarr75KUlIS8fHxZGZmsmrVKqy1xYaabt26nbVC2OmtR48ebvdp2rQp27dvJycnx1WW\nkJBA06ZN3bYPCgpi0aJF7N69m40bN3LixAluuukmV31eXh533nknderUYebMmW6PcdqxY8fYu3fv\n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\n+OKLL/jkk09K61SIiIiIiJdSqLkA51tVKy8vj379+vHUU0+xd+9eMjIy6N69e5Fbrs48Rp06dfjs\ns8+KzKocOXKE8PBwFi9ezLJly/jqq6/IzMxkx44dWGuLXZzgkUceweFwuN2aN2/udp9GjRpx/Phx\nkpOTXWUJCQk0a9bMbftKlSrx+uuvs2vXLpKTkwkODnbdAlaSY/35z38mKSmJ3377jb59+3L8+HFX\nfYsWLc51es9y7Ngxr195TkREREQunULNJSocUvLz88nPzyckJAQfHx/i4uL44osvzrn/I488wrhx\n40hNTQVg3759rqWKc3JyqFixIsHBwRw+fJhx48ad81hvvvkm2dnZbreNGze63adKlSr07duXCRMm\ncOTIEb755hs++eQT7rvvPrft09PTSU9Px1rL999/z4svvkhsbGyJjpWXl0diYiLWWlJTUxk2bBij\nRo3C6XQCMGTIED766CMSEhI4duwYL7zwArfeeisOh4MtW7YQFxdHbm4ux44dY9GiRaxZs4bbbrvt\nnOdERERERK5+CjUlVNw7awrPmjgcDqZNm8aAAQMIDg7mnXfeoXfv3mcdp7DHH3+cXr160bVrVwIC\nArj55puJj48H4P7776du3brUrFmTZs2acfPNN1+Wd7DMmDGD3NxcQkNDuffee3nzzTdp0qQJAKmp\nqTgcDnbt2gXAtm3baNeuHf7+/gwZMoQpU6Zw++23l+hYR48eZdCgQTgcDm666SbatWvHCy+84Nq3\nU6dOTJo0iR49ehAWFsb27dtZvHgxcPI8x8bGEhYWRmhoKK+//jrvvfdesQsgiIiIiMi1w1zKe1Yu\nqCNjrLu+zlwRy5sMGzaMd955h+rVq7N169ayHs417auvvqJ///7k5+fz6aefltoMjjdfnyIiIiLe\n5tRvrwv+V3yFGpFz0PUpIiIi4jkXG2p0+5mIiIiIiHg1hRoREREREfFqCjUiIiIiIuLVFGpERERE\nRMSrKdSIiIiIiIhXU6gRERERERGvplAjIiIiIiJeTaHmMvDx8WH79u0A5Obm0rNnTwIDAxkwYAAx\nMTH4+voSEBBAbm5uGY/02paUlIS/vz/ly5fn7bffLuvhiIiIiMhFUqi5zD744AP27t1LRkYG7733\nHsYYoqOjycrKws/Pr6yHd9Hy8vJ48MEHcTqdhIeH87e//e2c7SdOnEjdunVxOp1ER0eTnZ19VpuD\nBw9SrVo1br31VrfHWLBgAT4+PkUCyCOPPILD4XBtlSpVIiAgwFX/888/07lzZwIDA2nYsCEfe4L4\nDwAAFh9JREFUf/yxq65Ro0bk5ORw6623YswFv+NJRERERK4QCjWXWUpKCo0aNXL9aLbWXtIb6o8f\nP15aQ7skMTExbNu2jdTUVL7++mumTp3K559/7rbt/PnzWbRoEWvXriU9PZ3c3FweffTRs9qNGTOG\nyMhItwEjIyODSZMm0axZsyL1b775JtnZ2a4tOjqaAQMGACfPVe/evenVqxcZGRnMmjWLe++9l61b\nt5bSWRARERGRK4FCzTmkp6fTr18/QkNDadCgAa+//rqrrqCggEmTJhEREUFAQAA33HADaWlprnpr\nLc899xwvvPAC7777Lg6Hgzlz5rj9wb5ixQpat26N0+mkTp06xMbGuup+/fVXfHx8mDNnDnXr1uX2\n228HYM6cOURGRhIcHExUVBSpqamufR5//HHq1KmD0+nkhhtu4Jtvvin1c7NgwQKeffZZnE4nv/vd\n7xg2bBjz5s1z2/aTTz5h6NCh1KxZkypVqjBmzBjeffddjh496mqzdu1aNm3axJAhQ9yGvqeffprH\nH3+cqlWrFjumw4cPs3TpUgYPHgzAL7/8wu7duxk1ahTGGDp16kS7du1YuHDhpX15EREREbmilC/r\nAZyPWbmyVI5jO3a8oPYFBQX07NmTPn368O6777Jz505uv/12GjduTNeuXXn11VdZsmQJcXFxNGzY\nkJ9++qnI7WTGGGJjY/Hx8WHbtm0sWLAAODnDcSZ/f38WLVpE06ZN2bhxI126dKFVq1b07t3b1Wb1\n6tX88ssvGGP497//zUsvvcTy5ctp2LAhL730EtHR0Xz77bcAtGnThpiYGJxOJ3//+9+56667SElJ\noUKFCmf1PXnyZKZMmeL2HBhjOHjw4FnlGRkZ7N69m5YtW7rKWrRowUcffVTscQoHlYKCAvLy8ti6\ndSvNmzfnxIkTPProo8yePZuEhISz9o+Pj2f9+vW88cYbvPfee277AFi6dCmhoaHF3r52uu/ExMRi\n60VERETE+1zxoeZCw0hp+X//7/+xf/9+nnnmGQDq16/PQw89xJIlS+jatSuzZ8/mlVdeoWHDhsDJ\nH/XulOR2s9tuu831382bN+eee+5h1apVRUJNTEyMKzS9+eabPP300zRu3Bg4OYsxadIkdu7cSe3a\n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\ntP7+/kXKunbtap999lm3x/7f//5nHQ6H27odO3bYcuXK2ZSUlGLHFhAQYNevX2+ttbZfv3725Zdf\ndtWtXbvWVqpUyebm5rrKvv76a1urVq1ij2ftlX19ioiIiFxtTv32uuCsUb5ME1UJrDQrS+U4HW3H\nC2q/ZcsWpk+fzrp166hevTqpqakcP36cGjVqcPPNN7N06VIeeughABYvXsxdd91FuXLleP/994mN\njeXf//43119/Pdu2bcPX17fYfnr06MG8efOoUKECTz31FIMGDeLHH3901b/zzjvExcVx8803k5ub\nS/v27enTpw/vvvsuO3fu5Pbbb6dx48Z07dqV8uXL849//IMbbriBnTt30q1bN2bMmMHjjz/utu/A\nwECMMW7rnn76aZ566qmzyjdt2kTLli1dnytXrkxERASJiYk0atTovOe1oKCAxMREt3WrV6+mWbNm\nbusWLFhAhw4dqFOnjtv6DRs2kJ+fT0REBADGmCIzMQUFBeTl5bF161aaN29+3nGKiIiIiBe5mCR0\nMRteNlOzdetWGxoaav/zn/+cNdsxe/Zs27lzZ2uttQUFBbZ27dp2zZo11tqTMxGFZ08KczdTU1hG\nRoY1xtisrCxr7cmZmsGDB7vqv//+e1unTp0i+0yaNMkOGTLE7fH+9re/2T59+pz7i16goUOH2rFj\nxxYpa9eunZ0/f/5ZbfPz822DBg3s1KlTbX5+vv38889thQoVbFRU1FltExISbHBwsP3mm2/c9nvd\ndde57cNaazMzM22zZs3s5MmTXWWzZ8+2jRo1sr/++qs9dOiQ7dmzpzXG2O+//97VRjM1IiIiIlcW\nLnKmRs/UFCMiIoK///3vxMTEEBYWRnR0NLt37wagb9++fPfdd/z222+sXr0aHx8f2rdvD8CuXbu4\n7rrrStRHQUEBY8eOJSIiAqfTSf369YGTz63AydmGWrVqudqnpKSQnp5OUFCQa3vppZfYu3cvAElJ\nSdxxxx2Eh4fjdDoZP348Bw4cKLVzAuDv709WVlaRsszMTBwOx1ltfX19+fjjj1mxYgXh4eH87W9/\nY8CAAUW+E0BycjLdu3dn2rRptGvX7qzjfPPNN+zZs4f+/fufVZebm0vPnj255ZZbGDNmjKv8wQcf\nJDo6mo4dO9K8eXM6d+4McFbfIiIiIuL9FGrOITo6mjVr1pCSkoIxxvWjOSgoiK5du/Luu++yePFi\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7ff443235110>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from sklearn import svm, datasets\n",
"from sklearn.metrics import roc_curve, auc\n",
"from sklearn.cross_validation import train_test_split\n",
"from sklearn.preprocessing import label_binarize\n",
"from sklearn.multiclass import OneVsRestClassifier\n",
"from scipy import interp\n",
"\n",
"plt.figure(figsize=[14,])\n",
"for name, pred in predictions_tr.items():\n",
" auc = roc_auc_score(Ytr,pred)\n",
"\n",
"\n",
" tpr,fpr, _ = roc_curve(Ytr,pred)\n",
"\n",
" plt.plot(tpr,fpr,label = \"%s[area = %.5f]\"%(name,auc))\n",
"\n",
"\n",
"plt.legend(loc='best')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment