Solution
Vicky answered on
Oct 22 2021
09_random_forests/.ipynb_checkpoints/Untitled-checkpoint.ipyn
{
"cells": [
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.datasets import load_
east_cancer\n",
"\n",
"from sklearn.ensemble import RandomForestClassifier, ExtraTreesClassifier\n",
"from sklearn.tree import DecisionTreeClassifier\n",
"from sklearn.model_selection import train_test_split, cross_val_score\n",
"from sklearn.metrics import (confusion_matrix, accuracy_score, recall_score,\n",
" precision_score)\n",
"\n",
"from collections import OrderedDict\n",
"\n",
"\n",
"class CancerClassifier:\n",
" '''\n",
" A general class to try out different sklearn classifiers\n",
" on the cancer dataset\n",
" '''\n",
" def __init__(self, classifier, train_ratio: float = 0.7):\n",
" self.classifier = classifier\n",
" cancer = load_
east_cancer()\n",
" self.X = cancer.data # all feature vectors\n",
" self.t = cancer.target # all co
esponding labels\n",
" self.X_train, self.X_test, self.t_train, self.t_test =\\\n",
" train_test_split(\n",
" cancer.data, cancer.target,\n",
" test_size=1-train_ratio, random_state=109)\n",
"\n",
" # Fit the classifier to the training data here\n",
" self.classifier.fit(self.X_train, self.t_train)\n",
"\n",
" def confusion_matrix(self) -> np.nda
ay:\n",
" '''Returns the confusion matrix on the test data\n",
" '''\n",
" return confusion_matrix(self.t_test, self.classifier.predict(self.X_test))\n",
" \n",
"\n",
" def accuracy(self) -> float:\n",
" '''Returns the accuracy on the test data\n",
" '''\n",
" return accuracy_score(self.t_test, self.classifier.predict(self.X_test))\n",
"\n",
" def precision(self) -> float:\n",
" '''Returns the precision on the test data\n",
" '''\n",
" return precision_score(self.t_test, self.classifier.predict(self.X_test))\n",
"\n",
" def recall(self) -> float:\n",
" '''Returns the recall on the test data\n",
" '''\n",
" return recall_score(self.t_test, self.classifier.predict(self.X_test))\n",
"\n",
" def cross_validation_accuracy(self) -> float:\n",
" '''Returns the average 10-fold cross validation\n",
" accuracy on the entire dataset.\n",
" '''\n",
" return np.mean(cross_val_score(self.classifier,self.X,self.t,cv=10))\n",
"\n",
" def feature_importance(self) -> list:\n",
" '''\n",
" Draw and show a barplot of feature importances\n",
" for the cu
ent classifier and return a list of\n",
" indices, sorted by feature importance (high to low).\n",
" '''\n",
" plt.bar(range(len(self.classifier.feature_importances_[:5])), self.classifier.feature_importances_[:5])\n",
" plt.xlabel(\"Feature index\")\n",
" plt.ylabel(\"Feature importance\")\n",
" plt.show()\n",
" return np.argsort(self.classifier.feature_importances_)[::-1]\n",
"\n",
"\n",
"def _plot_oob_e
or():\n",
" RANDOM_STATE = 1337\n",
" ensemble_clfs = [\n",
" (\"RandomForestClassifier, max_features='sqrt'\",\n",
" RandomForestClassifier(\n",
" n_estimators=100,\n",
" warm_start=True,\n",
" oob_score=True,\n",
" max_features=\"sqrt\",\n",
" random_state=RANDOM_STATE)),\n",
" (\"RandomForestClassifier, max_features='log2'\",\n",
" RandomForestClassifier(\n",
" n_estimators=100,\n",
" warm_start=True,\n",
" max_features='log2',\n",
" oob_score=True,\n",
" random_state=RANDOM_STATE)),\n",
" (\"RandomForestClassifier, max_features=None\",\n",
" RandomForestClassifier(\n",
" n_estimators=100,\n",
" warm_start=True,\n",
" max_features=None,\n",
" oob_score=True,\n",
" random_state=RANDOM_STATE))]\n",
"\n",
" # Map a classifier name to a list of (, or rate>) pairs.\n",
" e
or_rate = OrderedDict((label, []) for label, _ in ensemble_clfs)\n",
"\n",
" min_estimators = 30\n",
" max_estimators = 175\n",
"\n",
" for label, clf in ensemble_clfs:\n",
" for i in range(min_estimators, max_estimators + 1):\n",
" clf.set_params(n_estimators=i)\n",
" cancer = load_
east_cancer()\n",
" clf.fit(cancer.data, cancer.target) # Use cancer data here\n",
" oob_e
or = 1 - clf.oob_score_\n",
" e
or_rate[label].append((i, oob_e
or))\n",
"\n",
" # Generate the \"OOB e
or rate\" vs. \"n_estimators\" plot.\n",
" for label, clf_e
in e
or_rate.items():\n",
" xs, ys = zip(*clf_e
)\n",
" plt.plot(xs, ys, label=label)\n",
"\n",
" plt.xlim(min_estimators, max_estimators)\n",
" plt.xlabel(\"n_estimators\")\n",
" plt.ylabel(\"OOB e
or rate\")\n",
" plt.legend(loc=\"upper right\")\n",
" plt.show()\n",
"\n",
"\n",
"def _plot_extreme_oob_e
or():\n",
" RANDOM_STATE = 1337\n",
" ensemble_clfs = [\n",
" (\"ExtraTreesClassifier, max_features='sqrt'\",\n",
" ExtraTreesClassifier(\n",
" n_estimators=100,\n",
" warm_start=True,\n",
" bootstrap=True,\n",
" oob_score=True,\n",
" max_features=\"sqrt\",\n",
" random_state=RANDOM_STATE)),\n",
" (\"ExtraTreesClassifier, max_features='log2'\",\n",
" ExtraTreesClassifier(\n",
" n_estimators=100,\n",
" warm_start=True,\n",
" bootstrap=True,\n",
" max_features='log2',\n",
" oob_score=True,\n",
" random_state=RANDOM_STATE)),\n",
" (\"ExtraTreesClassifier, max_features=None\",\n",
" ExtraTreesClassifier(\n",
" n_estimators=100,\n",
" warm_start=True,\n",
" bootstrap=True,\n",
" max_features=None,\n",
" oob_score=True,\n",
" random_state=RANDOM_STATE))]\n",
"\n",
" # Map a classifier name to a list of (, or rate>) pairs.\n",
" e
or_rate = OrderedDict((label, []) for label, _ in ensemble_clfs)\n",
"\n",
" min_estimators = 30\n",
" max_estimators = 175\n",
"\n",
" for label, clf in ensemble_clfs:\n",
" for i in range(min_estimators, max_estimators + 1):\n",
" clf.set_params(n_estimators=i)\n",
" cancer = load_
east_cancer()\n",
" clf.fit(cancer.data, cancer.target) # Use cancer data here\n",
" oob_e
or = 1 - clf.oob_score_\n",
" e
or_rate[label].append((i, oob_e
or))\n",
"\n",
" # Generate the \"OOB e
or rate\" vs. \"n_estimators\" plot.\n",
" for label, clf_e
in e
or_rate.items():\n",
" xs, ys = zip(*clf_e
)\n",
" plt.plot(xs, ys, label=label)\n",
"\n",
" plt.xlim(min_estimators, max_estimators)\n",
" plt.xlabel(\"n_estimators\")\n",
" plt.ylabel(\"OOB e
or rate\")\n",
" plt.legend(loc=\"upper right\")\n",
" plt.show()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Now run `CancerClassifier` with a `DecisionTreeClassifier`. and evaluate the performance with the methods that you have finished implementing. Answer the following questions:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. Upload the result for each metric (confusion matrix, accuracy, precision, recall, cross validation accuracy)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 59 4]\n",
" [ 3 105]]\n",
"0.9590643274853801\n",
"0.963302752293578\n",
"0.9722222222222222\n",
"0.9209586466165414\n"
]
}
],
"source": [
"classifier_type = sklearn.tree.DecisionTreeClassifier()\n",
"cc = CancerClassifier(classifier_type)\n",
"print(cc.confusion_matrix())\n",
"print(cc.accuracy())\n",
"print(cc.precision())\n",
"print(cc.recall())\n",
"print(cc.cross_validation_accuracy())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
Confusion Matrix =
[[ 59 4]\n",
" [ 3 105]]\n",
" \n",
"
Accuracy =
0.9590643274853801\n",
"\n",
"
Precision =
0.963302752293578\n",
"\n",
"
Recall =
0.9722222222222222\n",
"\n",
"
Cross Validation Accuracy =
0.9209586466165414"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. What does the precision and recall tell us that the accuracy can't?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
Recall:
The ability of a model to find all the relevant cases within a data set. Mathematically, we define recall as the number of true positives divided by the number of true positives plus the number of false negatives.\n",
"\n",
"
Precision:
The ability of a classification model to identify only the relevant data points. Mathematically, precision the number of true positives divided by the number of true positives plus the number of false positives."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 3. What could possibly explain the difference between accuracy and cross validation accuracy?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The Accuracy of the model is the average of the accuracy of each fold. That cross validation is a procedure used to avoid overfitting and estimate the skill of the model on new data. There are common tactics that you can use to select the value of k for your dataset."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 4. How would you suggest a confusion matrix, precision and recall for cross validation would be formulated?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Confusion Matrix = [[TP FP] \n",
"[FN TN]]\n",
"\n",
"Precision = TP/(TP+FP)\n",
"\n",
"Recall = TP/(TP+FN)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. Upload the result for each metric (confusion matrix, accuracy, precision, recall, cross validation accuracy)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 58 5]\n",
" [ 0 108]]\n",
"0.9707602339181286\n",
"0.9557522123893806\n",
"1.0\n",
"0.9596491228070176\n"
]
}
],
"source": [
"classifier_type = sklearn.ensemble.RandomForestClassifier()\n",
"cc = CancerClassifier(classifier_type)\n",
"print(cc.confusion_matrix())\n",
"print(cc.accuracy())\n",
"print(cc.precision())\n",
"print(cc.recall())\n",
"print(cc.cross_validation_accuracy())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
Confusion Matrix =
[[ 58 5]\n",
" [ 0 108]]\n",
" \n",
"
Accuracy =
0.9707602339181286\n",
"\n",
"
Precision =
0.9557522123893806\n",
"\n",
"
Recall =
1.0\n",
"\n",
"
Cross Validation Accuracy =
0.9596491228070176"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. What is the best combination of a total number of trees in the forest (`n_estimators`) and the maximum number of features considered in each split (`max_features`) that you can find? What are the metric results for this parameter selection?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"n_exstimators = 135, max_features=None"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"a
ay([ 7, 27, 6, 22, 20, 23, 26, 3, 0, 2, 13, 1, 24, 21, 5, 25, 19,\n",
" 10, 28, 4, 12, 11, 29, 16, 9, 17, 14, 15, 8, 18], dtype=int64)"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cc = CancerClassifier(classifier_type)\n",
"feature_idx = cc.feature_importance()\n",
"feature_idx"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. Describe how feature importance is calculated"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Feature importance is calculated as the decrease in node impurity weighted by the probability of reaching that node. The node probability can be calculated by the number of samples that reach the node, divided by the total number of samples. The higher the value the more important the feature."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. Which feature is the most important and which is the least important. Use information from either [assignment 8](../08_SVM/README.md) or [here](https:
www.kaggle.com/uciml
east-cancer-wisconsin-data) to name these features."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Feature 7,27,6,22,20 are most important and feature 17,14,15,8,18 are least important."
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
jF
vOfaWtr44QTTuCRRx7h97
PVVVVVx22WXk5+fzxhtvMGHCBKqqqigtLaWqqoolS5awfv16
9dmpqaqiurqa0tJSHHnqIRYsW8fnnnwPw4IMPMmfOHP7xj39w3XU63UwpxT
+U+KimKLYHRmyJAhuFwugsEg3/72t6mqqkIpxRVXXMH111/PO++8wxVXXEFBQQEnnngi69atY9OmTaxatYo1a9bg8/lobW3F6/WydetWKisrWbBgAbNmzaKkpCTl+W0jIv3+NWPGDBHvPpHbikX+tUyi6PCL3FYi8spPRdpb9T6v/UL6I1u2bAm/v331Jrno4X9n9HX76k0p5zBo0CAREeno6JALL7xQ1q1bJyIiTU1NEggERETkpZdekgvmny2y611Z+cAdMnbsWNm/f7+0tbXJoYceKp9
nU1NTI6NGjpb6+Xt
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
OMfOemkkzjxxBPDTc9aWlpYs2ZN+Ji
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
1MJroKhujCi89R5YEgV2ZfpvB
76ioAjxG5ejiCigo1SX6nf99WjiCIwXegJfmQHNYcJTnRMxNhxYbPo5UUVXxNIdUGkfAp0uFJ7rpDhoGyhUnTyOmxIc1+qonsrhzU2gcLreu7HsgcBdFhwZ7bAouZQQgOE+dBwZr3bZ42PH/pYM1l8j60FQ0QhcZdf73aeMIjhSYobjlBboYYZlb3wSzs7IZXqC1iKQaR6Kigqk0juYYARBLlstIXIv5wscWFbQWjQsLlUxqHIbgiFd2xAx5PFANkkwfhxkaHC8oIRHJwpsdMkuqgIXiCp20F9sdsCuYddvM73xsO2hznaNxpIUjOFJgCo6wqWqQFhZleUPJy9aNT5IKjkShh+4i
SeMBfDhnYQLxekk8ZREanPExYqGQ7HhfhJgHZCYTOJu8gIDfZFzg/2TGU9VZXVoTOpvhd2/H92Meu2ddI4VKSBVLJkWoe4OIIjBWaGeFhwGA7xspxi3C5dfympqSqZI7BoeOKblZ0aS3E1jhiBUzwiUp/HY2TLZrLHctg5Hk/jqEle6iPTxM6luU
+P1IY/FKmAdepZU3wtzWyZu5rFatvm7KCyLhLk72mba2BIcSqkTlVLfMt4PM7r6DQg6mapKDgdgmCvPnsaRzEFcnCR6JJWpCuI7ET01utqrWVTQ/BE210aiuzJpOsoxOhDGmqrM6K4D5RgHi9nM8LeYQQmpmmWBvqEEjJpiDj2HWbctVdFJyMzNPKxlG7+DcKFRi+AqGq6/v74e7FDZz0hZd0IpdRswEzgaWIlu6Pw0MMfGsWcAD6E7AD4mInfHbFfG9rPQHQAXisi7lu0uoArYJSLnGOvuA84F/MB24FsikqBvafep99ZTmFNIQU4BAGWlRwNQvm8nWS
hByy8G1/GfbEScQDfLs+IA/433dbadkU3
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
gFOGTuHUocqOF/WpJzguBU5U
hRpVRSRN4PPMlRJzism6JyJR/xR3hmcg+zSxkChLhv/7II5GUc09/Da04s1Xl87aYR7nt+hnPXn8ir1r6KVx7zyrqff9OGN3H3
u5P3F/w/00G/pHEHzEB8rNSJXtY2985Eb2zO+hWPSRKc6TmHgFx4/0cc6G0gT5upPi3P3sNDv3JzlxNMpZ6wec9954yiiPH0iy/cB9pAZuJZHYgC9nhS0fXMzy+xdmKgSHdVNfvHmMHzywl/ue
z/ayfTC1mePDDvCI7n557nhoduoDfQy1f
Rgm5jNVTXiJZJpMrlhXcPzzE
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
FpDAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"_plot_oob_e
or()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. What can be said about the relationship between the OOB e
or rate and the number of estimators?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As number of estimators increases, the OOB e
or rate decreases."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. Do all three types of ensembles follow this co
elation?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Yes, as overall all three types of ensembles follow this co
elation."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. Upload the result for each metric (confusion matrix, accuracy, precision, recall, cross validation accuracy)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 59 4]\n",
" [ 0 108]]\n",
"0.9766081871345029\n",
"0.9642857142857143\n",
"1.0\n",
"0.9683583959899748\n"
]
}
],
"source": [
"classifier_type = sklearn.ensemble.ExtraTreesClassifier()\n",
"cc = CancerClassifier(classifier_type)\n",
"print(cc.confusion_matrix())\n",
"print(cc.accuracy())\n",
"print(cc.precision())\n",
"print(cc.recall())\n",
"print(cc.cross_validation_accuracy())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
Confusion Matrix =
[[ 59 4]\n",
" [ 0 108]]\n",
" \n",
"
Accuracy =
0.9766081871345029\n",
"\n",
"
Precision =
0.9642857142857143\n",
"\n",
"
Recall =
1.0\n",
"\n",
"
Cross Validation Accuracy =
0.9683583959899748"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. What is the most important feature and the least important feature?"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"image/png":...