Você está na página 1de 40

Experimentos de Mineração de Dados em uma Base de Dados

Utilizando Linguagem R
André L. Floriano1 , Celso A. A. Kaestner1
1
Programa de Pós-Graduação em Computação Aplicada
Universidade Tecnológica Federal do Paraná (UTFPR)
Av. Sete de Setembro, 3165 – Rebouças – 80230-901 – Curitiba – PR – Brasil
floriano andre@hotmail.com, celsokaestner@utfpr.edu.br

Abstract. This article describes the experiments performed on a dataset using


the R programming language. The experiments involved in this article are the
application, analysis and comparison of classification algorithms, Association
Rules and Clustering, as well as creating charts and statistical data of dataset
with the commands of R programming language R.

Resumo. Este artigo descreve os experimentos realizados em um conjunto de


dados utilizando a linguagem de programação R. Os experimentos envolvi-
dos nesse artigo são a aplicação, análise e comparação de algoritmos de
Classificação, Regras de Associação e Agrupamento, bem como a criação de
gráficos e dados estatı́stica do conjunto de dados com os comandos da lingua-
gem de programação R.

1. Objetivo
1.1. Objetivo Geral
Realizar experimentos de Mineração de Dados em um conjunto de dados utilizando
linguagem R[Hothorn and Everitt 2014], afim de analisar e comparar Algoritmos de
Classificação, Regras de Associação e Agrupamento.

1.2. Objetivos Especı́ficos


• Carregar uma base de dados no R Studio para realizar experimento;
• Explorar o conjunto de dados com comandos do R, gerando gráficos, histogramas
e visualizando os dados;
• Aplicar e comparar os resultados dos Algoritmos de Classificação, Árvore de De-
cisão, Naive-Bayes, Redes Neurais MultilayerPerceptro (MLP), Máquina de Vetor
de Suporte (SVM) e K- Vizinhos mais Próximos (K-NN) no conjunto de dados;
• Aplicar e analisar o resultado do algoritmo de Regras de Associação Apriori;
• Aplicar e comparar os resultados dos algoritmos de Agrupamento, K-means e
Hierárquico.

2. Descrição da Base de Dados


O conjunto de dados utilizado neste experimento está disponı́vel no site UCI Machine
Learning Repository, com o tı́tulo de Teaching Assistent Evaluation Data Set (TAE).
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

Esse conjunto de dados consiste em avaliações de desempenho de docentes ao


longo de três semestres regulares e dois semestres de verão. A base é formada por 151
(cento e cinquenta e uma) instâncias, sendo essas instâncias referentes aos Assistentes de
Ensino (docentes) do Departamento de Estáticas da Universidade Wisconsin-Madison.
Esse conjunto de dados foi disponibilizado para estudo no ano de 1997 no
site Machine Learning Repository e até a data da produção desse experimento, ocor-
reram 50071 (Cinquenta Mil e setenta e uma) visitas a esse conjunto de dados. As
tarefas associadas ao estudo desse conjunto de dados esta relacionado à classificação
[Bache and Lichman 2013].
A base de dados possui 6 (seis) atributos, sendo 1 (um) desses atributos as Classes,
as quais são classificadas como Low, Medium e High. Os valores atribuı́dos originalmente
para a cada atributo é representado em forma de números, os quais representam um tipo
de categoria das informações. As informações dos atributos são:
• O primeiro atributo descreve se o docente é falante nativo da lı́ngua Inglesa. Para
esse atributo segue o tipo de dado binário, o qual é atribuı́do o valor 1 (um) caso
o docente seja falante da lı́ngua Inglesa, ou 2 (dois) se caso ele não seja falante da
lı́ngua Inglesa;
• O segundo atributo descreve a categoria do Instrutor de Curso. Esse atributo uti-
liza o tipo de dado categórico, o qual possui 25 (vinte e cinco) categorias. Essas
categorias estão no formato numérico, sendo de 1 (um) a 25 (vinte e cinco);
• O terceiro Atributo é a categoria do Curso, também utiliza o tipo de dado Ca-
tegórico, sendo eles distribuı́dos de forma numérica de 1 (um) a 26 (vinte e seis);
• O quarto atributo descreve o tipo do semestre. Esse atributo descreve se o semestre
é regular ou de verão. O tipo de dados para esse atributo é o binário, sendo para
verão o número 1 (um) e para regular o número 2 (dois);
• O quinto atributo é o tamanho da Classe, esse atributo utiliza o tipo de dado
numérico;
• O sexto e último atributo é o Atributo que contém as Classes. Esse atributo é do
tipo Categórico. Nesse atributo é define o desempenho do docente, os quais são
classificado com sendo 1 (um) baixo desempenho, 2 (dois) para um desempenho
mediano e 3 (três) para um alto desempenho. Para as instâncias desse atributo foi
modificado para valores literais, ficando Low para o valor 1 (um) , Medium para o
valor 2 (dois) e High para o valor 3 (três).
Todas as instâncias desse conjunto de dados são completas, ou seja, todos os atri-
butos possuem valores. Assim sendo pode se afirmar que não existem instâncias vazia, ou
com valores que representam informação nula.

3. Importação do Conjunto de Dados


O comando utilizado para importar dos dados nesse experimento foi o comando:
read.csv(f ile, header = T RU E, sep = ”, ”)
O comando read.csv lê um arquivo Command-Separated Value(CSV) no formato
de tabela e cria um quadro de dados a partir dele, com os casos correspondentes a linha
e variáveis para campos do arquivo. Os argumentos que compõem o comando read.csv
são:

Página 2
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

• File: O nome do arquivo (caminho absoluto ou o nome relativo ao diretório de


trabalho atual) no qual os dados devem ser lidos. Cada linha da tabela aparece
como uma linha de arquivo [Ripley 2014];
• Header: Um valor logico (True ou False) que indica se o arquivo contém nomes
das variáveis. Caso a primeira linha ou célula de cada coluna e texto for nome de
variável utiliza-se TRUE, caso contrario, é usado FALSE [Ripley 2014].
• Sep: é o campo separador de carácter. Os valores de cada linha de uma arquivo
são separados por algum valor, os quais podem ser espaços em branco, virgula,
ponto e virgula, tabulação entre outros [Ripley 2014].

Neste experimento, para a importação do conjunto de dados TAE foi utilizado o


seguinte comando:

> tae < −read.csv(”c : /U ser/Andre/Desktop/tae.csv”, sep = ”; ”)

Onde, tae é o nome dado ao conjunto de dados, no qual irá receber as informação
do comando read.csv. Para este experimento o conjunto de dados encontra no caminho
especificado como C:/User/Andre/Desktop/tae.csv. O Sep o caractere separador dos
dados, para este experimento é usado o ponto e virgula. O Header nesse exemplo não
aparece no comando, mas o seu valor é padrão como TRUE, o que indica a primeira linha
do arquivo como nomes das colunas.

4. Explorando o Conjunto de dados


Nessa seção é apresentado comandos para explorar as informações de um conjunto de
dado e geração de gráficos. Para essa seção é utilizado os comando apresentados no R
and Data Mining: Examples and Case Studies [Zhao 2014].

4.1. Olhando os dados


O comando dim() mostra a quantidade de instancias e a quantidade de atributos que um
conjunto de dados possui. Aplicando o comando dim() para o conjunto de dados TAE
retornou que o conjunto de dados tae possui 151 (cento e cinquenta e uma) instâncias e 6
(seis atributos), como mostra a seguir.
> dim(tae)
[1]1516
O comando names() mostra o nome dos atributos de um conjunto de dados. Para
o caso do conjunto de dados TAE utilizando o comando names(), obteve o seguinte re-
sultado apresentado a seguir.

> names(tae)
[1] ”N ative.English” ”Course.Instructor” ”Course”
[5] ”Semester” ”Class.Size” ”Class.Attribute”

O comando str() mostra a estrutura do conjunto de dados. Para o conjunto de


dados TAE o comando str() retornou um estrutura com 151 (cento e cinquenta e uma)
instâncias e 6 (seis) atributos, como mostrado na sequencia.

Página 3
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

> str(tae)

0
data.frame0 : 151 obs. of 6 variables:
$Native.English : int 1 2 1 1 2 2 2 2 1 2 ...
$Course.Instructor: int 23 15 23 5 7 23 9 10 22 15 ...
$Course : int 3 3 3 2 11 3 5 3 3 3 ...
$Semester : int 1 1 2 2 2 1 2 2 1 1 ...
$Class.Size : int 19 17 49 33 55 20 19 27 58 20 ...
$Class.Attribute : Factor w/ 3 levels ”High”,”Low”,”Medium”: 1 1 1 1 1 1 1 1 1 1 ...
O comando attributes() acessa os atributos do conjunto de dados. Esse comando
retorna uma lista dos atributos. Na sequencia é apresento o resultado do comando attri-
butes() aplicado no conjunto de dados TAE.
> attributes(tae)

