Data Mining sobre um dataset de Câncer de Mama
Fabio Luis Silva1
1
Programa de PósGraduação em Computação Aplicada da Universidade Tecnológica
Federal do Paraná – Curitiba, PR – Brasil
[email protected]
Abstract. This paper presents a report of experiments taken on data mining
subject by using the R tool over a public dataset from UCI containing breast
cancer data. This report gives details on how the dataset was setup and
describes how the following tasks were applied: Classification (decision tree,
naïve-Bayes, MLP, SVM, k-NN), Association rules (apriori), Cluster (k-means
& hierarchical) and Anomaly Detection. As a result, SVM classification
appeared to be the most accurated model for the dataset; 33 rules were
appointed by the Apriori algorithm; and the cluster algorithms showed that
some overlapping exist between malignant and benign predictions in the
studied dataset.
Resumo. Este artigo apresenta um relatório de experimentos de mineração de
dados utilizando a ferramenta R em uma base de dados pública da UCI, com
informações sobre câncer de mama. Detalhou-se como a base de dados foi
preparada para mineração e na sequência as seguintes tarefas de mineração
foram aplicadas: Classificação (árvore de decisão, naïve-Bayes, MLP, SVM,
k-NN), Regras de associação (a priori), Agrupamento (k-means e hierárquico)
e Detecção de desvios. Como resultado, a classificação SVM mostrou-se a de
melhor acurácia; 33 regras de associação foram levantadas pelo algoritmo
Apriori; e os algoritmos de agrupamentos mostraram que existem algumas
sobreposições entre as previsões de tumores malignos e benignos na base
estudada.
1. Introdução
Dados médicos normalmente são desbalanceados, o que causa sérios problemas de
classificação e análise, já que fatores menos frequentes possuem grande importância, já
que anormalidades podem ser mais representativas quando se tenta buscar identificar
padrões fora da população dita sadia [Wang et.al 2013]. Este relatório mostra a
aplicação de várias técnicas de mineração de dados (para classificação, associação,
agrupamento e análise de desvios) sobre uma base pública de câncer de mama,
disponível na UCI [Lichman 2013].
A mineração foi efetuada com o auxílio da ferramenta Rstudio, e o resultado é
apresentado como relatório para disciplina de Data Mining, do segundo semestre de
2014, dentro do Programa de Pós-Graduação Aplicada da Universidade Tecnológica
Federal do Paraná.
O restante deste artigo está dividido da seguinte forma: a Seção 2 apresenta o
dataset utilizado, suas características, como foi carregada no Rstudio, e como foi
1
preparada para mineração. A seção 3 traz os métodos de classificação aplicados. A
seção 4 demonstra o uso da associação Apriori. Na Seção 5 apresentou-se os métodos de
agrupamento e na Seção 6 a análise sobre anomalias e desvios. Finalmente na Seção 7
encontram-se as análises dos resultados e na Seção 8 a conclusão do artigo.
2. Base e Ferramenta utilizada
Foi utilizado o RStudio. Esta ferramenta executa sobre a API do R (Figura 1).
Figura 1. RStudio
2.1. Problema
Diagnosticar preventivamente se um tumor é maligno ou benigno.
2.2. Descrição da Base Utilizada
Utilizou-se os dados disponíveis no repositório da UCI (University of California Irvine, UCI Machine Learning Repository, http://archive.ics.uci.edu/ml/index.htm) com
informações sobre Câncer de Mama. Este banco de dados de câncer de mama foi
disponibilizado na UCI a partir da Universidade de Wisconsin Hospitais, Madison,
sendo as informações doadas pelo Dr. William H. Wolberg [Wolberg et. al 1990].
As amostras foram sendo coletadas pelo Dr. Wolberg por partes, conforme os
casos clínicos tratados foram sendo acumulados. O banco de dados, portanto, reflete
este agrupamento cronológico dos dados [Mangasarian et.al 1992]:
Grupo 1: 367 casos (Janeiro de 1989)
2
Grupo 2: 70 casos (outubro de 1989)
Grupo 3: 31 casos (Fevereiro de 1990)
Grupo 4: 17 casos (Abril de 1990)
Grupo 5: 48 casos (Agosto de 1990)
Grupo 6: 49 casos (Janeiro de 1991)
Grupo 7: 31 casos (Junho de 1991)
Grupo 8: 86 casos (Novembro de 1991)
Total: 699
A descrição dos campos está representada no Quadro 1.
Quadro 1. Base de dados sobre Câncer de Mama
Núm. de Instâncias
699
Área de Pesquisa
Núm. de Atributos
11
Característica dos
Atributos
Registros
Incompletos
16
Data dos Dados
Humanas
Real
Nov/1995
Atributos
Cada instância de dado contém 9 atributos e uma classe. Os valores dos atributos são
calculados (e atribuídos valores de 1 a 10) a partir da imagem digitalizada de uma
amostra aspirada através de uma cânula ou agulha fina da massa de uma mama. Eles
descrevem as características dos núcleos celulares presentes na imagem. Cada instância
tem uma das 2 classes possíveis: benignos ou malignos, portanto os valores da classe
são binários.
Os termos usados como atributos são elementos dos relatórios de patologia nas
amostras retiradas de um nódulo do seio para verificar se são malignos (cancerosos) ou
benignos (não cancerosos). Por exemplo, as células cancerosas tendem a variar em
tamanho e forma. Então, uniformidade de tamanho e formato das células da amostra
apontam em uma direção benigna. Também núcleos nus (bare nuclei), cromatina branda
(bland chromatin) e nucléolo normal (normal nucleoli) são sinais de benignidade. A
análise do valor de cada atributo é parte de um teste triplo. Se um dos testes sugere
malignidade, uma biópsia para análise histológica faz-se necessário.
Os atributos são:
• Espessura dos grupos (Clump Thickness): células benignas a tendem a ser
agrupadas em monocamadas, enquanto que as células cancerosas são muitas
vezes agrupadas em multicamadas.
• Uniformidade de tamanho e forma da célula (Uniformity of Cell Size &
3
•
•
•
•
•
•
Uniformity of Cell Shape): As células cancerosas tendem a variar em
tamanho e forma (como o exemplo mostrado na Figura 2). É por isso que
esses parâmetros são úteis para determinar se as células são cancerosos ou
não.
Adesão Marginal (Marginal Adhesion): As células normais tendem a ficar
juntas. As células cancerosas tendem a perder essa capacidade (como o
exemplo mostrado na Figura 3). Então perda de adesão é um sinal de
malignidade.
Tamanho único das células epiteliais (Single Epithelial Cell Size): está
relacionada com a uniformidade mencionado acima. As células epiteliais que
estão significativamente aumentadas pode ser uma célula maligna.
Núcleos nus (Bare Nuclei): Este é um termo usado para núcleos que não são
rodeados pelo citoplasma (o resto da célula). São tipicamente vistos em
tumores benignos.
Suavidade da cromatina (Bland Chromatin): Descreve uma textura uniforme
do núcleo visto em células benignas. Em células cancerosas, a cromatina
tende a ser mais grosseira.
Nucléolo normal (Normal Nucleoli): nucléolos são pequenas estruturas
existentes no núcleo. Em células normais, o nucléolo é geralmente muito
pequeno, quando visível. Em células cancerosas os nucléolos se tornam mais
proeminentes.
Mitose: Patologistas podem determinar o grau de um tumor contando o
número de mitoses.
Figura 2. Células cancerosas mostrando forma e tamanho irregulares
4
Figura 3. Células cancerosas mostrando pouca adesão
Os dados originalmente estavam disponíveis num arquivo-texto, com valores
separados por vírgula, contendo 11 campos para cada instância (um campo com código
da amostra, 9 atributos e um campo com as classes), conforme apresentado na Tabela 1.
O campo de código da amostra é numérico inteiro, os atributos nos campos 2 à 10
possuem valores inteiros entre 1 e 10 e o campo classe possui os valores 2 (para
benígno) e 4 (para maligno).
5
Tabela 1. Informação dos atributos
#
Attribute
Domain
1
Sample code number
ID number
2
Clump Thickness
1 - 10
3
Uniformity of Cell Size
1 - 10
4
Uniformity of Cell Shape
1 - 10
5
Marginal Adhesion
1 - 10
6
Single Epithelial Cell Size
1 - 10
7
Bare Nuclei
1 - 10
8
Bland Chromatin
1 - 10
9
Normal Nucleoli
1 - 10
10
Mitoses
1 - 10
11
Class
2/4
2.3. Preparação e carga do Data Set
Para carga do dataset no R alguns procedimentos foram tomados.
Atributos sem valor
16 instâncias no repositório não possuem valores em algum dos atributos. Os valores
nesses casos estão referidos pelo caracter “?”. Para o trabalho apresentado neste artigo
estes valores foram removidos do arquivo da base (agora com 683 instâncias válidas,
conforme demonstrado no Quadro 2).
6
Quadro 2. Base de dados sobre Câncer de Mama
Núm. de Instâncias
683
Área de Pesquisa
Núm. de Atributos
11
Característica dos
Atributos
Registros
Incompletos
0
Data dos Dados
Humanas
Real
Nov/1995
Substituição do valor numérico da classe
Por clareza, os valores das classes, inicialmente indicado por 2 ou 4 foram substituídos
pelas palavras “benigno” e “maligno”, respectivamente.
Carga do dataset
Os valores foram carregados diretamente do arquivo (em formato csv) para o Rstudio:
> bc<read.csv("C:/Users/A055506/Dropbox/Documents/Profissional/Mestrado/Da
ta Mining/breast-cancer-wisconsin.data", header=F)
Nome dos atributos
O dataset não trazia os nomes dos atributos diretamente no arquivo, portanto os nomes
dos campos foram carregados na sequência:
> names(bc) <- c("Samplecodenumber", "ClumpThickness",
"UniformityofCellSize", "UniformityofCellShape", "MarginalAdhesion",
"SingleEpithelialCellSize", "BareNuclei", "BlandChromatin",
"NormalNucleoli", "Mitoses", "Class")
Sumário dos valores carregados
Mostrando o tamanho do dataset, sua estrutura, e um sumário dos dados.
> dim(bc)
[1] 683 11
> str(bc)
'data.frame':
683 obs. of 11 variables:
$ Samplecodenumber
: int 1000025 1002945 1015425 1016277
1017023 1017122 1018099 1018561 1033078 1033078 ...
$ ClumpThickness
: int 5 5 3 6 4 8 1 2 2 4 ...
$ UniformityofCellSize
: int 1 4 1 8 1 10 1 1 1 2 ...
$ UniformityofCellShape
: int 1 4 1 8 1 10 1 2 1 1 ...
$ MarginalAdhesion
: int 1 5 1 1 3 8 1 1 1 1 ...
7
$ SingleEpithelialCellSize: int 2 7 2 3 2 7 2
$ BareNuclei
: int 1 10 2 4 1 10
$ BlandChromatin
: int 3 3 3 3 3 9 3
$ NormalNucleoli
: int 1 2 1 7 1 7 1
$ Mitoses
: int 1 1 1 1 1 1 1
$ Class
: Factor w/ 2 levels
1 1 1 1 1 2 1 1 1 1 ...
> summary(bc)
Samplecodenumber
ClumpThickness
Min.
:
63375
Min.
: 1.000
1st Qu.: 877617
1st Qu.: 2.000
Median : 1171795
Median : 4.000
Mean
: 1076720
Mean
: 4.442
3rd Qu.: 1238705
3rd Qu.: 6.000
Max.
:13454352
Max.
:10.000
UniformityofCellSize UniformityofCellShape
Min.
: 1.000
Min.
: 1.000
1st Qu.: 1.000
1st Qu.: 1.000
Median : 1.000
Median : 1.000
Mean
: 3.151
Mean
: 3.215
3rd Qu.: 5.000
3rd Qu.: 5.000
Max.
:10.000
Max.
:10.000
MarginalAdhesion SingleEpithelialCellSize
Min.
: 1.00
Min.
: 1.000
1st Qu.: 1.00
1st Qu.: 2.000
Median : 1.00
Median : 2.000
Mean
: 2.83
Mean
: 3.234
3rd Qu.: 4.00
3rd Qu.: 4.000
Max.
:10.00
Max.
:10.000
BareNuclei
BlandChromatin
Min.
: 1.000
Min.
: 1.000
1st Qu.: 1.000
1st Qu.: 2.000
Median : 1.000
Median : 3.000
Mean
: 3.545
Mean
: 3.445
3rd Qu.: 6.000
3rd Qu.: 5.000
Max.
:10.000
Max.
:10.000
NormalNucleoli
Mitoses
Min.
: 1.00
Min.
: 1.000
1st Qu.: 1.00
1st Qu.: 1.000
Median : 1.00
Median : 1.000
Mean
: 2.87
Mean
: 1.603
3rd Qu.: 4.00
3rd Qu.: 1.000
Max.
:10.00
Max.
:10.000
Class
benign
:444
malignant:239
2 2 2 ...
10 1 1 1 ...
3 1 2 ...
1 1 1 ...
1 5 1 ...
"benign","malignant":
Densidade das Amostras
Para verificar como as amostras estão distribuídas, construiu-se o gráfico de densidade
de cada atributo (Figura 4).
> plot(density(bc$ClumpThickness))
8
>
>
>
>
>
>
>
>
plot(density(bc$UniformityofCellSize))
plot(density(bc$UniformityofCellShape))
plot(density(bc$MarginalAdhesion))
plot(density(bc$SingleEpithelialCellSize))
plot(density(bc$BareNuclei))
plot(density(bc$BlandChromatin))
plot(density(bc$NormalNucleoli))
plot(density(bc$Mitoses))
9
Figura 4. Densidade das amostras
10
Frequência dos Fatores (Figura 6)
• 65% - Benignos (444)
• 35% - Malignos (239)
• Total: 683
> table(bc$Class)
benign malignant
444
239
> pie(table(bc$Class))
> barplot(table(bc$Class))
Figura 6. Frequência dos fatores na amostra
Balanceamento da base
O conjunto de dados encontra-se desbalanceado, como pode-se observar acima, pois
amostras com resultado benigno (444) aparecem em maior quantidade que as malignas
(239). Portanto, optou-se por balancear os dados antes de utilizá-los, utilizando a função
SMOTE da biblioteca DmwR [Wang et al. 2014]
> library (DMwR)
> bcB <- SMOTE(Class ~ ., bc, perc.over = 100,perc.under=200)
> table(bcB$Class)
benign malignant
478
478
11
• 50% - Benignos (478)
• 50% - Malignos (478)
• Total: 956
3. Classificação
Nesta seção demonstra-se a aplicação dos algoritmos de classificação (árvore de
decisão, Naïve-Bayes, MLP, SVM, k-NN)
3.1. Selecionando o Conjunto de Treinamento e Teste
• Dados de treinamento: 70% = 669
• Dados de teste: 30% = 287
>
>
>
>
>
set.seed(1234)
ind <- sample(2,nrow(bcB), replace=TRUE, prob=c(0.7,0.3))
trainData <- bcB[ind==1,]
testData <- bcB[ind==2,]
table(trainData$Class)
benign malignant
336
333
> table(testData$Class)
benign malignant
142
145
3.2. Árvore de Decisão
Utilizando a biblioteca party e gerando a ctree (Figura 7).
> library (party)
> myformula <- Class ~ ClumpThickness + UniformityofCellSize +
UniformityofCellShape + MarginalAdhesion + SingleEpithelialCellSize +
BareNuclei + BlandChromatin + NormalNucleoli + Mitoses
> myctree <- ctree(myformula, data=trainData)
> table(predict(myctree), trainData$Class)
benign malignant
benign
326
8
malignant
10
325
> print(myctree)
Conditional inference tree with 6 terminal nodes
Response: Class
Inputs: ClumpThickness, UniformityofCellSize, UniformityofCellShape,
MarginalAdhesion, SingleEpithelialCellSize, BareNuclei,
BlandChromatin, NormalNucleoli, Mitoses
Number of observations: 669
1) BareNuclei <= 1; criterion = 1, statistic = 432.779
12
2) UniformityofCellSize <= 3; criterion = 1, statistic = 223.451
3) UniformityofCellShape <= 2; criterion = 0.999, statistic =
154.999
4)* weights = 267
3) UniformityofCellShape > 2
5)* weights = 27
2) UniformityofCellSize > 3
6)* weights = 15
1) BareNuclei > 1
7) UniformityofCellShape <= 2; criterion = 1, statistic = 90.47
8) BareNuclei <= 3; criterion = 1, statistic = 17.802
9)* weights = 24
8) BareNuclei > 3
10)* weights = 16
7) UniformityofCellShape > 2
11)* weights = 320
> plot(myctree)
Figura 7. Representação da ctree
Testando a acurácia:
13
> testPred <- predict(myctree, newdata = testData)
> table(testPred, testData$Class)
testPred
benign malignant
benign
137
5
malignant
5
140
Acurácia = (137 + 140) / (137 + 140 + 5 + 5)
Método
Acurácia
ctree
96.5%
3.3. Naïve-Bayes
Utilizou-se a biblioteca e1071 para construir o classificador naive-bayes.
>
>
>
>
library(class)
library(e1071)
myNB <- naiveBayes(myformula, data=trainData)
table(predict(myNB, trainData[,-11]), trainData[,11])
benign
malignant
benign malignant
318
11
18
322
Testando a acurácia:
> testPred <- predict(myNB, newdata = testData)
> table(testPred, testData$Class)
testPred
benign malignant
benign
139
2
malignant
3
143
Acurácia = (139 + 143) / (139 + 143 + 3 + 2)
Método
Acurácia
naive-bayes
98.2%
14
3.4. SVM
Utilizou-se a biblioteca e1071 para construir o classificador SVM.
> library(e1071)
> mySvm <- svm(myformula, data=trainData)
> table(predict(mySvm, trainData[,-11]), trainData[,11])
benign
malignant
benign malignant
325
4
11
329
Testando a acurácia:
> testPred <- predict(mySvm, newdata = testData)
> table(testPred, testData$Class)
testPred
benign malignant
benign
139
0
malignant
3
145
Acurácia = (139 + 145) / (139 + 145 + 3 + 0)
Método
Acurácia
svm
99%
3.5. Multi-Layer Perceptron (MLP) - Neural Network
Utilizou-se a biblioteca RSNNS para construir o classificador MLP. Primeiramente foi
necessário concatenar os dados de treinamento e teste, pois a biblioteca RSNNS
inicialmente trabalha com todos os dados. Na sequência será separado treinamento e
teste na mesma proporção e com os mesmos dados, pois a função
splitForTrainingAndTest separará exatamente os mesmos conjuntos de dados (ratio=0.3,
30% para teste), atribuindo para teste os últimos registros do conjunto (e que pertenciam
exatamente ao conjunto de teste original). E finalmente é gerado o modelo MLP com
valor máximo de 50 operações.
> library(RSNNS)
> mlpData<-rbind(trainData, testData)
> table(mlpData$Class)
benign malignant
478
478
> mlpValues <- mlpData[,2:10]
15
> mlpTargets <- decodeClassLabels(mlpData[,11])
> split <- splitForTrainingAndTest(mlpValues, mlpTargets, ratio=0.3)
> norm <- normTrainingAndTestSet(split)
> model <- mlp(norm$inputsTrain, norm$targetsTrain, size=5,
learnFuncParams=c(0.1), maxit=50, inputsTest=norm$inputsTest,
targetsTest=norm$targetsTest)
Testando a acurácia:
> predictions <- predict(model,norm$inputsTest)
> confusionMatrix(norm$targetsTest,predictions)
predictions
targets
1
2
1 136
6
2
1 144
Acurácia = (136 + 144) / (136 + 144 + 6 + 1)
Método
Acurácia
mlp
97.6%
3.6. KNN
Utilizou-se a biblioteca DMwR para construir o classificador KNN.
>
>
>
>
>
>
>
>
>
>
>
library(DMwR)
myKnn1 <- kNN(myformula, trainData, testData, k=1)
myKnn3 <- kNN(myformula, trainData, testData, k=3)
myKnn5 <- kNN(myformula, trainData, testData, k=5)
myKnn7 <- kNN(myformula, trainData, testData, k=7)
myKnn10 <- kNN(myformula, trainData, testData, k=10)
myKnn15 <- kNN(myformula, trainData, testData, k=15)
myKnn30 <- kNN(myformula, trainData, testData, k=30)
myKnn50 <- kNN(myformula, trainData, testData, k=50)
myKnn100 <- kNN(myformula, trainData, testData, k=100)
myKnn200 <- kNN(myformula, trainData, testData, k=200)
Testando a acurácia para cada um dos myknn acima, a melhor acurácia aparece com
k=5.
> table(testData[,'Class'], myKnn5)
myKnn
16
benign
malignant
benign malignant
138
4
1
144
Método
k
Acurácia
1
97.9%
3
98.2%
5
98.3%
7
97.9%
10
97.9%
15
97.6%
30
97.6%
50
96.9%
100
96.2%
200
95.1%
Knn
4. Regra de Associação (a priori)
Nesta seção demonstra-se a aplicação do algoritmo de associação Apriori, gerando as
regras com confiança acima de 90%.
> library(arules)
> bc_no_id <- bc[,2:11] #remove o primeiro campo com id
>
for(i
in
1:9)
bc_no_id[,i]
<discretize(bc_no_id[,i],
categories=9) #os valores já são discretos, mas agora estão
preparados para serem convertidos em transactions
> transBC <- as(bc_no_id, "transactions")
> rules <- apriori(transBC, parameter = list(supp = 0.5, conf = 0.9,
target = "rules"))
Parameter specification:
confidence minval smax arem aval originalSupport support minlen
maxlen target
ext
0.9
0.1
1 none FALSE
TRUE
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 ...[83 item(s), 683 transaction(s)] done [0.00s].
17
sorting and recoding items ... [8 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 4 done [0.03s].
writing ... [33 rule(s)] done [0.03s].
creating S4 object ... done [0.00s].
> rules
set of 33 rules
No quadro a seguir listou-se as 5 primeiras regras dentre as 33 geradas.
> inspect(rules)
lhs
support confidence
lift
1 {UniformityofCellShape=[ 1, 2)}
0.5036603 0.9942197 1.529396
2 {UniformityofCellSize=[ 1, 2)}
0.5051245 0.9249330 1.462336
3 {UniformityofCellSize=[ 1, 2)}
0.5402635 0.9892761 1.521792
4 {UniformityofCellSize=[ 1, 2)}
0.5358712 0.9812332 1.190377
5 {SingleEpithelialCellSize=[ 2, 3)}
0.5197657 0.9441489 1.452373
rhs
=> {Class=benign}
=> {NormalNucleoli=[ 1, 2)}
=> {Class=benign}
=> {Mitoses=[ 1, 2)}
=> {Class=benign}
Suponha que se esteja interessado apenas nas regras em que rhs indique uma
associação que resulta em Benigno ou Maligno, para isso incluiu-se então um filtro e
executou-se novamente método apriori. As 14 regras resultantes são:
> rules <- apriori(transBC, parameter = list(supp = 0.5, conf = 0.9,
target
=
"rules"),
appearance
=
list(rhs=c("Class=benign",
"Class=malignant")))
> rules
set of 14 rules
> inspect(rules)
lhs
rhs
support confidence
lift
1 {UniformityofCellShape=[ 1, 2)}
=> {Class=benign}
0.5036603 0.9942197 1.529396
2 {UniformityofCellSize=[ 1, 2)}
=> {Class=benign}
0.5402635 0.9892761 1.521792
3 {SingleEpithelialCellSize=[ 2, 3)} => {Class=benign}
0.5197657 0.9441489 1.452373
4 {MarginalAdhesion=[ 1, 2)}
=> {Class=benign}
0.5314788 0.9236641 1.420862
5 {BareNuclei=[ 1, 2)}
=> {Class=benign}
0.5666179 0.9626866 1.480889
6 {NormalNucleoli=[ 1, 2)}
=> {Class=benign}
0.5724744 0.9050926 1.392293
18
7 {UniformityofCellSize=[ 1, 2),
NormalNucleoli=[ 1, 2)}
0.5036603 0.9971014 1.533829
8 {UniformityofCellSize=[ 1, 2),
Mitoses=[ 1, 2)}
0.5314788 0.9918033 1.525679
9 {SingleEpithelialCellSize=[ 2, 3),
Mitoses=[ 1, 2)}
0.5065886 0.9558011 1.470298
10 {MarginalAdhesion=[ 1, 2),
Mitoses=[ 1, 2)}
0.5226940 0.9545455 1.468366
11 {BareNuclei=[ 1, 2),
NormalNucleoli=[ 1, 2)}
0.5153734 0.9915493 1.525289
12 {BareNuclei=[ 1, 2),
Mitoses=[ 1, 2)}
0.5563690 0.9768638 1.502698
13 {NormalNucleoli=[ 1, 2),
Mitoses=[ 1, 2)}
0.5607613 0.9228916 1.419673
14 {BareNuclei=[ 1, 2),
NormalNucleoli=[ 1, 2),
Mitoses=[ 1, 2)}
0.5065886 0.9942529 1.529448
=> {Class=benign}
=> {Class=benign}
=> {Class=benign}
=> {Class=benign}
=> {Class=benign}
=> {Class=benign}
=> {Class=benign}
=> {Class=benign}
5. Agrupamento
Nesta seção demonstra-se a aplicação dos algoritmos de agrupamento k-means e
hierárquico. Para isso, a classe do tumor é retirada do conjunto de dados, junto com o
campo id.
> bcData <- bc[,2:10]
5.1. K-means
Comparando o resultado do agrupamento observa-se que as classes benigna e maligna
apresentam alguma sobreposição. Após, os agrupamentos e seus centros são plotados,
utilizando somente duas dimensões (Figura 8), e também utilizando todas as 9
dimensões (Figura 9).
> (kmeans.result <- kmeans(bcData, 2))
> table(bc$Class, kmeans.result$cluster)
1
2
benign
9 435
malignant 221 18
19
>
plot(bcData[c("UniformityofCellShape",
"BareNuclei")],
col
=
kmeans.result$cluster)
> points(kmeans.result$centers[,c("UniformityofCellShape",
"BareNuclei")], col = 1:2,pch = 8, cex=2)
>
plot(bcData[c("ClumpThickness",
"UniformityofCellSize",
"UniformityofCellShape",
"MarginalAdhesion",
"SingleEpithelialCellSize",
"BareNuclei",
"BlandChromatin",
"NormalNucleoli", "Mitoses")], col = kmeans.result$cluster)
>
points(kmeans.result$centers[,c("ClumpThickness",
"UniformityofCellSize", "UniformityofCellShape", "MarginalAdhesion",
"SingleEpithelialCellSize",
"BareNuclei",
"BlandChromatin",
"NormalNucleoli", "Mitoses")], col = 1:2,pch = 8, cex=2)
Figura 8. Resultado do agrupamento k-means (2 dimensões)
20
Figura 9. Resultado do agrupamento k-means (9 dimensões)
5.2. Hierárquico
Observando o agrupamento também fica claro que as classes benigna e maligna
apresentam alguma sobreposição (Figura 10), o agrupamento da classe benigna está em
sua maioria à esquerda e da classe maligna à direita.
>
>
>
>
hc <- hclust(dist(bcData), method="average")
plot(hc, hang = -1, labels=bc$Class)
rect.hclust(hc, k=2)
groups <- cutree(hc, k=2)
21
Figura 10. Resultado do agrupamento Hierárquico
6. Detecção de desvios
Nesta seção demonstra-se a aplicação do algoritmo LOF de detecção de desvios.
6.1. LOF (Local Outlier Factor)
A classe do tumor é novamente retirada do conjunto de dados, junto com o campo id.
Os campos duplicados também são retirados (método unique) para que o método LOF
não gere divisões por zero e consequentemente valores espúrios (NaN). Na figura 11 é
apresentada a densidade dos valores discrepantes e na Figura 12 o resultado de Biplot de
dois principais componentes.
> bcData <- unique(bc[,2:10])
> outlier.scores <- lofactor(bcData, k=5)
> plot(density(outlier.scores))
> outliers <- order(outlier.scores, decreasing=T)[1:5]
> print(outliers) # Apresenta 5 outliers principais
[1] 115 443 137 222
7
> n <- nrow(bcData)
> labels <- 1:n
> labels[-outliers] <- "."
> biplot(prcomp(bcData), cex=.8, xlabs=labels)
22
Figura 10. Densidade dos outliers
Figura 11. Outliers gerados por Biplot
7. Análise dos Resultados
Nesta seção estão consolidado os resultados encontrados.
23
7.1. Classificação
O melhor modelo para classificação sobre o conjunto utilizado foi o SVM.
Método
Acurácia
ctree
96.5%
naive-bayes
98.2%
svm
99%
mlp
97.6
knn
98.3
7.2. Associação
O algoritmo apriori gerou 33 regras gerais, e 14 específicas com saídas filtradas por uma
das duas classes, maligna ou benigna. Algumas das regras apresentadas, quando
analisadas, sugeririam atalhos na interpretação da árvore de decisão e poderiam ser
utilizadas em conjunto para manipular a árvore. Por exemplo, a regra:
{UniformityofCellShape=[ 1, 2)}
=> {Class=benign}
Demonstra que se uma célula tem formato uniforme = 1, ela é benigna.
7.3. Agrupamentos
Os dois métodos utilizados, K-means e Hierárquico mostraram que há sobreposição
entre os valores das amostras benignas e malignas.
7.4. Detecção de desvios
Nos dados utilizados para gerar os outliers, vários valores apareceram (após
computados) como 'não-numéricos' e antes de ressubmeter para o algoritmo, os valores
duplicados tiveram que ser retirados.
Como o valor das amostras é determinado por mecanismos óticos
(automatizados ou não), que varrem a célula para atribuir os valores, espera-se que já
exista um erro, da própria leitura, nos valores armazenados para cada uma das amostras.
8. Conclusão
Neste artigo apresentou-se a utilização da ferramenta R para criar modelos de
classificação, regras de associação e agrupamentos sobre um dataset de amostras de
câncer de mama. A ferramenta R possui grande aplicabilidade principalmente pela
comunidade que ativamente provê métodos e funções para expandir suas
funcionalidades. Este relatório mostrou a aplicação de vários métodos da ferramenta no
trabalho de mineração de dados sobre um dataset com amostras de câncer.
24
Bibliografia
K. P. Bennett & O. L. Mangasarian: "Robust linear programming discrimination of two
linearly inseparable sets", Optimization Methods and Software 1, 1992, 23-34
(Gordon & Breach Science Publishers).
Lichman, M. (2013). UCI Machine Learning Repository [http://archive.ics.uci.edu/ml].
Irvine, CA: University of California, School of Information and Computer Science.
Mangasarian, O. L. and Wolberg, W. H. : "Cancer diagnosis via linear programming",
SIAM News, Volume 23, Number 5, September 1990, pp 1 & 18.
Mangasarian, O. L. & R. Setiono, and W.H. Wolberg: "Pattern recognition via linear
programming: Theory and application to medical diagnosis", in: "Large-scale
numerical optimization", Thomas F. Coleman and Yuying Li, editors, SIAM
Publications, Philadelphia 1990, pp 22-30.
Wang, K. J., & Adrian, A. M. (2013). Breast cancer classification using hybrid synthetic
minority over-sampling technique and artificial immune recognition system
algorithm. Int J Comput Sci Electron Eng (IJCSEE), 1(3), 408-412.
Wolberg, W. H. and O.L. Mangasarian: "Multisurface method of pattern separation for
medical diagnosis applied to breast cytology", Proceedings of the National Academy
of Sciences, U.S.A., Volume 87, December 1990, pp 9193-9196.
25
Download

Data Mining sobre um dataset de Câncer de Mama