{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Classification Example" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from sklearn import datasets, metrics\n", "import matplotlib.pyplot as plt\n", "\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load dataset" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "digits = datasets.load_digits()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## View sample image" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(3, 3))\n", "plt.imshow(digits.images[10], cmap=plt.cm.gray_r)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Actual image pixel matrix" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0., 0., 1., 9., 15., 11., 0., 0.],\n", " [ 0., 0., 11., 16., 8., 14., 6., 0.],\n", " [ 0., 2., 16., 10., 0., 9., 9., 0.],\n", " [ 0., 1., 16., 4., 0., 8., 8., 0.],\n", " [ 0., 4., 16., 4., 0., 8., 8., 0.],\n", " [ 0., 1., 16., 5., 1., 11., 3., 0.],\n", " [ 0., 0., 12., 12., 10., 10., 0., 0.],\n", " [ 0., 0., 1., 10., 13., 3., 0., 0.]])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "digits.images[10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Flattened vector" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0., 0., 1., 9., 15., 11., 0., 0., 0., 0., 11.,\n", " 16., 8., 14., 6., 0., 0., 2., 16., 10., 0., 9.,\n", " 9., 0., 0., 1., 16., 4., 0., 8., 8., 0., 0.,\n", " 4., 16., 4., 0., 8., 8., 0., 0., 1., 16., 5.,\n", " 1., 11., 3., 0., 0., 0., 12., 12., 10., 10., 0.,\n", " 0., 0., 0., 1., 10., 13., 3., 0., 0.])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "digits.data[10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Image class label" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "digits.target[10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Build train and test datasets" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(1257, 64) (540, 64)\n" ] } ], "source": [ "X_digits = digits.data\n", "y_digits = digits.target\n", "\n", "num_data_points = len(X_digits)\n", "X_train = X_digits[:int(.7 * num_data_points)]\n", "y_train = y_digits[:int(.7 * num_data_points)]\n", "X_test = X_digits[int(.7 * num_data_points):]\n", "y_test = y_digits[int(.7 * num_data_points):]\n", "print(X_train.shape, X_test.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Train Model" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn import linear_model\n", "\n", "logistic = linear_model.LogisticRegression()\n", "logistic.fit(X_train, y_train)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Predict and Evaluate Performance" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Logistic Regression mean accuracy: 0.900000\n" ] } ], "source": [ "print('Logistic Regression mean accuracy: %f' % logistic.score(X_test, y_test))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Load Wisconsin Breast Cancer Dataset" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(569, 30) ['mean radius' 'mean texture' 'mean perimeter' 'mean area'\n", " 'mean smoothness' 'mean compactness' 'mean concavity'\n", " 'mean concave points' 'mean symmetry' 'mean fractal dimension'\n", " 'radius error' 'texture error' 'perimeter error' 'area error'\n", " 'smoothness error' 'compactness error' 'concavity error'\n", " 'concave points error' 'symmetry error' 'fractal dimension error'\n", " 'worst radius' 'worst texture' 'worst perimeter' 'worst area'\n", " 'worst smoothness' 'worst compactness' 'worst concavity'\n", " 'worst concave points' 'worst symmetry' 'worst fractal dimension']\n" ] } ], "source": [ "import numpy as np\n", "from sklearn.datasets import load_breast_cancer\n", "\n", "# load data\n", "data = load_breast_cancer()\n", "X = data.data\n", "y = data.target\n", "print(X.shape, data.feature_names)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Partition based Clustering Example" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0 0 0 1 0 1 0 1 1 1]\n" ] } ], "source": [ "from sklearn.cluster import KMeans\n", "\n", "km = KMeans(n_clusters=2, random_state=2)\n", "km.fit(X)\n", "\n", "labels = km.labels_\n", "centers = km.cluster_centers_\n", "print(labels[:10])" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "from sklearn.decomposition import PCA\n", "\n", "pca = PCA(n_components=2)\n", "bc_pca = pca.fit_transform(X)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nchU/TigAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 4))\n", "fig.suptitle('Visualizing breast cancer clusters')\n", "fig.subplots_adjust(top=0.85, wspace=0.5)\n", "ax1.set_title('Actual Labels')\n", "ax2.set_title('Clustered Labels')\n", "\n", "for i in range(len(y)):\n", " if y[i] == 0:\n", " c1 = ax1.scatter(bc_pca[i,0], bc_pca[i,1],c='g', marker='.')\n", " if y[i] == 1:\n", " c2 = ax1.scatter(bc_pca[i,0], bc_pca[i,1],c='r', marker='.')\n", " \n", " if labels[i] == 0:\n", " c3 = ax2.scatter(bc_pca[i,0], bc_pca[i,1],c='g', marker='.')\n", " if labels[i] == 1:\n", " c4 = ax2.scatter(bc_pca[i,0], bc_pca[i,1],c='r', marker='.')\n", "\n", "l1 = ax1.legend([c1, c2], ['0', '1'])\n", "l2 = ax2.legend([c3, c4], ['0', '1'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Hierarchical Clustering Example" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 287. 336. 3.81596727 2. ]\n", " [ 106. 420. 4.11664267 2. ]\n", " [ 55. 251. 4.93361024 2. ]\n", " ..., \n", " [ 1130. 1132. 6196.07482529 86. ]\n", " [ 1131. 1133. 8368.99225244 483. ]\n", " [ 1134. 1135. 18371.10293626 569. ]]\n" ] } ], "source": [ "from scipy.cluster.hierarchy import dendrogram, linkage\n", "import numpy as np\n", "np.set_printoptions(suppress=True)\n", "\n", "Z = linkage(X, 'ward')\n", "print(Z)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(8, 3))\n", "plt.title('Hierarchical Clustering Dendrogram')\n", "plt.xlabel('Data point')\n", "plt.ylabel('Distance')\n", "dendrogram(Z)\n", "plt.axhline(y=10000, c='k', ls='--', lw=0.5)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "from scipy.cluster.hierarchy import fcluster\n", "\n", "max_dist = 10000\n", "hc_labels = fcluster(Z, max_dist, criterion='distance')" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 4))\n", "fig.suptitle('Visualizing breast cancer clusters')\n", "fig.subplots_adjust(top=0.85, wspace=0.5)\n", "ax1.set_title('Actual Labels')\n", "ax2.set_title('Hierarchical Clustered Labels')\n", "\n", "for i in range(len(y)):\n", " if y[i] == 0:\n", " c1 = ax1.scatter(bc_pca[i,0], bc_pca[i,1],c='g', marker='.')\n", " if y[i] == 1:\n", " c2 = ax1.scatter(bc_pca[i,0], bc_pca[i,1],c='r', marker='.')\n", " \n", " if hc_labels[i] == 1:\n", " c3 = ax2.scatter(bc_pca[i,0], bc_pca[i,1],c='g', marker='.')\n", " if hc_labels[i] == 2:\n", " c4 = ax2.scatter(bc_pca[i,0], bc_pca[i,1],c='r', marker='.')\n", "\n", "l1 = ax1.legend([c1, c2], ['0', '1'])\n", "l2 = ax2.legend([c3, c4], ['1', '2'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Classification Model Evaluation Metrics" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(398, 30) (171, 30)\n" ] } ], "source": [ "from sklearn.model_selection import train_test_split\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)\n", "print(X_train.shape, X_test.shape)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False)" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn import linear_model\n", "\n", "logistic = linear_model.LogisticRegression()\n", "logistic.fit(X_train,y_train)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Confusion Matrix" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Predicted: \n", " 0 1\n", "Actual: 0 59 4\n", " 1 2 106\n" ] } ], "source": [ "import model_evaluation_utils as meu\n", "\n", "y_pred = logistic.predict(X_test)\n", "meu.display_confusion_matrix(true_labels=y_test, predicted_labels=y_pred, classes=[0, 1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## True Positive, False Positive, True Negative and False Negative" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "positive_class = 1\n", "TP = 106\n", "FP = 4\n", "TN = 59\n", "FN = 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Accuracy" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Framework Accuracy: 0.96491\n", "Manually Computed Accuracy: 0.96491\n" ] } ], "source": [ "fw_acc = round(meu.metrics.accuracy_score(y_true=y_test, y_pred=y_pred), 5)\n", "mc_acc = round((TP + TN) / (TP + TN + FP + FN), 5)\n", "print('Framework Accuracy:', fw_acc)\n", "print('Manually Computed Accuracy:', mc_acc)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Precision" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Framework Precision: 0.96364\n", "Manually Computed Precision: 0.96364\n" ] } ], "source": [ "fw_prec = round(meu.metrics.precision_score(y_true=y_test, y_pred=y_pred), 5)\n", "mc_prec = round((TP) / (TP + FP), 5)\n", "print('Framework Precision:', fw_prec)\n", "print('Manually Computed Precision:', mc_prec)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Recall" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Framework Recall: 0.98148\n", "Manually Computed Recall: 0.98148\n" ] } ], "source": [ "fw_rec = round(meu.metrics.recall_score(y_true=y_test, y_pred=y_pred), 5)\n", "mc_rec = round((TP) / (TP + FN), 5)\n", "print('Framework Recall:', fw_rec)\n", "print('Manually Computed Recall:', mc_rec)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## F1-Score" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Framework F1-Score: 0.97248\n", "Manually Computed F1-Score: 0.97248\n" ] } ], "source": [ "fw_f1 = round(meu.metrics.f1_score(y_true=y_test, y_pred=y_pred), 5)\n", "mc_f1 = round((2*mc_prec*mc_rec) / (mc_prec+mc_rec), 5)\n", "print('Framework F1-Score:', fw_f1)\n", "print('Manually Computed F1-Score:', mc_f1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ROC Curve and AUC" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "meu.plot_model_roc_curve(clf=logistic, features=X_test, true_labels=y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Clustering Model Evaluation Metrics" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Build two clustering models on the breast cancer dataset" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "km2 = KMeans(n_clusters=2, random_state=42).fit(X)\n", "km2_labels = km2.labels_\n", "\n", "km5 = KMeans(n_clusters=5, random_state=42).fit(X)\n", "km5_labels = km5.labels_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Homogeneity, Completeness and V-measure" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Homogeneity, Completeness, V-measure metrics for num clusters=2: [ 0.422 0.517 0.465]\n", "Homogeneity, Completeness, V-measure metrics for num clusters=5: [ 0.602 0.298 0.398]\n" ] } ], "source": [ "km2_hcv = np.round(metrics.homogeneity_completeness_v_measure(y, km2_labels), 3)\n", "km5_hcv = np.round(metrics.homogeneity_completeness_v_measure(y, km5_labels), 3)\n", "\n", "print('Homogeneity, Completeness, V-measure metrics for num clusters=2: ', km2_hcv)\n", "print('Homogeneity, Completeness, V-measure metrics for num clusters=5: ', km5_hcv)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Silhouette Coefficient" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Silhouette Coefficient for num clusters=2: 0.697264615606\n", "Silhouette Coefficient for num clusters=5: 0.510229299791\n" ] } ], "source": [ "from sklearn import metrics\n", "\n", "km2_silc = metrics.silhouette_score(X, km2_labels, metric='euclidean')\n", "km5_silc = metrics.silhouette_score(X, km5_labels, metric='euclidean')\n", "\n", "print('Silhouette Coefficient for num clusters=2: ', km2_silc)\n", "print('Silhouette Coefficient for num clusters=5: ', km5_silc)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Calinski-Harabaz Index" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Calinski-Harabaz Index for num clusters=2: 1300.20822689\n", "Calinski-Harabaz Index for num clusters=5: 1621.01105301\n" ] } ], "source": [ "km2_chi = metrics.calinski_harabaz_score(X, km2_labels)\n", "km5_chi = metrics.calinski_harabaz_score(X, km5_labels)\n", "\n", "print('Calinski-Harabaz Index for num clusters=2: ', km2_chi)\n", "print('Calinski-Harabaz Index for num clusters=5: ', km5_chi)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Model tuning" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Build and Evaluate Default Model" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Default Model Stats:\n", "Model Performance metrics:\n", "------------------------------\n", "Accuracy: 0.6316\n", "Precision: 0.3989\n", "Recall: 0.6316\n", "F1 Score: 0.489\n", "\n", "Model Classification report:\n", "------------------------------\n", " precision recall f1-score support\n", "\n", " 0 0.00 0.00 0.00 63\n", " 1 0.63 1.00 0.77 108\n", "\n", "avg / total 0.40 0.63 0.49 171\n", "\n", "\n", "Prediction Confusion Matrix:\n", "------------------------------\n", " Predicted: \n", " 0 1\n", "Actual: 0 0 63\n", " 1 0 108\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "C:\\Program Files\\Anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1113: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples.\n", " 'precision', 'predicted', average, warn_for)\n", "C:\\Program Files\\Anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1113: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n", " 'precision', 'predicted', average, warn_for)\n", "C:\\Program Files\\Anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1113: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples.\n", " 'precision', 'predicted', average, warn_for)\n" ] } ], "source": [ "from sklearn.model_selection import train_test_split\n", "from sklearn.svm import SVC\n", "\n", "# prepare datasets\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)\n", "\n", "# build default SVM model\n", "def_svc = SVC(random_state=42)\n", "def_svc.fit(X_train, y_train)\n", "\n", "# predict and evaluate performance\n", "def_y_pred = def_svc.predict(X_test)\n", "print('Default Model Stats:')\n", "meu.display_model_performance_metrics(true_labels=y_test, predicted_labels=def_y_pred, classes=[0,1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tune Model with Grid Search" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "# Tuning hyper-parameters for accuracy\n", "\n", "Grid scores for all the models based on CV:\n", "\n", "0.95226 (+/-0.06310) for {'C': 1, 'gamma': 0.001, 'kernel': 'linear'}\n", "0.91206 (+/-0.04540) for {'C': 1, 'gamma': 0.001, 'kernel': 'rbf'}\n", "0.95226 (+/-0.06310) for {'C': 1, 'gamma': 0.0001, 'kernel': 'linear'}\n", "0.92462 (+/-0.02338) for {'C': 1, 'gamma': 0.0001, 'kernel': 'rbf'}\n", "0.96231 (+/-0.04297) for {'C': 10, 'gamma': 0.001, 'kernel': 'linear'}\n", "0.90201 (+/-0.04734) for {'C': 10, 'gamma': 0.001, 'kernel': 'rbf'}\n", "0.96231 (+/-0.04297) for {'C': 10, 'gamma': 0.0001, 'kernel': 'linear'}\n", "0.92965 (+/-0.03425) for {'C': 10, 'gamma': 0.0001, 'kernel': 'rbf'}\n", "0.95729 (+/-0.05989) for {'C': 50, 'gamma': 0.001, 'kernel': 'linear'}\n", "0.90201 (+/-0.04734) for {'C': 50, 'gamma': 0.001, 'kernel': 'rbf'}\n", "0.95729 (+/-0.05989) for {'C': 50, 'gamma': 0.0001, 'kernel': 'linear'}\n", "0.93467 (+/-0.02975) for {'C': 50, 'gamma': 0.0001, 'kernel': 'rbf'}\n", "0.95477 (+/-0.05772) for {'C': 100, 'gamma': 0.001, 'kernel': 'linear'}\n", "0.90201 (+/-0.04734) for {'C': 100, 'gamma': 0.001, 'kernel': 'rbf'}\n", "0.95477 (+/-0.05772) for {'C': 100, 'gamma': 0.0001, 'kernel': 'linear'}\n", "0.93216 (+/-0.04674) for {'C': 100, 'gamma': 0.0001, 'kernel': 'rbf'}\n", "\n", "Best parameters set found on development set: {'C': 10, 'gamma': 0.001, 'kernel': 'linear'}\n", "Best model validation accuracy: 0.962311557789\n" ] } ], "source": [ "from sklearn.model_selection import GridSearchCV\n", "\n", "# setting the parameter grid\n", "grid_parameters = {'kernel': ['linear', 'rbf'], \n", " 'gamma': [1e-3, 1e-4],\n", " 'C': [1, 10, 50, 100]}\n", "\n", "# perform hyperparameter tuning\n", "print(\"# Tuning hyper-parameters for accuracy\\n\")\n", "clf = GridSearchCV(SVC(random_state=42), grid_parameters, cv=5, scoring='accuracy')\n", "clf.fit(X_train, y_train)\n", "# view accuracy scores for all the models\n", "print(\"Grid scores for all the models based on CV:\\n\")\n", "means = clf.cv_results_['mean_test_score']\n", "stds = clf.cv_results_['std_test_score']\n", "for mean, std, params in zip(means, stds, clf.cv_results_['params']):\n", " print(\"%0.5f (+/-%0.05f) for %r\" % (mean, std * 2, params))\n", "# check out best model performance\n", "print(\"\\nBest parameters set found on development set:\", clf.best_params_)\n", "print(\"Best model validation accuracy:\", clf.best_score_)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Evaluate Grid Search Tuned Model" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "Tuned Model Stats:\n", "Model Performance metrics:\n", "------------------------------\n", "Accuracy: 0.9708\n", "Precision: 0.9709\n", "Recall: 0.9708\n", "F1 Score: 0.9708\n", "\n", "Model Classification report:\n", "------------------------------\n", " precision recall f1-score support\n", "\n", " 0 0.95 0.97 0.96 63\n", " 1 0.98 0.97 0.98 108\n", "\n", "avg / total 0.97 0.97 0.97 171\n", "\n", "\n", "Prediction Confusion Matrix:\n", "------------------------------\n", " Predicted: \n", " 0 1\n", "Actual: 0 61 2\n", " 1 3 105\n" ] } ], "source": [ "gs_best = clf.best_estimator_\n", "tuned_y_pred = gs_best.predict(X_test)\n", "\n", "print('\\n\\nTuned Model Stats:')\n", "meu.display_model_performance_metrics(true_labels=y_test, predicted_labels=tuned_y_pred, classes=[0,1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tune Model with Randomized Search" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Best parameters set found on development set:\n" ] }, { "data": { "text/plain": [ "{'C': 14.04405516688006, 'gamma': 0.001417040830835984, 'kernel': 'linear'}" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import scipy\n", "from sklearn.model_selection import RandomizedSearchCV\n", "\n", "param_grid = {'C': scipy.stats.expon(scale=10), \n", " 'gamma': scipy.stats.expon(scale=.1),\n", " 'kernel': ['rbf', 'linear']}\n", "\n", "random_search = RandomizedSearchCV(SVC(random_state=42), param_distributions=param_grid,\n", " n_iter=50, cv=5)\n", "random_search.fit(X_train, y_train)\n", "\n", "print(\"Best parameters set found on development set:\")\n", "random_search.best_params_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Evaluate Randomized Search Tuned Model" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Accuracy: 0.9649\n", "Precision: 0.9649\n", "Recall: 0.9649\n", "F1 Score: 0.9649\n" ] } ], "source": [ "rs_best = random_search.best_estimator_\n", "rs_y_pred = rs_best.predict(X_test)\n", "meu.get_metrics(true_labels=y_test, predicted_labels=rs_y_pred)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Model Interpretation" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "from skater.core.explanations import Interpretation\n", "from skater.model import InMemoryModel\n", "\n", "interpreter = Interpretation(X_test, feature_names=data.feature_names)\n", "model = InMemoryModel(logistic.predict_proba, examples=X_train, target_names=logistic.classes_)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Visualize Feature Importances" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[30/30] features ████████████████████ Time elapsed: 0 seconds" ] }, { "data": { "image/png": "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\nQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plots = interpreter.feature_importance.plot_feature_importance(model, ascending=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## One-way partial dependence plot" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[50/50] grid cells ████████████████████ Time elapsed: 3 seconds" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "p = interpreter.partial_dependence.plot_partial_dependence(['worst area'], model, grid_resolution=50, \n", " with_variance=True, figsize = (6, 4))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Explaining Predictions" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "from skater.core.local_interpretation.lime.lime_tabular import LimeTabularExplainer\n", "exp = LimeTabularExplainer(X_train, feature_names=data.feature_names, \n", " discretize_continuous=True, class_names=['0', '1'])" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", "
\n", " \n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "exp.explain_instance(X_test[0], logistic.predict_proba).show_in_notebook()" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", "
\n", " \n", " \n", " " ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "exp.explain_instance(X_test[1], logistic.predict_proba).show_in_notebook()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Model Deployment" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Persist model to disk" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['lr_model.pkl']" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.externals import joblib\n", "joblib.dump(logistic, 'lr_model.pkl') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load model from disk" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False)" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lr = joblib.load('lr_model.pkl') \n", "lr" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Predict with loaded model" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1] [1]\n" ] } ], "source": [ "print(lr.predict(X_test[10:11]), y_test[10:11])" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [default]", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 1 }