$names
[1] ”Native.English” ”Course.Instructor” ”Course” ”Semester”
[5] ”Class.Size” ”Class.Attribute”

$class
[1] ”data.frame”

$row.names
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
[32] 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
[59] 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
[85] 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
[109] 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 4124 125 126 127
[127] 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
[146] 146 147 148 149 150 151

Para apresentar uma lista de instancias é utilizado o comando que é representado


pelo nome do conjunto de dados, seguido de parâmetros que são ı́ndices. O comando
da aplicado no conjunto de dados TAE recupera as instancias da primeira a quinta do
conjunto de dados TAE.
> tae[1 : 5, ]
Native.English Course.Instructor Course Semester Class.Size Class.Attribute
1 1 23 3 1 19 High
2 2 15 3 1 17 High
3 1 23 3 2 49 High
4 1 5 2 2 33 High
5 2 7 11 2 55 High

O comando head() recupera as 6 (seis) primeiras instâncias de um conjunto de


dados. Neste experimento o comando head() para a base de dados TAE, recuperou as 6
(seis) primeiras informações, como ’e mostrado na sequencia.

Página 4
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

> head(tae)
Native.English Course.Instructor Course Semester Class.Size Class.Attribute
1 1 23 3 1 19 High
2 2 15 3 1 17 High
3 1 23 3 2 49 High
4 1 5 2 2 33 High
5 2 7 11 2 55 High
6 2 23 3 1 20 High

O comando tail() apresenta as 6 (seis) últimas instâncias da base de dados. Para


base de dados TAE o resultado é o apresentado a seguir.

> tail(tae))
Native.English Course.Instructor Course Semester Class.Size Class.Attribute
146 2 23 3 2 24 Low
147 2 3 2 2 26 Low
148 2 10 3 2 12 Low
149 1 18 7 2 48 Low
150 2 22 1 2 51 Low
151 2 2 10 2 27 Low

Utilizando o nome do conjunto de dados com parâmetros de ı́ndice e nome do atri-


buto é possı́vel recuperar as instâncias desse único atributo. Neste experimento aplicando
o comando ao conjunto de dados TAE, o retorno foi da primeiro a quinta instancias do
atributo Native.English.
> tae[1 : 5, ”N ative.English”]
[1]12112
Outra forma de recuperar as instâncias de um atributo especifico é utilizando o
nome do conjunto de dados seguido pelo sinal $ mais o nome do atributo e com argumento
de ı́ndice das instâncias a serem recuperados. Esse comando é apresentado a seguir.
> tae$Semester[1 : 10]
[1]1122212211

4.2. Explorando Variáveis Individuais


A função summary() produz resultados resumidos das informações de um conjunto de
dados. O retorno da função é o mı́nimo, máximo, média, mediana e o primeiro e terceiro
qualtil. O resultado do comando aplicado na base de dados tae é apresentado na sequencia.

Página 5
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

A função quantile() produz amostras correspondentes as probabilidades dadas.


Aplicando a função no conjunto de dados TAE para o atributo Course.Instructor é obtido
o resultado apresentado a seguir.

> quantile(tae$Course.Instructor)
0% 25% 50% 75% 100%
1 8 13 20 25

A função quantile() pode ser utilizada determinando a porcentagem desejada,


como presentado no na sequencia.

> quantile(tae$Course.Instructor, c(.1, .3, .65)


10% 30% 65%
5 9 17

A função var() retorna a variância de um atributo especifico de um conjunto de


dados. A função aplicada no conjunto de dados TAE no atributo Native.English produziu
o resultado apresentado na sequencia.
> var(tae$N ative.English)
[1]0.1562031
A função hist() calcula um histograma dos valores dos dados fornecidos. O re-
torno é um gráfico. A Figura 1 apresenta o gráfico resultante da função aplicada ao con-
junto de dados TAE.
> hist(tae$Course)

Figura 1. Gráfico do comando hist() do R no conjunto de dados TAE

A função density() calcula a densidade estimada. A função retorna as observações


de densidade e largura de banda. A Figura 2 mostra a função aplicada no conjunto de
dados TAE.
> plot(density(tae$Class.Size)

Página 6
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

Figura 2. Comando density() do R no conjunto de dados TAE

A função table() calcula a frequência de fatores. No caso deste experimento foi


verificado o atributo Class.Attribute como apresentado a seguir.

> table(tae$Class.Attribute)
High Low Medium
52 49 50

A função pie() combinado com a função table(), produz um gráfico de pizza mos-
trando a quantidade de cada valor de a ver calculado. O resultado dessas função no con-
junto de dados TAE é gráfico apresentado na Figura 3.
> pie(table(tae$Class.Attribute))

Figura 3. Comando pie() combinado com o comando table() do R no conjunto de


dados TAE

Outra possibilidade na criação gráficos é a função barplot(). Assim como a


função pie() a função barplot() pode ser combinado com a função table() para gerar
gráfico. O combinado das funções barplot() e table() no conjunto de dados TAE resultou
no gráfico apresentado na Figura 4.
> barplot(table(tae$Class.Attribute))

Página 7
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

Figura 4. Comando barplot() combinado com o comando table() do R no conjunto


de dados TAE

4.3. Explorando Múltiplas Variáveis


A função cov() e cor() testa o relacionamento entre duas variáveis.
> cov(tae$Course.Instructor, tae$Course)
[1] − 11.31519

> cov(tae[, 2 : 3])


Course.Instructor Course
Course.Instructor 46.59126 -11.31519
Course -11.31519 49.33536

> cor(tae$Course.Instructor, tae$Course)


[1] − 0.23601

> cor(tae[, 2 : 3]
Course.Instructor Course
Course.Instructor 1.00000 -0.23601
Course -0.23601 1.00000

A função aggregate() calcula o estado de uma variável com as classe existentes


em um conjunto de dados. A função aplicada no conjunto de dados TAE é apresentada na
sequencia.

Página 8
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

> aggregate(Class.Attribute ∼ Class.Attribute, summary, data = tae)


Class.Attribute.High Class.Attribute.Low Class.Attribute.Medium
1 52 49 50

A função boxplot() (Figura 5) traça um gráfico de caixa, que mostra a mediana,


primeiro e terceiro quartil de distribuição e valores discrepantes.
> boxplot(Course ∼ Class.Attribute, data = tae)

Figura 5. Comando boxplot() do R no conjunto de dados TAE

A função with() (Figura 6) apresenta um gráfico colorido, onde col é o atributo


que será observado e e pch os sı́mbolos que serão atribuı́dos aos valores do atributo.
> with(tae, plot(Course.Instructor, Course, col = Class.Attribute
, pch = as.numeric(Class.Attribute)))

Figura 6. Comando with() do R no conjunto de dados TAE

Página 9
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

A função jitter() (Figura 7) apresenta os ruı́dos dos dados antes de gerar o gráfico.
> plot(jitter(tae$Course.Instructor), jitter(tae$Course)

Figura 7. Comando jitter() do R no conjunto de dados TAE

A função pairs() (Figura 8)retorna um gráfico de dispersão.


> pairs(tae)

Figura 8. Comando jitter() do R no conjunto de dados TAE

4.4. Mais Explorações


Nesta seção é apresentado algum variações de gráficos, como gráficos 3d (Figura 9),
(Figura 10), mapas de calor (Figura 11) e de nı́veis (Figura 12), (Figura 13), (Figura 14)
e (Figura 15).
> library(scatterplot3d)
> scatterplot3d(tae$N ative.English, tae$Course.Instructor, tae$Course)

Página 10
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

Figura 9. Comando scaterplot() do R no conjunto de dados TAE

> library(rlg)
> plot3d(tae$N ative.English, tae$Course.Instructor, tae$Course)

Figura 10. Comando plot3d() do R no conjunto de dados TAE

> distM atrix < −as.matrix(dist(tae[, 2 : 3]))


> hetmap(distM atrix)

Figura 11. Comando heatmap() do R no conjunto de dados TAE

> library(lattice))
> levelplot(Course ∼ Course.Instructor ∗ Class.Size, tae, cuts = 9,
col.regions = grey.colors(10)[10 : 1])

Página 11
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

Figura 12. Comando Levelplot() do R no conjunto de dados TAE

> library(M ASS)


> parcoord(tae[2 : 3], col = tae$Class.Attribute)

Figura 13. Comando parcoord() do R no conjunto de dados TAE

> library(lattice)
> parallelplot(∼ tae[2 : 3]|Class.Attribute, data = tae)

Figura 14. Comando parallelplot() do R no conjunto de dados TAE

> library(ggplot2)
> qplot(N ative.English, Course.Instructor, data = tae,
f acet = Class.Attribute ∼ .)

Página 12
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

Figura 15. Comando qplot() do R no conjunto de dados TAE

5. Classificação
Classificação é uma das subáres que fazem parte da Mineração de Dados. A tarefa de
classificação é considerada a mais importante e popular dentro da Mineração de Dados
[Scoss 2006]. As técnicas de Classificação consistem basicamente, em buscar por uma
função que permita rotular cada registro de um conjunto de dados em uma única classe,
dentre de um conjunto de classes, ou seja, mapear um item de dados em uma das varias
classes de predição de um conjunto de dados [Srivastava et al. 2000].
A ideia da Classificação é colocar um objeto em uma classe ou categoria, baseada
nas caracterı́sticas e critérios de avaliação deste objeto [Romero et al. 2010].
A definição da tarefa de classificação é uma forma de analisar e extrair modelos,
descrevendo e distinguindo classes de dados ou conceitos importantes em um conjunto de
dados. Esses modelos são chamados de classificadores, os quais tem função de predizer
categorias de rótulos de classes, cuja essas classes são desconhecidas [Han et al. 2012].
A classificação de dados pode ser usada para descobrir pedido fraudulentos de
seguros; fazer escala de riscos de linha de credito, identificar classes de paciente ou tipo
de tratamento a pacientes; analisar desempenho de docentes [Scoss 2006]; predizer alunos
com perfil de evasão escolar [Junior et al. 2013]; entre outras áreas.
O processo de classificação pode ser dividido em duas etapas: treinamento, co-
nhecida como aprendizado e teste [Costa et al. 2013].
Na etapa de treinamento é usado um conjunto de dados denominados amostra-
gem, associados a suas classes para criar um modelo que será utilizado na construção do
classificador [Junior et al. 2013]. Na etapa de teste, consiste de um conjunto de amostras
cujas classes são ocultadas e precisam ser preditas a partir do modelo [Costa et al. 2013].
O processo de Classificação é ilustrado na figura, onde a entrada é um conjunto
de dados de treinamento (classes conhecidas), formando o modelo de aprendizagem, que
em seguida é testado pelo conjunto de teste [Costa et al. 2013].

5.1. Árvores de decisão


A definição árvore de decisão é como um mapa de processo de raciocı́nio. Esse mapa
descreve um conjunto de dados com uma estrutura de árvore. As Árvores de Decisão são
particularmente boas para resolver problemas de classificação [Negnevitsky 2005].
Uma árvore de decisão consiste em um fluxograma com estrutura de árvore, onde
cada nó interno denota um teste em atributo, cada ramo representa um resultado do teste,
e cada nó folha tem um rótulo de classe [Han et al. 2012].

Página 13
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

Figura 16. Modelo de Classificação [Costa et al. 2013]

As árvores de decisão são técnicas muito poderosas e populares


[Camilo and Silva 2009]. As técnicas de árvore de decisão é extrema simples, e
não necessita de parâmetros de configuração e geralmente trás ótimo grau de assertiva.
Contudo para garantir bons resultados com árvore de decisão é necessária uma análise
detalhada dos dados a serem usados [Camilo and Silva 2009].

5.2. Árvore de decisão com package party

Nesta seção será apresentada a construção de uma árvore de decisão para a base de da-
dos TAE. Para esse experimento foi utilizado o pacote party do R [Hothorn et al. 2014].
O núcleo do pacote é a função ctree() [Hothorn et al. 2015], uma aplicação de arvores
de inferência condicional que incorporam modelos de regressão com estrutura de árvore
em uma teoria bem definida de procedimento de inferência condicional. Esse modelo
pode ser aplicado a todos os tipos de problemas de regressão, incluindo nominal, ordinal,
numérico, censurado, bem como as variáveis de resposta múltiplas e escalas de medição
arbitrarias das co-variaveis[Hothorn et al. 2014].
Para o experimento foi aplicado uma divisão na base de dados formando dois
subconjuntos, um com 70% da base destinado ao treinamento (trainData) e um segundo
subconjunto com 30% esse destinado para o teste(testData). Em seguida para a construção
da árvore é carregado o pacote party [Hothorn et al. 2014].
O próximo passo foi definir uma formula a qual será utilizada na função ctree().
Nesse casso o nome da formula é myFormula, a qual consta as definições das classe
que estão no atributo Class.Attribute da base de dados TAE sendo essa a variável alvo
e seguindo por todas as outras variáveis da base as quais são variáveis independentes
[Zhao 2014].

Página 14
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

> # Divisão do conjunto de dados TAE para dois subconjuntos treinamento e teste
> set.seed(1234)
> ind < −sample(2, nrow(tae), replace = T RU E, prob = c(0.7, 0.3))
> trainData < −[ind == 1, ]
> testData < −[ind == 2, ]
> # Carregando o pacote party
> library(party)
> # Definição da formula
> myF ormula < −Class.Attribute ∼ N ative.English + Course.Instructor
+Course + Semester + Class.Size
> # Criação da variável para receber dados da função ctree
> tae ctree < −ctree(myF ormula, data = trainData)
> # Matriz de Confusão
> table(predict(tae ctree), trainData$Class.Attribute)

High Low Medium


High 30 24 12
Low 0 0 0
Medium 10 10 27

Onde, para classe High teve 30 (trinta) classificados corretamente e 36 (trinta e


seis) incorretos. A classe Low não conseguiu encontrar nenhuma classificação e a classe
Medium tem 27 (vinte e sete) acertos e 20 (vinte) erros.
Depois com a função print() é possı́vel construı́ a árvore, como apresentado a
seguir.
> print(tae ctree)
Conditional inference tree with 2 terminal nodes
Response: Class.Attribute
Inputs: Native.English, Course. Instructor, Course, Semester, Class.Size
Number of Observations: 113
1) Course = 5; criterion = 0.99, statistic = 12.476
2)* weights = 66
1) Course ¿ 5
3)* weights = 46

Com a função plot() é possı́vel desenhar a árvore gerado da função ctree() (Fi-
gura 17).
> plot(tae ctree)
Com a função plot também é possivel desenhar a árvore gerado da função ctree()
com estilo simples (Figura 18).
> plot(tae ctree, type=”simple”)

Página 15
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

Figura 17. Árvore de Decisão da função ctree

Figura 18. Árvore de Decisão da função ctree() modelo simples

O próximo a ser verificado é o subconjunto de TAE o testData, como é apresentado


na sequencia.
> testP red < −predict(tae ctree, newdata = testData)
> table(testP red, testData$Class.Attribute)

High Low Medium


High 3 9 3
Low 0 0 0
Medium 9 6 8

O experimento realizado com o package party [Hothorn et al. 2014] utilizando


a função ctree(), foi que, o subconjunto de treinamento obteve mais sucesso que o o
subconjunto de teste. Entretanto os valores resultantes do experimento foi baixo pois no
melhor caso obteve aproximadamente 50% de acurácia, como pode ser visto na Tabela1.

Página 16
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

Tabela 1. Resultado do experimento com package party

Subconjunto Acertos Erros Acurácia


treinamento 57 32 50.44
teste 11 27 28,94

5.3. Árvore de decisão com packge RWeka função J48


O Weka é um conjunto de algoritmos de aprendizado de máquina para tarefas de
mineração de dados escritos em Java, que contém ferramentas para os dados de pré-
processamento, Classificação, Regressão, Agrupamento, Regras de Associação e de
visualização. O Pacote RWeka contém o código de interface, o Weka jar está em um
pacote separado RWekajars [Hornik et al. 2015].
Seguindo o mesmo padrão aplicado para o package party nesse experimento
também foi feito uma divisão na base de dados, formando dois subconjuntos, um com
70% da base destinado ao treinamento (trainData) e um segundo subconjunto com 30%
esse destinado para o teste(testData).
O próximo passo é a descrição simbólica do modelo, ou seja, definir a formula a
qual será utilizada pela função jr84(). Nesse casso o nome da formula é myFormula.
Na sequencia é necessário carregar o package RWeka por meio da função li-
brary(RWeka) para que possa executar a função j48() e realizar o treinamento da árvore.
Na sequencia é passo a função modelo, o subconjunto de dados e para esse caso comando
de poda da árvore para a função J48 que de fato irá construir a árvore.
O comando print(J48) mostra o resultado, ou seja, mostra como ficou árvore do
subconjunto de treinamento.
> # Divisão do conjunto de dados TAE para dois subconjuntos treinamento e teste
> set.seed(1234)
> ind < −sample(2, nrow(tae), replace = T RU E, prob = c(0.7, 0.3))
> trainData < −tae[ind == 1, ]
> testData < −tae[ind == 2, ]
> # descrição simbólica do modelo
> myF ormula < −Class.Attribute ∼ N ative.English + Course.Instructor
+Course + Semester + Class.Size
> # Carregando o package RWeka
> library(RW eka)
> # treinamento da árvore, com poda
> j48 < −J48(myF ormula, data = trainData, control = W ekac ontrol(M = 5))
> criar a árvore com o comando j48
> print(j48)

Página 17
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

Com a função plot() constrói o desenho da árvore resultante do subconjunto de


treinamento de J48. A Figura 20 mostra o desenho da árvore.

Figura 19. Árvore de Decisão do subconjunto de treinamento da função J48() do


package RWeka do R

A função summay() quando aplicada ao resultado do treinamento, apresenta uma


lista com os dados de classificação corretos e incorretos, bem como a acurácia. Apresenta
também dados estatı́sticos como medias de erros, covariância entre outras informações.
Ainda com apresenta a matriz de confusão.

Página 18
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

> summary(j48)

=== Summary ===


Correctly Classified Instances 71 62.831%
Incorrectly Classified Instances 42 37.16.81%
kappa statistic 0.443
Mean absolute error 0.3438
Root mean squared error 0.4146%
Relative absolute squared error 77.5468%
Roor relative squared error 88.0634%
Coverage of cases (0.95 level) 100%
Mean rel. region size (0.95 level) 93.2153%
Total Numeber of Instances 113
=== Confusion Matrix ===
a b c < – classified as
22 8 10 | a = High
3 25 6 | b = Low
6 9 24 | c = Medium

Também é estendido o experimento para o subconjunto de teste para gerar a arvore


de decisão, como é apresentado a seguir.

> j48test < −J48(myF ormula, data = testData, control = W ekac ontrol(M = 5))
print(j48test)

Página 19
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

Com a função plot() constrói o desenho da árvore resultante do subconjunto de


teste de J48. A Figura ?? mostra o desenho da árvore.

Figura 20. Árvore de Decisão do subconjunto de teste da função J48 do package


RWeka do R

A função summay() quando aplicada ao resultado de teste, apresenta uma lista


com os dados de classificação corretos e incorretos, bem como a acurácia. Apresenta
também dados estatı́sticos como medias de erros, covariância entre outras informações.
Ainda com apresenta a matriz de confusão.

> summary(j48test)

=== Summary ===


Correctly Classified Instances 24 63.1579%
Incorrectly Classified Instances 14 36.8421%
kappa statistic 0.4192
Mean absolute error 0.31
Root mean squared error 0.3937%
Relative absolute squared error 70.3347%
Root absolute squared error 83.8916%
Coverage of cases (0.95 level) 100%
Mean rel. region size (0.95 level) 80.7018%
Total Numeber of Instances 38

Página 20
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

=== Confusion Matrix ===


a b c < – classified as
9 3 0 | a = High
0 15 0 | b = Low
5 6 0 | c = Medium

O experimento realizado com o package RWeka [Hornik et al. 2015] utilizando a


função J48(), foi que, os subconjuntos de treinamento e teste obtiveram resultados muito
próximos. Entretanto os valores resultantes do experimento de teste teve um número
maior de acertos como pode ser visto na Tabela2.

Tabela 2. Resultado do experimento com package Rweka

Subconjunto Acertos Erros Acurácia


treinamento 71 42 62.831
teste 24 14 63.1579

5.4. naı̈ve-Bayes

O classificador Naive Bayes é provavelmente o classificador mais utilizado em Machine


Learning [Romao et al. 2013]. Esse classificador é baseado em Regas de Bayes e Naively
[Witten et al. 2011].
O classificar Naive Bayes é denominado de ingênuo por assumir que os atributos
são condicionalmente independentes, isto é, data a etiqueta de classe de uma tupla, os va-
lores dos atributos assumem como sendo condicionalmente independentes uma das outras
[Romao et al. 2013] e [Han et al. 2012].
Para o experimento do classificador Naive-Bayes é utilizado package
e1071[Dimitriadou et al. 2015]. Esse pacote é um conjunto de funções. Essas funções
estão ligadas a tarefas de análise de classes latentes, transformada de Fourier de curto
tempo, agrupamento difuso, apoiar máquinas de vetores, classificação naive bayes, entre
outras[Dimitriadou et al. 2015].
Para esse experimento é utilizado o mesmo principio dos outros experimento de
classificação. Primeiro é divido conjunto de dados TAE em 2 (dois) subconjuntos, um
de treinamento e outro de teste. O conjunto de treinamento segue com os 70% e o teste
com 30%. definir uma formula com o nome myFormula, na qual consta as definições de
classes que estão no atributo Class.Attribute da base de dados TAE. Essa função será será
utilizada na função naiveBayes() do package e1071.

Página 21
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

> # Divisão do conjunto de dados TAE para dois subconjuntos treinamento e teste
> set.seed(1234)
> ind < −sample(2, nrow(tae), replace = T RU E, prob = c(0.7, 0.3))
> trainData < −[ind == 1, ]
> testData < −[ind == 2, ]
> # descrição simbólica do modelo
> myF ormula < −Class.Attribute ∼ N ative.English + Course.Instructor
+Course + Semester + Class.Size
> # Carregando o package e1071
> library(e1071)
> # treinamento da árvore
> modelT rain < −naiveBayes(Class.Attribute ., data = trainData)

> pred < −predict(modelT rain, trainData)


> table(pred, trainData$Class.Attribute)

===Matriz de Confusão===
pred High Low Medium
High 24 3 8
Low 9 27 20
Medium 7 4 11

> modelT est < −naiveBayes(Class.Attribute ∼ ., data = testData)

> pred < −predict(modelT est, testData)


> table(pred, testData$Class.Attribute)
pred High Low Medium
High 1 0 0
Low 3 12 4
Medium 8 3 7

O experimento com naive bayes obteve resultado de teste e treinamento muito


próximos ambos atingindo 50%, no caso o de treinamento atingiu aproximadamente 54%
ficando um pouco acima do de teste, como pode ser observado na Tabela3.

Tabela 3. Resultado do experimento com package e1071 função naive-bayes

Subconjunto Acertos Erros Acurácia


treinamento 62 51 54.88
teste 19 18 50

Página 22
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

5.5. Redes Neurais (RNAs)


As RNAs são técnicas computacionais desenvolvida para reproduzir o funcionamento de
cérebro humano e realizar trabalhos que só eram possı́veis através da intervenção humana.
Essa técnica foi desenvolvida a partir de estudos de como o conhecimento é armazenado
no cérebro e como acontece o aprendizado, chegando a conclusão que o conhecimento
é armazenado por meio das sinapses e a medida que o conhecimento acontece outras
sinapses vai se criando [Maximiano 2011].
O funcionamento de uma RNA foi inicialmente proposta em 1943 por Warren
McCulloch e Walter Pitts [McCulloch and Pitts ]. O modelo (Figura 21) proposto é ainda
é o mais utilizado nas diferentes arquiteturas RNAs descrito desta forma”[d. Souza 2012]:
• é dada a rede uma ou várias entradas (X1 , X2 , ..., Xn );
• as entradas são ligadas ao neurônio através da sinapse que a ela é associado um
peso w, onde em cada ligaçõ se realiza uma operação de multiplicação;
• depois é realizado um somatório no neurônio para cada entrada a e ligado, produ-
zindo uma saı́da u o qual é submetido a uma função de atividade f (u) que produz
uma saı́da y, que por sua vez é representado por y = f (u), u = ni=1 wi.xi−Bias,
P

sendo Bias(θ) um limiar usado para a saı́da u do neurônio.

Figura 21. Modelo de neurônio de Mcdulloch e Pitts [McCulloch and Pitts ]

5.6. Multilayer Perceptron (MLP)


MLP foram criadas para resolver problemas mais complexos, os quais não poderiam ser
resolvido pelo modelo básico (Figura 21), como aprendizado não linear. Sua arquitetura
pode variar de acordo com o problema, sendo variada a necessidade de uso maior ou
menor de neurônios ou de camadas [Tatibana and Kaetsu 2014].
A MLP é uma generalização do Perceptron (), constituı́da de um conjunto de nós
fonte, os quais formam a camada de entrada da rede, uma ou mais camadas ocultas de
nós computacionais e uma camada de saı́da. Com exceção da camada de entrada todas as
outras camadas realizam processamento. Esse tipo de RNA é unidirecional distribuı́da em
camadas e em cada camada é possı́vel ter vários neurônios e as camadas se comunicam
camada a camada até atingir a última camada (Figura 22) [d. Souza 2012].
As MLPs são redes feedforward totalmente conectado, e provavelmente, é a arqui-
tetura de mais comun em uso. O treinamento geralmente é realizado por retro propagação
de erros ou de um procedimento relacionado [Bergmeir and Benitez 2014].
Para o experimento de MLP utilizando R, é utilizado o package RSNNS
[Bergmeir and Benitez 2014]. O algoritmo de MLP ness experimento começa com o car-
regamento da biblioteca RSNNS, seguindo pela criação de uma nova coluna no conjunto
de dados TAE.

Página 23
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

Figura 22. Modelo de MLP [d. Souza 2012]

O próximo passo é criar um novo subconjundo de dado, onde vai armazenar so-
mente os atributos sem as classe. Outra base é criada mas essa com 3 (três), onde os
rótulos são High, Low e Medium, cada um desses atributos recebem valores entre 0 e 1.
A seguir é Divide a base em entras de treinamento e alvos de treino, seguindo da
normalização dos dados de treinamento e teste. Na sequencia é aplicada a função mlp()
[Bergmeir and Benitez 2014]. Essa função cria a MLP e a treina.
> Carregando a biblioteca RSNNS
> library(RSN N S)
>Cria uma nova coluna no conjunto de dados tae
> tae < −tae[sample(1 : nrow(tae), length(1 : nrow(tae))), 1 : ncol(tae)]
> nova base sem as classes
> taeV alue < −tae[, 1 : 5]
>novo registro somente com as classes
> taeT argets < −decodeClassLabels(tae[, 6])
> Divide a base em entras de treinamento e alvos de treino
> tae < −splitF orT rainingAndT est(taeV alue, taeT argets, ratio = 0.15)
> Normalizar treinamento e teste definido como obtido por splitForTrainingAndTest
> tae < −normT rainingAndT estSet(tae)
> Criação da MLP e treinamento
> model < −mlp(tae$inputsT rain, tae$targetsT rain, size = 5,
learnF uncP arams = c(0.1), maxit = 50, inputsT est = tae$inputsT est,
targetsT est = tae$targetsT est)

Página 24
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

> summary(model)

SNNS network definition file V1.4-3D


generated at Tue Feb 10 17:00:36 2015
network name : RSNNS untitled
source files :
no. of units : 13
no. of connections : 40
no. of unit types : 0
no. of site types : 0

learning function : Std Backpropagation


update function : Topological Order
unit default section :

> par(mf row = c(2, 2))

Figura 23. Grafico de mlp da produzido pela função par()

Página 25
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

> model
Class: mlp->rsnns
Number of inputs: 5
Number of outputs: 3
Maximal iterations: 50
Initialization function: Randomize Weights
Initialization function parameters: -0.3 0.3
Learning function: Std Backpropagation
Learning function parameters: 0.1
Update function: Topological Order
Update function parameters: 0
Patterns are shuffled internally: TRUE
Compute error in every iteration: TRUE
Architecture Parameters:
size
[1]5

All members of model:

[1] ”nInputs” ”maxit” ”initFunc”


[4] ”initFuncParams” ”learnFunc” ”learnFuncParams”
[7] ”updateFunc” ”updateFuncParams” ”shufflePatterns”
[10] ”computeIterativeError” ”snnsObjectarchParams”
[13] ”IterativeFitError” ”IterativeTestError” ”fitted.values”
[16] ”fittedTestValues” ”nOutputs”

Matriz de confusão de treinamento

>> conf usionM atrix(tae$targetsT rain, f itted.values(model))


predictions
targets 1 2 3
1 21 12 12
2 5 27 8
3 6 11 26

Matriz de confusão de teste


O experimento com MLP obteve resultado de teste e treinamento muito próximos
ambos atingindo acima dos 50%, no caso o de teste atingiu aproximadamente 65% ficando
um pouco acima do de treinamento, como pode ser observado na Tabela5.

Página 26
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

> conf usionM atrix(tae$targetsT est, predictions)


predictions
targets 1 2 3
1 4 0 3
2 0 8 1
3 2 2 3

Tabela 4. Resultado do experimento com package RSNNS função MLP

Subconjunto Acertos Erros Acurácia


treinamento 74 54 57.81
teste 15 8 65.21

5.7. Máquina de Vetor de Suporte (SVM)


O SVM representa uma poderosa técnica para classificação, regressão e de detecção de
outlier com uma representação do modelo intuitivo [Meyer 2004].
SVM é uma técnica de aprendizado estatı́stico, baseada no princı́pio da
Minimização do Risco Estrutural (SRM). Essa técnica é utilizada para reconhecimento
de padrões como: categorização de textos, categorização de SPAM, reconhecimento
de caracteres manuscritos, reconhecimento de textura, análise de expressões de genes
[Marins and Vellasco 2008].
O funcionamento das SVM é definido como duas classes e um conjunto de pon-
tos que pertencem a estas classes, as SVM determinam o hiperplano que os separa, de
forma a colocar a maior quantidade possı́vel de pontos da mesma classe do mesmo
lado, ao mesmo tempo que a distância de cada classe a esse hiperplano é maximizada
[Marins and Vellasco 2008], [Romero et al. 2010] e [Han et al. 2012].
Normalmente, as máquinas de vetor suporte operam em um espaço de dimensão
maior que a dimensão dos dados originais, no chamado espaço de caracterı́sticas. E é
neste espaço que se consegue a maximização desejada para obter uma melhor capacidade
de generalização de classificação [Marins and Vellasco 2008].
As principais caracterı́sticas do SVM são [Lorena and d. Carvalho 2003]:

• Boa Capacidade de generalização: os classificadores gerados por uma SVM


em geral alcançam bons resultados de generalização, sendo essa generalização
medida por sua eficiência na classificação de dados.
• Robustez em grandes dimensões: São muito robustas diante de objetos de gran-
des dimensões.
• Convexidade da função objetivo: a aplicação das SVMs implicam na otimização
de uma função quadrática, que possui apenas um mı́nimo global.
• Teoria bem definida: base teórica bem definida dentro da matemática e es-
tatı́stica.

Para o experimento realizado com SVM é utilizado o package e1071


[Dimitriadou et al. 2015]. Os passos que seguem o experimento são: primeiramente é

Página 27
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

carregado a biblioteca e1071, a qual fornecera as funções necessárias para a execução


do algoritmo. Na sequencia é dividido o conjunto de dados TAE em dois subconjuntos
sendo eles de treinamento e teste. O subconjunto de treinamento contem 2 (dois) terços
do conjunto de dados TAE, ou seja, possui 101 registro. O subconjunto de test fica com
um terço do conjunto de dados TAE, ou seja, 50 registros.
O próximo posso do experimento é criar o modelo, a qual é a utilização da função
svm() do package e1071 [Dimitriadou et al. 2015]. A função svm() é usada para treinar
um SVM. ela pode ser usada para executar regressão geral e classificação, bem como
estimativa de densidade [Dimitriadou et al. 2015].
Na sequencia é utilizada a função predict() A função predict() é uma função
genérica para predições de resultados de vários modelos de função de montagem
[Team and contributors worldwide 2014]. Os parâmetros usados na função predict() sao
o svm.model, que é descrição simbólica do modelo e o subconjunto de teste (testset[-6])
o valo atribuı́do a testset e o numero de colunas que o subconjunto possui.

> # Carregando o package e1071


> library(e1071)
> # Divisão do conjunto de dados TAE em treinamento e teste
> index < −1 : nrow(tae)
> testindex < −sample(index, trunc(length(index)/3))
> testset < −tae[testindex, ]
> trainset < −tae[−testindex, ]
> # descrição simbólica do modelo
> svm.model < −svm(Class.Attribute ∼ ., data = trainset, cost100, gamma = 1)
> svm.pred < −predict(svm.model, testset[−6])
O próximo passo do experimento com SVM é gerar a matriz de confusão. O
comando utilizado para apresentar a matriz de confusão é p tabe(). O table é utilizado
para cruzar os fatores de clarificação para construir uma tabela de contingencia de contas
de cada combinação de nı́veis de fatores [Team and contributors worldwide B 2014]

Página 28
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

> Gerando a matriz de confusão do SVM


> table(svm.pred, testset[, 6])
pred High Low Medium
High 12 1 7
Low 5 9 5
Medium 1 4 6

O resultado do experimento com SVM acertou 27 e errou 24, esse resultado mostra
um ı́ndice de acerto de 54% (Tabela5), assim considerando um valor muito baixo, pois os
números de acertos e erros estão muito próximos.

Tabela 5. Resultado do experimento com package e1071 função svm

Subconjunto Acertos Erros Acurácia


svm 27 24 54

5.8. K-Nearest Neighbors (KNN)


O Knn é mais um classificador que faz parte dos experimento realizados neste trabalho.
O aprendizado desse classificador é baseado na analogia. O conjunto de treinamento é
formado por vetores n-dimensionais e cada elemento deste conjunto representa um ponto
no espaço espaço n-dimensional .
Knn é algoritmos de classificação que são muito simples de entender, mas
funciona incrivelmente bem na prática. Esse classificador também pode surpreen-
der muito, a saber o KNN é um dos 10 melhores algoritmos de mineração de dados
[Thirumuruganathan 2011].
KNN é um dos métodos de mineração de dados mais populares para a
classificação, mas que muitas vezes não funciona bem com a escolha inadequada de
distância métrica ou devido à presença de inúmeros recursos irrelevante classe. Métodos
de transformação recurso lineares têm sido amplamente aplicada para extrair informações
relevantes de classe para melhorar a classificação kNN, o que é muito limitado em muitas
aplicações [Min et al. 2009].
Neste experimento foi utilizado a package KKNN do R [Schliep et al. 2015]. Essa
package executa classificação k-vizinhos mais próximo de um conjunto de teste usando
um conjunto de treinamento. Para cada linha do conjunto de teste, os k mais próximas
vetores do conjunto de treinamento são encontradas, e a classificação é feita através
do máximo de densidade de kernel somados. Além disso, mesmo variáveis ordinais e
contı́nuas pode ser previsto [Schliep et al. 2015].
Os passos de execução do algorı́timo se dão da seguinte maneira. Primeiro é
criado uma variável que será usada para dividir o conjunto em subconjunto de dados.
Nessa variável consta a quantidade de registros que o conjunto de dados TAE possui,
nesse caso sendo com 151 (cento e cinquenta e um) registros. Após ocorre a divisão do
conjunto de dados TAE em dois subconjuntos sendo o primeiro de aprendizagem com 101
(cento e um) registros e o segundo para validação com 50 (cinquenta) registros.
O próximo passo é a execução da classificação, é retornado uma lista de objetos e
armazenado em uma variável.

Página 29
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

> Dividindo o conjunto de dados em subconjuntos


> m < −dim(tae)[1]
> val < −sample(1 : m, size = round(m/3), replace = F ALSE, prob = rep(1/m, m))
> tae.learn < −tae[−val, ]
> tae.valid < −tae[val, ]
> Executa a classificação do KNN retornando uma lista de objetos
> tae.kknn < −kknn(Class.Attribute ., tae.learn, tae.valid, distance = 1,
kernel = ”triangular”)

A função summary() apresenta as informações contidas no retorno da execução


do KNN.

> summary(tae.kknn)
> Call:
kknn(f ormula = Class.Attribute ., train = tae.learn,
test = tae.valid, distance = 1, kernel = ”triangular”)
Response: ”nominal”
fit prob.High prob.Low prob.Medium
1 Medium 0.000000e+00 0.018461805 0.98153820
2 High 7.517055e-01 0.190163492 0.05813105
3 High 5.332432e-01 0.129927503 0.33682927
4 High 4.548342e-01 0.209421259 0.33574452
5 Low 3.005398e-01 0.500389262 0.19907094
6 Low 2.317130e-01 0.692590033 0.07569694
7 High 7.173274e-01 0.144719279 0.13795335
8 Medium 0.000000e+00 0.007224163 0.99277584
9 High 7.768995e-01 0.035005505 0.18809504
10 Low 2.938910e-01 0.706109004 0.00000000
11 Low 1.140223e-01 0.719290589 0.16668708
12 Low 1.736404e-01 0.572518169 0.25384147
13 Low 2.711206e-01 0.391325625 0.33755376
14 Medium 0.000000e+00 0.056159584 0.94384042
15 High 6.957354e-01 0.248484390 0.05578023
16 Low 1.469328e-01 0.853067245 0.00000000
17 Medium 0.000000e+00 0.210094672 0.78990533
18 Low 2.851754e-01 0.598614459 0.11621013
19 Low 3.005398e-01 0.500389262 0.19907094
20 High 5.852319e-01 0.336999063 0.07776901
21 Low 4.380928e-02 0.576456546 0.37973418
22 Low 0.000000e+00 0.520206905 0.47979310
23 High 8.779172e-01 0.122082820 0.00000000
24 High 8.873762e-01 0.112623767 0.00000000
25 Medium 0.000000e+00 0.056159584 0.94384042
26 Medium 3.268094e-01 0.220176521 0.45301406

Página 30
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

27 Low 1.704608e-01 0.430018745 0.39952044


28 High 8.206032e-01 0.159807719 0.01958903
29 High 5.495775e-01 0.026169519 0.42425296
30 High 3.598450e-01 0.334255556 0.30589940
31 Low 2.245892e-01 0.601522493 0.17388827
32 High 8.731753e-01 0.126824720 0.00000000
33 Low 2.076226e-01 0.404071519 0.38830585
34 Low 3.909138e-01 0.538765979 0.07032020
35 Medium 5.947773e-02 0.434042680 0.50647959
36 High 7.906828e-01 0.000000000 0.20931722
37 Low 2.692887e-02 0.558981088 0.41409005
38 Medium 2.054838e-01 0.333965727 0.46055047
39 High 4.548342e-01 0.209421259 0.33574452
40 High 4.822523e-01 0.161763954 0.35598372
41 Low 0.000000e+00 0.834322766 0.16567723
42 High 4.303661e-01 0.251951042 0.31768289
43 Low 2.860714e-07 0.999999714 0.00000000
44 Low 2.245892e-01 0.601522493 0.17388827
45 High 7.696066e-01 0.000000000 0.23039337
46 High 8.954434e-01 0.104556630 0.00000000
47 High 6.057785e-01 0.394221529 0.00000000
48 Low 2.317130e-01 0.692590033 0.07569694
49 Medium 1.144835e-01 0.303684800 0.58183172
50 High 4.303661e-01 0.251951042 0.31768289
Apresentação da matriz de confusão.
> f it < −f itted(tae.kknn)
> table(tae.valid$Class.Attribute, f it)

fit High Low Medium


High 11 0 2
Low 6 6 9
Medium 5 4 7

Geração do gráfico resultando da classificação (Figura 24).


