{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Máquina de Vetores de Suporte com Python\n", "#### Realizando a classificação de uma base de dados de crédito usando o método máquinas de vetores de suporte (SVM) com a linguagem de programação Python." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Pré-processamento dos dados" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# importando a biblioteca pandas do python\n", "import pandas as pd\n", "\n", "# importando a base de dados para o objeto \"dataframe\"\n", "dataframe = pd.read_csv('Dados de Credito.csv', encoding = 'utf-8', sep = ',')\n", "\n", "# substituindo valores inconsistentes no campo idades pela média das idades consistentes\n", "dataframe.loc[dataframe.age < 0, 'age'] = 40.92\n", "\n", "# separando os atributos previsores do meta classe\n", "previsores = dataframe.iloc[:, 1:4].values\n", "classe = dataframe.iloc[:, 4].values\n", "\n", "# importando a biblioteca sklearn do python\n", "from sklearn.impute import SimpleImputer\n", "# função \"SimpleImputer\" responsável por corrigir valores faltantes na base de dados\n", "\n", "# importando a biblioteca numpy do python\n", "import numpy as np\n", "\n", "# criando o objeto \"imputer\"\n", "imputer = SimpleImputer(missing_values = np.nan, strategy = \"mean\")\n", "\n", "# fazendo o treinamento com a base de dados para correção de valores faltantes\n", "imputer = imputer.fit(previsores[:,0:3])\n", "\n", "# corrigindo os valores faltantes usando o objeto criado \"imputer\"\n", "previsores[:, 0:3] = imputer.transform(previsores[:, 0:3])\n", "\n", "# importando a biblioteca sklearn do python\n", "from sklearn.preprocessing import StandardScaler\n", "# a função \"StandardScaler\" tem a função de escalonas toda a base de dados para corrigir a discrepância\n", "# dos valores\n", "\n", "# criando o objeto \"scaler\"\n", "scaler = StandardScaler()\n", "\n", "# escalonando todos os atributos para auxiliar no cálculo de distâncias euclidianas\n", "previsores = scaler.fit_transform(previsores)\n", "\n", "# importando a biblioteca sklearn do python\n", "from sklearn.model_selection import train_test_split\n", "# a função \"train_test_split\" tem a importância de separar modelos de treinamento e modelos de teste\n", "# em uma base de dados\n", "\n", "previsores_treinamento, previsores_teste, classe_treinamento, classe_teste = train_test_split(previsores,\n", " classe,\n", " test_size = 0.25,\n", " random_state = 0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Máquinas de Vetores de Suporte com Python (kernel linear)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# importando a biblioteca sklearn do python\n", "from sklearn.svm import SVC\n", "# função 'SVC' responsável pela apicação do algoritmo SVM" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# criando o objeto classificador e configurando-o para a treinamento usando o SVM\n", "classificador = SVC(kernel = 'linear', random_state = 1)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "SVC(C=1.0, break_ties=False, cache_size=200, class_weight=None, coef0=0.0,\n", " decision_function_shape='ovr', degree=3, gamma='scale', kernel='linear',\n", " max_iter=-1, probability=False, random_state=1, shrinking=True, tol=0.001,\n", " verbose=False)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# fazendo o treinamento do algoritmo usando a base de dados e o objeto criado\n", "classificador.fit(previsores_treinamento, classe_treinamento)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# realizando a predição usando o algoritmo e uma base de dados para teste\n", "previsoes = classificador.predict(previsores_teste)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1\n", " 0 0 0 0 0 0 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 1 0 0 1 0\n", " 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0\n", " 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0\n", " 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0\n", " 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0\n", " 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 1 1 1\n", " 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 1 0 0 0 1 0 1 0 0 1 0 0\n", " 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0\n", " 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0\n", " 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1]\n" ] } ], "source": [ "# observando a saída de dados obtida pelo algoritmo com a base de dados de teste\n", "print(previsoes)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1\n", " 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 1 0\n", " 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0\n", " 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0\n", " 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0\n", " 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0\n", " 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1\n", " 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0\n", " 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0\n", " 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0\n", " 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0\n", " 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 1]\n" ] } ], "source": [ "# observando a saída de dados original para a base de dados de teste\n", "print(classe_teste)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Analisando a capacidade de predição do algoritmo (kernel linear)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# importando a biblioteca sklearn do python\n", "from sklearn.metrics import accuracy_score, confusion_matrix" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# obtendo a precisão de acertos do algoritmo\n", "precisao = accuracy_score(classe_teste, previsoes)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.946\n" ] } ], "source": [ "# analisando a precisão de acertos do algoritmo\n", "print(precisao)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "O algoritmo de classificação pelo método SVM (kernel linear) obteve uma precisão de acertos de **94.6%**." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "# obtendo a matriz de confusão das predições feitas pelo algoritmo\n", "matriz = confusion_matrix(classe_teste, previsoes)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[422 14]\n", " [ 13 51]]\n" ] } ], "source": [ "# analisando a matriz de confusão das predições feitas pelo algoritmo\n", "print(matriz)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Observando a matriz de confusão acima, 422 dados foram classificados corretamente para as pessoas que não tem chance de pagar o que devem, juntamento com 51 dados classificados corretamente para as pessoas que tem chance de pagar o que devem. Entretanto, 14 dados relativos a pessoas sem chances de pagar foram avaliados incorretamente como pagadores e 13 dados relativos a pessoas com chances de pagar foram avaliadas incorretamente como não pagadores." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Máquinas de Vetores de Suporte com Python (kernel poly)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "# importando a biblioteca sklearn do python\n", "from sklearn.svm import SVC\n", "# função 'SVC' responsável pela apicação do algoritmo SVM" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "# criando o objeto classificador e configurando-o para a treinamento usando o SVM\n", "classificador = SVC(kernel = 'poly', random_state = 1)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "SVC(C=1.0, break_ties=False, cache_size=200, class_weight=None, coef0=0.0,\n", " decision_function_shape='ovr', degree=3, gamma='scale', kernel='poly',\n", " max_iter=-1, probability=False, random_state=1, shrinking=True, tol=0.001,\n", " verbose=False)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# fazendo o treinamento do algoritmo usando a base de dados e o objeto criado\n", "classificador.fit(previsores_treinamento, classe_treinamento)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "# realizando a predição usando o algoritmo e uma base de dados para teste\n", "previsoes = classificador.predict(previsores_teste)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1\n", " 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 1 0\n", " 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0\n", " 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0\n", " 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0\n", " 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0\n", " 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1\n", " 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0\n", " 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0\n", " 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1]\n" ] } ], "source": [ "# observando a saída de dados obtida pelo algoritmo com a base de dados de teste\n", "print(previsoes)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1\n", " 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 1 0\n", " 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0\n", " 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0\n", " 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0\n", " 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0\n", " 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1\n", " 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0\n", " 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0\n", " 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0\n", " 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0\n", " 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 1]\n" ] } ], "source": [ "# observando a saída de dados original para a base de dados de teste\n", "print(classe_teste)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Analisando a capacidade de predição do algoritmo (kernel poly)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "# importando a biblioteca sklearn do python\n", "from sklearn.metrics import accuracy_score, confusion_matrix" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "# obtendo a precisão de acertos do algoritmo\n", "precisao = accuracy_score(classe_teste, previsoes)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.968\n" ] } ], "source": [ "# analisando a precisão de acertos do algoritmo\n", "print(precisao)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "O algoritmo de classificação pelo método SVM (kernel poly) obteve uma precisão de acertos de **96.8%**." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "# obtendo a matriz de confusão das predições feitas pelo algoritmo\n", "matriz = confusion_matrix(classe_teste, previsoes)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[433 3]\n", " [ 13 51]]\n" ] } ], "source": [ "# analisando a matriz de confusão das predições feitas pelo algoritmo\n", "print(matriz)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Observando a matriz de confusão acima, 433 dados foram avalidados corretamente para as pessoas que não tem chance de pagar, juntamente com 51 pessoas que tem chance de pagar. Entretanto, 3 dados relativos as pessoas que não tem chance de pagar foram avaliadas como pagadoras e 13 dados relativos as pessoas que tem chance de pagar foram avaliadas como não pagadoras." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Máquinas de Vetores de Suporte com Python (kernel sigmoid)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "# importando a biblioteca sklearn do python\n", "from sklearn.svm import SVC\n", "# função 'SVC' responsável pela apicação do algoritmo SVM" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "# criando o objeto classificador e configurando-o para a treinamento usando o SVM\n", "classificador = SVC(kernel = 'sigmoid', random_state = 1)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "SVC(C=1.0, break_ties=False, cache_size=200, class_weight=None, coef0=0.0,\n", " decision_function_shape='ovr', degree=3, gamma='scale', kernel='sigmoid',\n", " max_iter=-1, probability=False, random_state=1, shrinking=True, tol=0.001,\n", " verbose=False)" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# fazendo o treinamento do algoritmo usando a base de dados e o objeto criado\n", "classificador.fit(previsores_treinamento, classe_treinamento)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "# realizando a predição usando o algoritmo e uma base de dados para teste\n", "previsoes = classificador.predict(previsores_teste)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1\n", " 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 0 1 0\n", " 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0\n", " 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 1 1\n", " 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1\n", " 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0\n", " 1 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0\n", " 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1\n", " 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0\n", " 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0\n", " 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1]\n" ] } ], "source": [ "# observando a saída de dados obtida pelo algoritmo com a base de dados de teste\n", "print(previsoes)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1\n", " 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 1 0\n", " 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0\n", " 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0\n", " 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0\n", " 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0\n", " 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1\n", " 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0\n", " 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0\n", " 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0\n", " 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0\n", " 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 1]\n" ] } ], "source": [ "# observando a saída de dados original para a base de dados de teste\n", "print(classe_teste)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Analisando a capacidade de predição do algoritmo (kernel sigmoid)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "# importando a biblioteca sklearn do python\n", "from sklearn.metrics import accuracy_score, confusion_matrix" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "# obtendo a precisão de acertos do algoritmo\n", "precisao = accuracy_score(classe_teste, previsoes)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.838\n" ] } ], "source": [ "# analisando a precisão de acertos do algoritmo\n", "print(precisao)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "O algoritmo de classificação pelo método SVM (kernel sigmoid) obteve uma precisão de acertos de **83.8%**." ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "# obtendo a matriz de confusão das predições feitas pelo algoritmo\n", "matriz = confusion_matrix(classe_teste, previsoes)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[393 43]\n", " [ 38 26]]\n" ] } ], "source": [ "# analisando a matriz de confusão das predições feitas pelo algoritmo\n", "print(matriz)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Observando a matriz de confusão acima, 393 dados foram avaliados corretamente para pessoas que não tem chance de pagar o que devem, juntamente com 26 dados relativos a pessoas que tem chance de pagar o que devem. Entretanto, 43 dados relativo as pessoas que não possuem chance de pagar foram avaliadas como pagadoras e 38 dados relativos a pessoas que tem chance de pagar fora avaliadas como não pagadoras." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Máquinas de Vetores de Suporte com Python (kernel rbf)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "# importando a biblioteca sklearn do python\n", "from sklearn.svm import SVC\n", "# função 'SVC' responsável pela apicação do algoritmo SVM" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "# criando o objeto classificador e configurando-o para a treinamento usando o SVM\n", "classificador = SVC(kernel = 'rbf', random_state = 1)" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "SVC(C=1.0, break_ties=False, cache_size=200, class_weight=None, coef0=0.0,\n", " decision_function_shape='ovr', degree=3, gamma='scale', kernel='rbf',\n", " max_iter=-1, probability=False, random_state=1, shrinking=True, tol=0.001,\n", " verbose=False)" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# fazendo o treinamento do algoritmo usando a base de dados e o objeto criado\n", "classificador.fit(previsores_treinamento, classe_treinamento)" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "# realizando a predição usando o algoritmo e uma base de dados para teste\n", "previsoes = classificador.predict(previsores_teste)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1\n", " 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 1 0\n", " 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0\n", " 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0\n", " 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0\n", " 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0\n", " 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1\n", " 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0\n", " 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0\n", " 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0\n", " 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1]\n" ] } ], "source": [ "# observando a saída de dados obtida pelo algoritmo com a base de dados de teste\n", "print(previsoes)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1\n", " 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 1 0\n", " 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0\n", " 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0\n", " 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0\n", " 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0\n", " 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1\n", " 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0\n", " 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0\n", " 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0\n", " 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0\n", " 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 1]\n" ] } ], "source": [ "# observando a saída de dados original para a base de dados de teste\n", "print(classe_teste)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Analisando a capacidade de predição do algoritmo (kernel rbf)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [], "source": [ "# importando a biblioteca sklearn do python\n", "from sklearn.metrics import accuracy_score, confusion_matrix" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [], "source": [ "# obtendo a precisão de acertos do algoritmo\n", "precisao = accuracy_score(classe_teste, previsoes)" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.982\n" ] } ], "source": [ "# analisando a precisão de acertos do algoritmo\n", "print(precisao)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "O algoritmo de classificação pelo método SVM (kernel rbf) obteve uma precisão de acertos de **98.2%**." ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "# obtendo a matriz de confusão das predições feitas pelo algoritmo\n", "matriz = confusion_matrix(classe_teste, previsoes)" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[434 2]\n", " [ 7 57]]\n" ] } ], "source": [ "# analisando a matriz de confusão das predições feitas pelo algoritmo\n", "print(matriz)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Observando a matriz de confusão acima, 434 dados relativos as pessoas que não tem chance de pagar foram avaliados corretamente, juntamente com 57 dados relativos as pessoas que tem chance de pagar o que devem. Entretanto, 2 dados relativos as pessoas que não tem chance de pagar foram avaliadas incorretamente como pagadoras e 7 dados relativos as pessoas que tem chance de pagar foram avaliadas incorretamente como não pagadoras." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Observando o balaceamento das classes" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [], "source": [ "# importando a biblioteca collections do python\n", "import collections" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Counter({1: 64, 0: 436})" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# visualizando a quantidade de registros para cada uma das classes\n", "collections.Counter(classe_teste)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Alguma dúvida? Entre em contato comigo:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- [Me envie um e-mail](mailto:alysson.barbosa@ee.ufcg.edu.br);" ] } ], "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.7.4" } }, "nbformat": 4, "nbformat_minor": 4 }