{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Inferencia sobre el Dataset Simplified Human Activity Tracking\n", "Dataset simplificado (el que vamos a usar): https://www.kaggle.com/mboaglio/simplifiedhuarus\n", "\n", "Clasificaremos la actividad que se estaba realizando: WALKING, WALKING_UPSTAIRS, WALKING_DOWNSTAIRS, SITTING, STANDING y LAYING\n", "\n", "Para cada registro en el dataset se proporciona:\n", "- Aceleración triaxial del acelerómetro (aceleración total) y la aceleración corporal estimada.\n", "- Velocidad angular triaxial desde el giroscopio.\n", "- Un vector de características 561 con variables de dominio de tiempo y frecuencia.\n", "- Su etiqueta de actividad.\n", "- Un identificador del sujeto que realizó el experimento.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Nombre del Endpoint con el modelo que armó Autopilot" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "ep_name = 'AutoML-Autopilot--notebook-run-01-15-10-53'" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import boto3,sys\n", "sm_rt = boto3.Session().client('runtime.sagemaker')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Loop para hacer inferencia de cada item del dataset. Calculo metricas del modelo.\n", "### Lo ideal aca es hacer un BATCH TRANSFORM con el dataset entero ... pero eso queda para otra demo :D" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Infiriendo y armando matriz de confusion:\n", ".....................................................................................................................................................................................\n", "Listo!\n" ] } ], "source": [ "import numpy\n", "\n", "activities = ['SITTING', 'WALKING', 'LAYING', 'WALKING_UPSTAIRS', 'WALKING_DOWNSTAIRS', 'STANDING']\n", "cm = numpy.zeros(shape=(6,6))\n", " \n", "print (\"Infiriendo y armando matriz de confusion:\")\n", "\n", "with open('had-autopilot-test.csv') as f:\n", " lines = f.readlines()\n", " for l in lines[1:]: \n", "\n", " # Saco el campo \"activity\" del registro y mando al endpoint el resto de los campos separados por una coma.\n", " # El campo \"activity\" es el \"label\" que vamos a predecir con el endpoint.\n", " l = l.split(',') \n", " label = l[0] \n", " l = l[1:] \n", " l = ','.join(l)\n", " \n", " response = sm_rt.invoke_endpoint(EndpointName=ep_name, ContentType='text/csv', Accept='text/csv', Body=l)\n", "\n", " # Saco el newline del body\n", " response = response['Body'].read().decode(\"utf-8\")\n", " response = response.rstrip(\"\\n\")\n", " \n", " # Armo la matriz de confusion sumando las labels vs las labels inferidas por el modelo\n", " cm[activities.index(label), activities.index(response)] = cm[activities.index(label), activities.index(response)] + 1\n", " \n", " print (\".\", end =\"\")\n", "\n", " \n", "print (\"\\nListo!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Armo y muestro Matriz de confusión\n", "## La muestro como Heatmap" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import seaborn as sn\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "\n", "# Imprimo la matriz de confusion como Heatmap\n", "df_cm = pd.DataFrame(cm, index = [i for i in activities],\n", " columns = [i for i in activities])\n", "plt.figure(figsize = (10,7))\n", "sn.heatmap(df_cm, annot=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Accuracy del modelo" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Accuracy: 0.9779005524861878\n" ] } ], "source": [ "accuracy = cm.diagonal().sum() / cm.sum()\n", "print(\"Accuracy: {}\".format(accuracy))" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (Data Science)", "language": "python", "name": "python3__SAGEMAKER_INTERNAL__arn:aws:sagemaker:us-east-2:429704687514:environment/datascience" }, "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.7.6" } }, "nbformat": 4, "nbformat_minor": 4 }