> pcol < −as.character(as.numeric(tae.valid$Class.Attribute))
> pairs(tae.valid[1 : 4], pch = pcol, col = c(”green3”, ”red”)
([(tae.valid$Class.Attribute! = f it) + 1])

Figura 24. Grafico da função pairs knn

Página 31
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

O experimento com KNN obteve resultado de 48% de acuracias, sendo que ocor-
rem 24 acertos de 50 registos,ou seja, esse resultado do experimento teve uma taxa de
acerto menor que a taxa de erros. Tabela6.

Tabela 6. Resultado do experimento com package RSNNS função MLP

Subconjunto Acertos Erros Acurácia


knn 24 26 48

6. Regras de associação
As regras de associação têm como função encontrar relacionamentos ou padrões frequen-
tes entre conjuntos de dados [Vasconcelos and Carvalho 2004]. Esse tipo de tarefa pode
prever qualquer tipo de atributo, não somente classes, o que lhe dá liberdade de pre-
ver combinações de atributos [Witten et al. 2011]. Para tratar questões relacionadas a
extração de regras de Associação usa-se o modelo proposto por Agrawal et ali (1993), o
qual as regras devem atender a um suporte (corresponde a frequência com que ocorrem
os padrões em toda base) e confiança mı́nimas (fração das transações que satisfaz a união
dos itens) especificados [Gonçalves 2005].
As regras de associação são tipicamente utilizadas em análise de transações
de compras, para indicar as tendências de compras dos clientes [Gonçalves 2005].
Outras aplicações de regras de associação Podem ser aplicadas em super-
mercados, planejamento de inventários, organização e gôndolas e planos de
vendas[Vasconcelos and Carvalho 2004].

6.1. Apriori
Apriori é um dos algoritmos mais conhecidos quando o assunto é mineração de re-
gras de associação. A função desse algoritmo é encontrar todos os conjuntos de itens
frequentes em um conjunto de dados, os quais são chamados de itemsets frenquence
[Romao et al. 2013].
Para o experimento de Regra de Associação Apriori é utilizado o package aru-
les [Hahsler et al. 2014]. Fornece a infra-estrutura para a representação, manipulação e
análise de dados e padrões (conjuntos de itens frequentes e as regras de associação) da
transação.
Os passos que seguem para a execução da Regra de associação Apriori são. Pri-
meiramente como a base de dados TAE tem sua caracterı́stica para Classificação é ne-
cessário remover a o atributo com os registros que presentam as classes. Os dados do
conjunto de dados para regras de associação devem ser logico ou fator. Portanto para esse
experimento é necessário converter os dados. Para esse experimento foi convertido todos
os atributos para fator.
E por fim executar a função apriori do R para gerar as regras de associação. Essa
função busca os conjuntos de itens frequentes, regras de associação ou associação hiper
arestas usando o algoritmo Apriori. O algoritmo Apriori emprega pesquisa sábio de nı́vel
para conjuntos de itens frequentes. A implementação de Apriori usado inclui algumas me-
lhorias (por exemplo, uma árvore de prefixo e item de classificação) [Hahsler et al. 2014].

Página 32
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

>Remover a colunas das classes


> T ae2 < −tae2[, −6]
>Transformar dados numérico para fator
> tae2 < −transf orm(tae2, N ative.English = as.f actor(N ative.English))
> tae2 < −transf orm(tae2, Course.Instructor = as.f actor(Course.Instructor))
> tae2 < −transf orm(tae2, Course = as.f actor(Course))
> tae2 < −transf orm(tae2, Semester = as.f actor(Semester))
> tae2 < −transf orm(tae2, Class.Size = as.f actor(Class.Size))

> rules < −apriori(tae2, parameter = list(supp = 0.5, conf = 0.9, target = ”rules”))
Parameter specification:
confidence minval smax arem aval originalSupport
0.9 0.1 1 none FALSE TRUE

support minlen maxlen target ext


0.5 1 10 rules FALSE

Algorithmic control:
filter tree heap memopt load sort verbose
0.1 TRUE TRUE FALSE TRUE 2 TRUE

apriori - find association rules with the apriori algorithm


version 4.21 (2004.05.09) (c) 1996-2004 Christian Borgelt
set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[101 item(s), 151 transaction(s)] done [0.00s].
sorting and recoding items ... [2 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 done [0.00s].
writing ... [0 rule(s)] done [0.00s].
creating S4 object ... done [0.00s].
> write(rules,file=,sep=”,”, quote =TRUE, col.names = NA)
> summary(rules)
set of 0 rules
Para este experimento não foi encontrado nenhuma regra de associação, talvez
pelo conjunto de dados existir somente valore numéricos mesmo sendo esses transforma-
dos em fator.

7. Agrupamento
Agrupamento é uma tarefa que procura segmentar populações heterogêneas em subgru-
pos ou segmentos homogêneos, ou seja, agrupar objetos fı́sicos ou abstratos em clas-
ses de objetos similares de forma a identificar agrupamentos que descrevem os dados
[Vasconcelos and Carvalho 2004] e [Silva 2004].
O principal objetivo das técnicas de agrupamento como, achar dados que se agru-
pam naturalmente, classificando os dados em diferentes grupos e/ou categorias, sendo
essas classes ou grupos não conhecidos inicialmente [de Baker et al. 2011].

Página 33
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

Técnicas de agrupamento são aplicadas quando não existem classes para pre-
dizer, mas as instancias são divididas em grupos naturais. Esses grupos presumivel-
mente reflete algum mecanismo que é no domı́nio do qual as instancias são desenhadas
[Witten et al. 2011]. As Técnicas de agrupamento não tem pretensão de classificar, es-
timar ou predizer o valor de uma variável, mas apenas identificar os grupos de dados
similares [Camilo and Silva 2009].
As tarefas de agrupamento podem ser usados nos mais variados casos, como, pes-
quisa de mercado, reconhecimento de padrões, processamento de imagens, análise de
dados, segmentação de mercado, taxonomia de plantas e animais, pesquisas geográficas,
classificação de documentos da Web e detecção de comportamentos atı́picos (fraudes)
[Camilo and Silva 2009].

7.1. K-means
k-means é um método muito usado para particionar automaticamente um conjunto em
grupos de N dados, procedendo selecionar centros de cluster N inicial e em seguida de
forma iterativa refinado-os. O algoritmo converge quando não há mais nenhuma mudança
na atribuição de instancias para grupos [Wagstaff et al. 2001].
Os passos para execução do K means procedem da seguinte forma: Como se trata
de um agrupamento e a base de dados tem caracterı́sticas para classificação é necessário
que o atributo que corresponde as classes seja excluı́do.
Para esse experimento é criado 3 cluster. Depois é executado a função Kmeans()
[Wagstaff et al. 2001]. Essa função retorna um objeto da classe Kmeans, que tem uma
impressão em um método fitted, a qual é uma lista com componentes.
O próximo passo é plotar o resultado, primeiro o gráfico com que apresenta os
cluster separados (Figura 25). e depois o gráfico com os centroides descriminados (Fi-
gura 26).

># Agrupamento K-Means com 3 clusters


> f it < −kmeans(tae, 3)
># plot cluster
>library(cluster)
> clusplot(tae, f it$cluster, color = T RU E, shade = T RU E, labels = 2, lines = 0)

Figura 25. Grafico de Kmeans da produzido pela função par()

Página 34
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

># Plot Centroide


> library(f pc)
> plotcluster(tae, f it$cluster)

Figura 26. Grafico de Kmeans da produzido pela função par()

7.2. Hierárquico
Para o experimento com Agrupamento Hierárquico foi executado os seguintes passos.
Primeiramente é executado a função dist(). Esta função calcula e retorna a matriz de
distância calculada, usando a medida de distância especificadas para calcular as distâncias
entre as linhas de uma matriz de dados [Team and contributors worldwide 2014]. Para
esse experimento é usada a distancia euclideana. na sequencia gerar o agrupamentos
usando o método ward.D e criar o dendrograma(Figura 27). E por fim realizar a poda
para apresentar o gráfico com 3 cluster (Figura 28).
> distancia da matriz calculada > d < −dist(tae, method = ”euclidean”)
> Gerar agrupamento > f it < −hclust(d, method = ”ward.D”)
> Gerar gráfico dos cluster.
> plot(f it)

Figura 27. dendograma

> Poda da árvore para 3 cluster


> groups < −cutree(f it, k = 3)
> Gráfico com as margens do dendrograma
> rect.hclust(f it, k = 3, border = ”red”)

Página 35
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

Figura 28. Grafico do agrupamento hierárquico

8. Dificuldades Encontradas
No desenvolvimento deste relatório foi encontrado algumas dificuldades. Essas dificulda-
des estão descritas nessa seção deste relatório.
A primeira dificuldade encontrada foi a necessidade de alterar as instancias de
alguns atributos. Foi necessário modificar os valores de das instancias do atributo
Class.Atributo. Os valores para esse atributo era 1, 2 e 3, os quais significavam Low,
Medium e High, sucessivamente. A modificação foi dos valores numéricos para as lite-
rais, das quais respeitando suas caracterı́sticas.
O motivo pelo qual ocorreu as mudanças foi o fato que os resultados não estavam
sendo de fáceis compreensão não tendo clareza se alguns dos resultados não estava sendo
gerados corretamente.
Outra dificuldade encontra foi à necessidade de renomear os atributos do conjunto
de dados. Ao carregar o conjunto de dados para o R os atributos estavam com nomes
sugeridos pelo R, nesse caso foram atribuı́dos sucessivamente os seguintes nomes para os
atributos: V1, V2, V3, V4, V5, V6.
Por meio de pesquisa foi encontrado uma função que possibilitou editar os nomes
dos atributos. A função já escrita para o banco com os novos nomes de atributo está
descrito a seguir.
> names(tae) = c(”N ative.English”, ”Course.Instructor”, ”Course”,
”Semester”, ”Class.size”, Class.Attribute”)
Com a execução dessa função os atributos foram editados ficando da seguinte
forma:
• V1 passou a ser Native.English;
• V2 passou a ser Course.Instructor;
• V3 passou a ser Course;
• V4 passou a ser Semester;
• V5 passou a ser Class.Size;
• V6 passou a ser Class.Attribute.
Esses novos nomes dos atributos, são sugeridos pelosite Machine Learning Repo-
sitory [Bache and Lichman 2013].
Outra dificuldade encontrada foi na pesquisa por pacotes do R. Alguns do pacotes
não possuem mais suporte para a versão atual do R, o que foi necessário pesquisar outras
abordagens e pacotes que se encaixasse no trabalho.

Página 36
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

Além da dificuldade de encontrar pacotes validos, muitos dos pacotes encontrados


não possuı́am clareza na documentação o que também tornou uma dificuldade devido a
complexidade de entendimento.
Na parte de Regras de Associação não foi encontrado uma solução que se ade-
quasse ao conjunto de dados TAE. Outros testes foram realizando mudando valores de
parâmetros da função apriori, como valor de confiança, entretanto não chegou a uma
solução satisfatória, da qual apresentasse resultado com regras. Em conjunto de dados
que apresentava dados logico ou fator sem a necessidade de conversão conseguiu obter
resultados com regras.

9. Analise dos resultados


Levando em consideração que o conjunto de dados TAE tem sua principal caracteris-
tica a de classificação, a Tabela7 apresenta o resultado obtidos com os algoritmos de
classificação, onde o J48 do package Rkeka obteve o melhor resultado e o KNN obteve o
pior resultado. Os demais algoritmos atingindo a faixa entre 50 e 58 por cento.

Tabela 7. Resultado do experimento com package RSNNS função MLP

Algoritmos Acertos Erros Acurácia


party 57 32 50.44
J48 71 42 62.83
naive bayes 62 51 54.88
MLP 74 54 57.81
SVM 27 24 54
Knn 24 26 48

10. Conclusão
Os resultados dos experimentos de classificação mostrou que o J48 teve o melhor resul-
tado obtendo o maior ı́ndice de acertos, entretanto vale lembrar que esse algoritmo dentre
os algoritmos de classificação é o que gerou a maior árvore e que em virtude disso foi
preciso realizar uma poda para que gerasse uma árvore compreensı́vel.
Entre os algoritmos de classificação pode se perceber que todos com exceção do
KNN obtivera valores acima dos 50 por cento, variando o resultado em uma curta faixa,
não ultrapassando os 7 por cento de diferença do pior caso que ultrapassou os 50 por
cento.
Para este experimento pode se concluir que a base de dados não esta adequada para
aplicar algoritmo de regra de associação apriori, pois não obteve nenhuma regra. Essa
fato pode ter acontecido por o conjunto de dados TAE possuir apenas dados numéricos os
quais não são compatı́veis com o apriori do R, que por sua vez aceita somente valores de
instancias lógicas ou categóricas.
Os algoritmos de agrupamento K-meas e hierárquico, ambos conseguiram identi-
ficar 3 (três) cluster, porem muito difı́cil de compará-los os resultado dos gráficos. Entre-
tanto o R proporcionou um gráfico mais nı́tido e claro com o K-meas.

Página 37
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

Os algoritmos de Regra de associação e Agrupamento não são indicados para


o conjunto de dados TAE, pois como destacado nas descrições do conjunto de dados, o
mesmo tem como tarefa associada Classificação. Por esse motivo que talvez os algoritmos
de classificação se comportaram melhor com o conjunto de dados.

Referências
[Bache and Lichman 2013] Bache, K. and Lichman, M. (2013). UCI machine learning re-
pository.
[Bergmeir and Benitez 2014] Bergmeir, C. and Benitez, J. M. (2014). Package rsnns.
[Camilo and Silva 2009] Camilo, C. O. and Silva, J. C. (2009). Mineração de dados: Con-
ceitos, tarefas, métodos e ferramentas. Relatorio técnico, Universidade Federal de
Goiás.
[Costa et al. 2013] Costa, E., d. Baker, R. S. J., Amorim, L., aes, J. M., and Marinho,
T. (2013). Mineraç ao de dados educacionais: Conceitos, técnicas, ferramentas e
aplicaç ao. Anais da Jornada de Atualizaç ao em Informática na Educaç ao.
[d. Souza 2012] d. Souza, F. A. A. (2012). Análise de desempenho da rede neural artificial
do tipo multilayer perceptron na era multicore. PhD thesis.
[de Baker et al. 2011] de Baker, R. S. J., Isotani, S., and de Carvalho, A. M. J. B. (2011).
Mineraçao de dados educacionais: Oportunidades para o brasil.
[Dimitriadou et al. 2015] Dimitriadou, E., Hornik, K., Leisch, F., Meyer, D., and Weinges-
sel, A. (2015). Package e1071.
[Gonçalves 2005] Gonçalves, E. C. (2005). Regras de associação e suas medidas de inte-
resse objetivas e subjetivas. INFOCOMP Journal of Computer Science, 4(1):26–35.
[Hahsler et al. 2014] Hahsler, M., Buchta, C., Gruen, B., Hornik, K., and Hahsler, M. M.
(2014). Package arules.
[Han et al. 2012] Han, J., Kamber, M., and Pei, J. (2012). Data Mining Concepts and Te-
chiques. Morgan Kaufamann.
[Hornik et al. 2015] Hornik, K., Buchta, C., Hothorn, T., Karatzoglou, A., Meyer, D., and
Zeileis, A. (2015). Package rweka.
[Hothorn and Everitt 2014] Hothorn, T. and Everitt, B. S. (2014). A handbook of statistical
analyses using R. CRC Press.
[Hothorn et al. 2014] Hothorn, T., Hornik, K., Strobl, C., and Zeileis, A. (2014). Package
party. Package Reference Manual for Party Version 0.9-998, 16:37.
[Hothorn et al. 2015] Hothorn, T., Hornik, K., and Zeileis, A. (2015). ctree: Conditional
inference trees.
[Junior et al. 2013] Junior, R. C., Machado, R. D., and Schreiber, J. N. C. (2013). Uso da
mineração de dados na predição de alunos com perfil de evasão do ensino superior.
[Lorena and d. Carvalho 2003] Lorena, A. C. and d. Carvalho, A. C. P. L. F. (2003).
Introdução às máquinas de vetores suporte. Relatorio técnico do icmc, Universidade
de São Paulo - Instituto de Ciências Matemática e de Computação.

Página 38
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

[Marins and Vellasco 2008] Marins, A. I. M. and Vellasco, M. M. B. R. (2008).


Implementação do frex svm: Máquinas de vetor suporte para classificação em mútiplas
classes.
[Maximiano 2011] Maximiano, L. (2011). Práticas investigativas - redes neurais em java.
Access date: 10 fev. 2014.
[McCulloch and Pitts ] McCulloch, W. S. and Pitts, W. A logical calculus of the ideas im-
manent in nervous activity. The bulletin of mathematical biophysics, 5.
[Meyer 2004] Meyer, D. (2004). Support vector machines: The interface to libsvm in pac-
kage e1071.
[Min et al. 2009] Min, R., Stanley, D., Yuan, Z., Bonner, A., and Zhang, Z. (2009). A deep
non-linear feature mapping for large-margin knn classification. In Data Mining, 2009.
ICDM ’09. Ninth IEEE International Conference on, pages 357–366.
[Negnevitsky 2005] Negnevitsky, M. (2005). Artificial Intelligence A Guide to Intellegence
System. Addison-Wesley, 2nd edition.
[Ripley 2014] Ripley, B. (2014). R data import/export.
[Romao et al. 2013] Romao, W., NIederauer, C. A. P., Martins, A., Tcholakian, A., Pacheco,
R. C. S., and Barcia, R. M. (2013). Extração d regras de associação em c&t: O algo-
ritmo apriori. XIX Encontro Nacional em Engenharia de Produçao, V ICIE - Interna-
tional Congress of Industrial Engineering.
[Romero et al. 2010] Romero, C., Ventura, S., Pechenizkiy, M., and R. S. J, B. (2010).
Handbook of Educational Data Mining. Chapman and Hall/CRC.
[Schliep et al. 2015] Schliep, K., Hechenbichler, K., and Schliep, M. K. (2015). The kknn
package.
[Scoss 2006] Scoss, A. M. (2006). A clusterização e classifica ção no processo de data
mining para análise do desempenho docente no ensino de graduação. Monografia,
Universidade do Extremo sul Catarinense - UNESC.
[Silva 2004] Silva, G. C. (2004). Mineração de regras de associação aplicada a dados da
secretaria municipal de saúde de londrina pr.
[Srivastava et al. 2000] Srivastava, J., Cooley, R., Deshpande, M., and Tan, P. (2000). Web
usage mining: discovery and applications of usage patterns from web data. SIGKDD
Explor. Newsl., 1(2):12–23.
[Tatibana and Kaetsu 2014] Tatibana, C. Y. and Kaetsu, D. Y. (2014). Redes neurais. Access
date: 10 fev. 2014.
[Team and contributors worldwide 2014] Team, R. C. and contributors worldwide (2014).
The r status package.
[Team and contributors worldwide B 2014] Team, R. C. and contributors worldwide B
(2014). The r base package.
[Thirumuruganathan 2011] Thirumuruganathan, S. (2011). A detailed introduction to k-
nearest neighbor (knn) algorithm. Access date: 10 fev. 2014.
[Vasconcelos and Carvalho 2004] Vasconcelos, L. d. and Carvalho, C. d. (2004). Aplicação
de regras de associação para mineração de dados na web. Relatório Técnico.

Página 39
Experimento de aplicação de algoritmos de classificação em uma base de dados
utilizando linguagem R

[Wagstaff et al. 2001] Wagstaff, K., Cardie, C., Rogers, S., Schrödl, S., et al. (2001). Cons-
trained k-means clustering with background knowledge. In ICML, volume 1, pages
577–584.
[Witten et al. 2011] Witten, I. H., Frank, E., and Hall, M. A. (2011). Data Mining Pratical
Machine Learning Tools and Techniques. Morgan Kaufamann.
[Zhao 2014] Zhao, Y. (2014). R and data mining: Examples and case studies.

Página 40