{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Problema 1 - Estimando o consumo de veículos\n", "\n", "* Minicurso _Machine Learning -- Hands on com Python_\n", "* Samsung Ocean Manaus\n", "* Facilitadora: Elloá B. Guedes \n", "* Repositório: http://bit.ly/mlpython\n", "* Nome:\n", "* Email: " ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "### Bibliotecas\n", "\n", "Por hábito, a primeira célula do notebook costuma ser reservada para importação de bibliotecas.\n", "A cada biblioteca nova acrescida, é necessário executar a célula para atualização e correta execução." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Abertura do Dataset\n", "\n", "Abra o dataset e visualize o seu cabeçalho, isto é, os primeiros exemplos nele contidos.\n", "Isto é útil para checar se a importação foi realizada de maneira adequada e se a disposição dos dados está de acordo para os próximos passos do trabalho." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Conhecendo o dataset\n", "\n", "Para praticar conceitos relativos à exploração do conjunto de dados, utilize as células a seguir para prover respostas para as seguintes perguntas:\n", "\n", "1. Quantos exemplos há no dataset?\n", "2. Quais os atributos existentes no dataset?\n", "3. Quais os nomes dos carros existentes no dataset?\n", "4. Quais as características do 'chevrolet camaro'?\n", "5. Qual a média de consumo, em galões por litro, dos carros existentes no dataset?" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Preparação dos dados\n", "\n", "1. Existem exemplos com dados faltantes. Para fins de simplificação, elimine-os do dataset.\n", "2. Exclua a coluna com os nomes dos carros\n", "3. Converta mpg para km/l sabendo que: 1 mpg = 0.425 km/l. Utilize apenas duas casas decimais nesta conversão.\n", "4. Remova a coluna mpg e insira a coluna kml no dataset." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Organização dos dados para treinamento\n", "\n", "1. Remova a coluna kml e atribua-a a uma variável Y\n", "2. Atribua os demais valores do dataset a uma variável X\n", "3. Efetue uma partição holdout 70/30 com o sklearn" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Necessário importar: from sklearn.model_selection import train_test_split\n", "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.30)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Treinamento de um modelo de regressão linear\n", "\n", "1. Importe o modelo da biblioteca sklearn\n", "2. Instancie o modelo com parâmetros padrão (default)\n", "3. Execute o algoritmo de treinamento com os dados de treino" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "regr = LinearRegression()\n", "\n", "# Train the model using the training sets\n", "regr.fit(X_train, Y_train)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Teste do modelo\n", "\n", "Vamos observar a saída do modelo para um exemplo individual existente nos dados de treino:\n", "* Atributos preditores: X_test[2:3]\n", "* Atributo alvo: Y_test.iloc[2]\n", "* Qual o resultado previsto para o modelo, dados estes atributos preditores?" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Teste do modelo\n", "\n", "1. Obtenha o erro médio quadrático para todos os dados de teste\n", " * Efetue a importação de mean_squared_error do pacote sklearn.metrics\n", " * Trata-se do somatório do quadrado das diferenças entre valores previstos pelo modelo e observados na prática\n", " * Quanto mais próximo de zero, melhor este resultado\n", "2. Obtenha o r^2 para os dados de teste\n", " * Efetue a importação de r2_score do pacote sklearn.metrics\n", " * Trata-se de um valor no intervalo [0,1]\n", " * Quanto mais próximo de 1, melhor é o modelo" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Obtendo e visualizando os resíduos\n", "\n", "Uma maneira muito comum de visualizarmos o quão bom certo modelo é para aprender determinados padrões dá-se por meio da visualização dos resíduos, isto é, da diferença entre os valores previstos e observados. Adapte o código a seguir para calcular os resíduos produzidos pelo seu modelo." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "residuos = []\n", "for (x,y) in zip(Y_test,Y_predito):\n", " residuos.append((x-y)**2)\n", "residuos" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "x = [0,int(max(Y_test))]\n", "y = [0,0]\n", "plt.plot(x,y,linewidth=3)\n", "plt.plot(Y_test,residuos,'ro')\n", "plt.ylabel('Residuos')\n", "plt.xlabel('kml')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Testando K-Vizinhos Mais Próximos\n", "\n", "1. Efetue o treinamento do K-Vizinhos mais Próximos, considerando k =5\n", "2. Obtenha o MSE para o conjunto de testes\n", "3. Comparando com os resultados obtidos anteriormente, qual modelo melhor endereça esse problema?" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Necessário importar: from sklearn.neighbors import KNeighborsRegressor\n", "kviz = KNeighborsRegressor(n_neighbors=5)\n", "kviz.fit(X_train,Y_train)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.6.3" } }, "nbformat": 4, "nbformat_minor": 2 }