Commit b92db02c authored by Steve Tjoa's avatar Steve Tjoa

deleting evaluation old notebook

parent 4dd8f47d
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"metadata": {
"name": "",
"signature": "sha256:28793f27d0ebf2c2407b686acd72bc98485da8fd86b00986839688afb5e57c18"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Evaluation\n",
"----------\n",
"\n",
"Once we have computed results using our test set which can be compared against their ground truth labels, there are a number of evaluation methods to understand how well a classifier is performing, particularly when we want to compare different classifiers."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The simplest evaluation measures to produce are the 'True Positive', 'False Positive' and 'False Negative' counts."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"\n",
"positive_label = 1 # The label that we call correct.\n",
"\n",
"# An example set of labels for our ground truth\n",
"gt_labels = np.array([1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2])\n",
"\n",
"# Some example output from a classifier (i.e. model), with classification errors.\n",
"model_output = np.array([1,1,2,2,2,1,1,1,2,1,2,2,2,2,2,2,1,2,1,2])"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 41
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"With the true and false positive counts we can compute 'Precision', 'Recall' and 'F-Measure'. \n",
"Precision describes the ratio of correctly classified files against all which were classified as positive. That is, precision = #TP / (#TP + #FP). Hence:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Compute the number of true positives\n",
"tp = sum((model_output == gt_labels) * (gt_labels == positive_label) + 0.0)\n",
"# Determine precision by dividing the true positive count by the number of all claimed as positive.\n",
"precision = tp / sum((model_output == positive_label) + 0.0)\n",
"precision"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 42,
"text": [
"0.75"
]
}
],
"prompt_number": 42
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The false positive count counts the number of classifications as positive but did not match our ground truth labels."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"fp = sum((model_output == positive_label) * (gt_labels != positive_label) + 0.0)\n",
"fp"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 43,
"text": [
"2.0"
]
}
],
"prompt_number": 43
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The false negative count counts the number of incorrect classifications, labelled as negative, when the ground truth label was positive."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"fn = sum((model_output != positive_label) * (gt_labels == positive_label) + 0.0)\n",
"fn"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 44,
"text": [
"4.0"
]
}
],
"prompt_number": 44
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Recall describes the ratio of correctly classified files against the files which were known to be correct. Recall = # TP / (# TP + # FN)"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"recall = tp / (tp + fn)\n",
"recall"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 45,
"text": [
"0.59999999999999998"
]
}
],
"prompt_number": 45
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The F-score is the harmonic mean of precision and recall, combining both measures:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"f_score = 2 * precision * recall / (precision + recall)\n",
"f_score"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 46,
"text": [
"0.66666666666666652"
]
}
],
"prompt_number": 46
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Alternatively, often we want to understand the performance of a single classifier over a range of different threshold parameter settings. A \"Receiver Operating Characteristics\" (ROC) curve plots true positive rate vs. false positive rate for different parameter settings. This depicts the relative trade-offs between true positive (benefits) and false positive (costs) for each parameter value.\n",
"\n",
"Plotting this curve is made easy with scikit.learn's [ROC](http://scikit-learn.org/stable/modules/model_evaluation.html#receiver-operating-characteristic-roc) functions. It is however, restricted to binary classifications (i.e. snare vs. non-snare)."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"from sklearn.metrics import roc_curve\n",
"roc_curve?"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 48
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# We can use roc_curve to produce the false and true positive rates for each example, given the labels and normalised scores. \n",
"# The scores represent the classifier's confidence of each classification.\n",
"# Since our classifications do not issue a confidence measure, we make them binary.\n",
"scores = (model_output == gt_labels) + 0.0\n",
"print scores\n",
"\n",
"# We indicate to roc_curve that the value 1 in gt_labels is our positive snare label.\n",
"fpr, tpr, thresholds = roc_curve(gt_labels, scores, pos_label=positive_label)\n",
"print fpr\n",
"print tpr\n",
"print thresholds"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[ 1. 1. 0. 0. 0. 1. 1. 1. 0. 1. 1. 1. 1. 1. 1. 1. 0. 1.\n",
" 0. 1.]\n",
"[ 0. 0.8 1. ]\n",
"[ 0. 0.6 1. ]\n",
"[ 2. 1. 0.]\n"
]
}
],
"prompt_number": 56
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The roc_auc_score function computes the area under the receiver operating characteristic (ROC) curve, which is also denoted by the acronyms AUC or AUROC. This summarises the behaviour of the system to one number."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"from sklearn.metrics import roc_auc_score, auc\n",
"\n",
"y_true = np.array([0, 0, 1, 1])\n",
"y_scores = np.array([0.1, 0.4, 0.35, 0.8])\n",
"roc_auc = roc_auc_score(y_true, y_scores)\n",
"roc_auc"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 61,
"text": [
"0.75"
]
}
],
"prompt_number": 61
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"binary_labels = (gt_labels == positive_label) + 0\n",
"print binary_labels\n",
"roc_auc = roc_auc_score(binary_labels, scores)\n",
"\n",
"roc_auc"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0]\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 66,
"text": [
"0.39999999999999997"
]
}
],
"prompt_number": 66
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Alternatively the area under curve can be computed directly from the positive rates.\n",
"roc_auc = auc(fpr, tpr)\n",
"roc_auc"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 59,
"text": [
"0.39999999999999997"
]
}
],
"prompt_number": 59
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can then plot an ROC curve with matplotlib"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from matplotlib.pyplot import *\n",
"\n",
"clf()\n",
"plot(fpr, tpr, '-x', label='ROC curve (area = %0.2f)' % roc_auc)\n",
"# Plot the line of no discrimination\n",
"plot([0, 1], [0, 1], 'k--')\n",
"xlim([0.0, 1.0])\n",
"ylim([0.0, 1.0])\n",
"xlabel('False Positive Rate')\n",
"ylabel('True Positive Rate')\n",
"title('Receiver Operating Characteristic')\n",
"legend(loc=\"lower right\")\n",
"show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\n/w8lX4hbcLTvYQAAAABJRU5ErkJggg==\n",
"text": [
"<matplotlib.figure.Figure at 0x3931b90>"
]
}
],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment